livetext 0.9.30 → 0.9.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,359 +0,0 @@
1
- require 'minitest/autorun'
2
-
3
- require_relative 'lib/livetext'
4
-
5
- class TestingLivetext < MiniTest::Test
6
-
7
- LineParser = Livetext::LineParser
8
-
9
- def perform_test(recv, sym, msg, src, exp)
10
- actual = recv.send(sym, src)
11
- if exp[0] == "/"
12
- exp = Regexp.compile(exp[1..-2]) # skip slashes
13
- $testme = false
14
- assert_match(exp, actual, msg)
15
- else
16
- $testme = false
17
- assert_equal(exp, actual, msg)
18
- end
19
- end
20
-
21
- def invoke_test(msg, src, exp)
22
- actual = LineParser.parse!(src)
23
- if exp[0] == "/"
24
- exp = Regexp.compile(exp[1..-2]) # skip slashes
25
- $testme = false
26
- assert_match(exp, actual, msg)
27
- else
28
- $testme = false
29
- assert_equal(exp, actual, msg)
30
- end
31
- end
32
-
33
- # Some (most) methods were generated via the code
34
- # seen in the comment at the bottom of this file...
35
-
36
- def test_simple_string
37
- parse = LineParser.new("only testing")
38
- tokens = parse.parse_variables # .tokenize
39
- assert_equal tokens, [[:str, "only testing"]], "Tokens were: #{tokens.inspect}"
40
- # expected = "only testing"
41
- # result = parse.evaluate
42
- # assert_equal expected, result
43
- end
44
-
45
- def test_variable_interpolation
46
- $testme = true
47
- parse = LineParser.new("File is $File and user is $User")
48
- tokens = parse.parse_variables # tokenize
49
- expected_tokens = [[:str, "File is "],
50
- [:var, "File"],
51
- [:str, " and user is "],
52
- [:var, "User"]]
53
- assert_equal expected_tokens, tokens
54
- # result = parse.evaluate
55
- # expected = "File is [File is undefined] and user is Hal" # FIXME
56
- # assert_equal expected, result
57
- $testme = false
58
- end
59
-
60
- def test_NEW_var_expansion
61
- parse = LineParser.new("File is $File and user is $User")
62
- expected = "File is [File is undefined] and user is Hal" # FIXME
63
- str = parse.parse_variables
64
- assert_equal expected, str
65
- end
66
-
67
- def test_func_expansion
68
- parse = LineParser.new("myfunc() results in $$myfunc apparently.")
69
- tokens = parse.parse_functions # .tokenize
70
- expected_tokens = [[:str, "myfunc() results in "],
71
- [:func, "myfunc", nil, nil],
72
- [:str, " apparently."]]
73
- assert_equal expected_tokens, tokens
74
- # result = parse.evaluate
75
- # expected = "myfunc() results in [Error evaluating $$myfunc()] apparently."
76
- # assert_equal expected, result
77
- end
78
-
79
- # These tests follow this form:
80
- #
81
- # def xtest_func_SUFFIX
82
- # str = "WHATEVER"
83
- # parse = LineParser.new(str)
84
- # tokens_expected = [[], [], ...]
85
- # tokens = parse.tokenize
86
- # assert_equal tokens_expected, tokens
87
- # result = parse.evaluate
88
- # regex_expected = /Today is ....-..-../
89
- # assert_match regex_expected, result, "Found unexpected: #{result.inspect}"
90
- # end
91
-
92
- def test_func_2
93
- str = "Today is $$date"
94
- parse = LineParser.new(str)
95
- tokens_expected = [[:str, "Today is "], [:func, "date", nil, nil]]
96
- tokens = parse.parse_functions # tokenize
97
- assert_equal tokens_expected, tokens, "Tokens were: #{tokens.inspect}"
98
- result = parse.evaluate
99
- regex_expected = /Today is ....-..-../
100
- assert_match regex_expected, result, "Found unexpected: #{result.inspect}"
101
- end
102
-
103
- def test_var_before_comma
104
- str = "User name is $User, and all is well"
105
- parse = LineParser.new(str)
106
- tokens_expected = [[:str, "User name is "], [:var, "User"], [:str, ", and all is well"]]
107
- tokens = parse.parse_variables # tokenize
108
- assert_equal tokens_expected, tokens, "Tokens were: #{tokens.inspect}"
109
- result = parse.evaluate
110
- regex_expected = /User name is .*, /
111
- assert_match regex_expected, result, "Found unexpected: #{result.inspect}"
112
- end
113
-
114
- def test_var_at_EOS
115
- str = "File name is $File"
116
- parse = LineParser.new(str)
117
- tokens_expected = [[:str, "File name is "], [:var, "File"]]
118
- tokens = parse.parse_variables # tokenize
119
- assert_equal tokens_expected, tokens
120
- result = parse.evaluate
121
- string_expected = "File name is [File is undefined]"
122
- assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
123
- end
124
-
125
- def test_var_starts_string
126
- str = "$File is my file name"
127
- parse = LineParser.new(str)
128
- tokens_expected = [[:var, "File"], [:str, " is my file name"]]
129
- tokens = parse.parse_variables # tokenize
130
- assert_equal tokens_expected, tokens
131
- result = parse.evaluate
132
- string_expected = "[File is undefined] is my file name"
133
- assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
134
- end
135
-
136
- # Next one is/will be a problem...
137
- # I permit periods *inside* variable names
138
-
139
- def test_var_before_period
140
- str = "This is $File\\." # FIXME escaped for now...
141
- parse = LineParser.new(str)
142
- tokens_expected = [[:str, "This is "], [:var, "File"], [:str, "."]]
143
- tokens = parse.tokenize
144
- assert_equal tokens_expected, tokens
145
- result = parse.evaluate
146
- string_expected = "This is [File is undefined]."
147
- assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
148
- end
149
-
150
- def test_func_needing_parameter_colon_eos # colon, param, EOS
151
- str = "Square root of 225 is $$isqrt:225"
152
- parse = LineParser.new(str)
153
- tokens_expected = [[:str, "Square root of 225 is "], [:func, "isqrt", :colon, "225"]]
154
- tokens = parse.parse_functions # tokenize
155
- assert_equal tokens_expected, tokens
156
- # result = parse.evaluate
157
- # string_expected = "Square root of 225 is 15"
158
- # assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
159
- end
160
-
161
- def test_func_needing_parameter_colon # colon, param, more chars
162
- str = "Answer is $$isqrt:225 today"
163
- parse = LineParser.new(str)
164
- tokens_expected = [[:str, "Answer is "],
165
- [:func, "isqrt", :colon, "225"],
166
- [:str, " today"]]
167
- tokens = parse.parse_functions # tokenize
168
- assert_equal tokens_expected, tokens
169
- # result = parse.evaluate
170
- # string_expected = "Answer is 15 today"
171
- # assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
172
- end
173
-
174
- # isqrt: Not real tests??
175
-
176
- def test_isqrt_empty_colon_param
177
- str = "Calculate $$isqrt:"
178
- parse = LineParser.new(str)
179
- tokens_expected = [[:str, "Calculate "],
180
- [:func, "isqrt", :colon, ""]]
181
- tokens = parse.parse_functions # tokenize
182
- assert_equal tokens_expected, tokens
183
- # result = parse.evaluate
184
- # string_expected = "Calculate [Error evaluating $$isqrt(NO PARAM)]"
185
- # assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
186
- end
187
-
188
- def test_isqrt_empty_bracket_param
189
- str = "Calculate $$isqrt[]"
190
- parse = LineParser.new(str)
191
- tokens_expected = [[:str, "Calculate "],
192
- [:func, "isqrt", :brackets, ""] # , [:colon, ""]
193
- ]
194
- # If param is null, we don't get [:colon, value]!
195
- # ^ FIXME function should be more like: [:func, name, param]
196
- tokens = parse.parse_functions # tokenize
197
- assert_equal tokens_expected, tokens
198
- # result = parse.evaluate
199
- # string_expected = "Calculate [Error evaluating $$isqrt(NO PARAM)]"
200
- # assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
201
- end
202
-
203
- def test_isqrt_malformed_number
204
- str = "Calculate $$isqrt[3a5]"
205
- parse = LineParser.new(str)
206
- tokens_expected = [[:str, "Calculate "],
207
- [:func, "isqrt", :brackets, "3a5"]
208
- ]
209
- # ^ FIXME function should be more like: [:func, name, param]
210
- tokens = parse.parse_functions # tokenize
211
- assert_equal tokens_expected, tokens
212
- # result = parse.evaluate
213
- # string_expected = "Calculate [Error evaluating $$isqrt(3a5)]"
214
- # assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
215
- end
216
-
217
- # ...end of this group
218
-
219
- def test_func_with_colon
220
- parse = LineParser.new("Calling $$myfunc:foo here.")
221
- tokens = parse.parse_functions # tokenize
222
- assert_equal tokens, [[:str, "Calling "],
223
- [:func, "myfunc", :colon, "foo"],
224
- [:str, " here."]]
225
- # result = parse.evaluate
226
- # expected = "Calling [Error evaluating $$myfunc(foo)] here."
227
- # assert_equal expected, result
228
- end
229
-
230
- def test_func_with_brackets
231
- parse = LineParser.new("Calling $$myfunc2[foo bar] here.")
232
- tokens = parse.parse_functions # .tokenize
233
- expected_tokens = [[:str, "Calling "],
234
- [:func, "myfunc2", :brackets, "foo bar"],
235
- [:str, " here."]]
236
- assert_equal expected_tokens, tokens
237
- # result = parse.evaluate
238
- # expected = "Calling [Error evaluating $$myfunc2(foo bar)] here."
239
- # assert_equal expected, result
240
- end
241
-
242
- def test_parse_formatting
243
- msg, src, exp = <<~STUFF.split("\n")
244
- Check simple formatting
245
- This is *bold and _italics ...
246
- This is <b>bold</b> and <i>italics</i> ...
247
- STUFF
248
- invoke_test(msg, src, exp)
249
- end
250
-
251
- def test_formatting_01 # Check output of $$date
252
- msg, src, exp = <<~STUFF.split("\n")
253
- Check output of $$date
254
- Today is $$date, I guess
255
- /Today is \\d\\d\\d\\d-\\d\\d-\\d\\d, I guess/
256
- STUFF
257
- invoke_test(msg, src, exp)
258
- end
259
-
260
- def test_formatting_32 # Check "real" dollar signs
261
- msg, src, exp = <<~STUFF.split("\n")
262
- Check "real" dollar signs
263
- You paid $75 for that item.
264
- You paid $75 for that item.
265
- STUFF
266
- invoke_test(msg, src, exp)
267
- end
268
-
269
- def test_formatting_33 # Check dollar-space
270
- msg, src, exp = <<~STUFF.split("\n")
271
- Check dollar-space
272
- He paid $ 76 for it...
273
- He paid $ 76 for it...
274
- STUFF
275
- invoke_test(msg, src, exp)
276
- end
277
-
278
- def test_formatting_34 # Check escaped dollar signs
279
- msg, src, exp = <<~STUFF.split("\n")
280
- Check escaped dollar signs
281
- Paid \\$78 yo
282
- Paid $78 yo
283
- STUFF
284
- invoke_test(msg, src, exp)
285
- end
286
-
287
- def test_formatting_35 # Check ignored function param (bug or feature?)
288
- msg, src, exp = <<~STUFF.split("\n")
289
- Check ignored function param (bug or feature?)
290
- Today is $$date:foobar, apparently.
291
- /Today is \\d\\d\\d\\d.\\d\\d.\\d\\d apparently./
292
- STUFF
293
- invoke_test(msg, src, exp)
294
- end
295
-
296
- def test_formatting_36 # Check ignored function bracket param (bug or feature?)
297
- msg, src, exp = <<~STUFF.split("\n")
298
- Check ignored function bracket param (bug or feature?)
299
- Today is $$date[a useless parameter], apparently.
300
- /Today is \\d\\\d\\d\\d.\\d\\d.\\d\\d, apparently./
301
- STUFF
302
- invoke_test(msg, src, exp)
303
- end
304
-
305
- end
306
-
307
- # Test generation logic:
308
-
309
- =begin
310
- TestLines = []
311
-
312
- items = []
313
- formatting_tests = File.open("test/snapshots/formatting-tests.txt")
314
- loop do
315
- 4.times { items << formatting_tests.gets.chomp }
316
- # Blank line terminates each "stanza"
317
- raise "Oops? #{items.inspect}" unless items.last.empty?
318
- TestLines << items
319
- break if formatting_tests.eof?
320
- end
321
-
322
- STDERR.puts <<~RUBY
323
- require 'minitest/autorun'
324
-
325
- require_relative '../lib/livetext'
326
-
327
- # Just another testing class. Chill.
328
-
329
- class TestingLivetext < MiniTest::Test
330
- RUBY
331
-
332
- TestLines.each.with_index do |item, num|
333
- msg, src, exp, blank = *item
334
- # generate tests...
335
- name = "test_formatting_#{'%02d' % (num + 1)}"
336
- method_source = <<~RUBY
337
- def #{name} # #{msg}
338
- msg, src, exp = <<~STUFF.split("\\n")
339
- #{msg}
340
- #{src}
341
- #{exp}
342
- STUFF
343
-
344
- actual = LineParser.parse!(src)
345
- # FIXME could simplify assert logic?
346
- if exp[0] == "/"
347
- exp = Regexp.compile(exp[1..-2]) # skip slashes
348
- assert_match(exp, actual, msg)
349
- else
350
- assert_equal(exp, actual, msg)
351
- end
352
- end
353
-
354
- RUBY
355
- STDERR.puts method_source
356
- end
357
- STDERR.puts "\nend"
358
- end
359
- =end