livetext 0.9.21 → 0.9.22
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.
- checksums.yaml +4 -4
- data/imports/bookish.rb +8 -10
- data/imports/pyggish.rb +2 -34
- data/imports/tutorial.rb +2 -2
- data/lib/cmdargs.rb +2 -3
- data/lib/formatline.rb +101 -73
- data/lib/functions.rb +16 -1
- data/lib/handler/{icanhaz.rb → import.rb} +1 -1
- data/lib/handler.rb +1 -1
- data/lib/helpers.rb +10 -10
- data/lib/livetext.rb +12 -5
- data/lib/parser/set.rb +1 -3
- data/lib/parser/string.rb +2 -2
- data/lib/processor.rb +6 -2
- data/lib/standard.rb +15 -15
- data/lib/userapi.rb +4 -2
- data/plugin/bookish.rb +4 -5
- data/plugin/pyggish.rb +45 -77
- data/plugin/tutorial.rb +0 -1
- data/test/snapshots/error_inc_line_num/actual-error.txt +14 -0
- data/test/snapshots/error_inc_line_num/actual-output.txt +7 -0
- data/test/snapshots/error_inc_line_num/out-sdiff.txt +14 -0
- data/test/snapshots/error_invalid_name/actual-error.txt +10 -0
- data/test/snapshots/{icanhaz2/expected-error.txt → error_invalid_name/actual-output.txt} +0 -0
- data/test/snapshots/error_invalid_name/out-sdiff.txt +6 -0
- data/test/snapshots/error_missing_end/actual-error.txt +10 -0
- data/test/snapshots/error_missing_end/actual-output.txt +0 -0
- data/test/snapshots/error_missing_end/out-sdiff.txt +6 -0
- data/test/snapshots/error_no_such_copy/actual-error.txt +10 -0
- data/test/snapshots/error_no_such_copy/actual-output.txt +0 -0
- data/test/snapshots/error_no_such_inc/actual-error.txt +10 -0
- data/test/snapshots/error_no_such_inc/actual-output.txt +0 -0
- data/test/snapshots/error_no_such_mixin/actual-error.txt +13 -0
- data/test/snapshots/error_no_such_mixin/actual-output.txt +0 -0
- data/test/snapshots/error_no_such_mixin/out-sdiff.txt +6 -0
- data/test/snapshots/import/actual-error.txt +13 -0
- data/test/snapshots/import/actual-output.txt +0 -0
- data/test/snapshots/{icanhaz → import}/expected-output.txt +0 -0
- data/test/snapshots/{icanhaz → import}/match-error.txt +0 -0
- data/test/snapshots/import/out-sdiff.txt +6 -0
- data/test/snapshots/{icanhaz → import}/simple_import.rb +0 -0
- data/test/snapshots/{icanhaz → import}/source.lt3 +2 -2
- data/test/snapshots/import2/expected-error.txt +0 -0
- data/test/snapshots/{icanhaz2 → import2}/expected-output.txt +3 -1
- data/test/snapshots/{icanhaz2/simple_canhaz.rb → import2/simple_import.rb} +0 -0
- data/test/snapshots/import2/source.lt3 +8 -0
- data/test/snapshots/more_functions/expected-error.txt +0 -0
- data/test/snapshots/more_functions/expected-output.txt +37 -0
- data/test/snapshots/more_functions/source.lt3 +40 -0
- data/test/snapshots/simple_import/expected-output.txt +2 -0
- data/test/snapshots/simple_import/source.lt3 +3 -1
- data/test/snapshots/subset.txt +11 -12
- data/test/snapshots/wtf_bookish/expected-error.txt +0 -0
- data/test/snapshots/wtf_bookish/expected-output.txt +10 -0
- data/test/snapshots/wtf_bookish/source.lt3 +7 -0
- data/test/snapshots/wtf_bookish/toc.tmp +0 -0
- data/test/snapshots.rb +6 -7
- data/test/unit/formatline.rb +252 -135
- data/test/unit/parser/set.rb +6 -10
- data/test/unit/parser/string.rb +5 -5
- data/test/unit/standard.rb +0 -1
- metadata +37 -13
- data/lib/livetext/importable.rb +0 -2
- data/lib/parser/import.rb +0 -15
- data/test/snapshots/icanhaz2/source.lt3 +0 -6
data/test/unit/formatline.rb
CHANGED
@@ -4,94 +4,188 @@ require_relative '../../lib/livetext'
|
|
4
4
|
|
5
5
|
class TestingLivetext < MiniTest::Test
|
6
6
|
|
7
|
-
# Some (most) methods were generated via
|
7
|
+
# Some (most) methods were generated via the code
|
8
|
+
# seen in the comment at the bottom of this file...
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
# Blank line terminates each "stanza"
|
17
|
-
raise "Oops? #{items.inspect}" unless items.last.empty?
|
18
|
-
TestLines << items
|
19
|
-
break if formatting_tests.eof?
|
10
|
+
def test_simple_string
|
11
|
+
parse = FormatLine.new("only testing")
|
12
|
+
tokens = parse.tokenize
|
13
|
+
assert_equal tokens, [[:str, "only testing"]], "Tokens were: #{tokens.inspect}"
|
14
|
+
expected = "only testing"
|
15
|
+
result = parse.evaluate
|
16
|
+
assert_equal expected, result
|
20
17
|
end
|
21
18
|
|
22
|
-
|
23
|
-
|
19
|
+
def test_variable_interpolation
|
20
|
+
parse = FormatLine.new("File is $File and user is $User")
|
21
|
+
tokens = parse.tokenize
|
22
|
+
expected_tokens = [[:str, "File is "],
|
23
|
+
[:var, "File"],
|
24
|
+
[:str, " and user is "],
|
25
|
+
[:var, "User"]]
|
26
|
+
assert_equal expected_tokens, tokens
|
27
|
+
result = parse.evaluate
|
28
|
+
expected = "File is [File is undefined] and user is [User is undefined]"
|
29
|
+
assert_equal expected, result
|
30
|
+
end
|
24
31
|
|
25
|
-
|
32
|
+
def test_func_expansion
|
33
|
+
parse = FormatLine.new("myfunc() results in $$myfunc apparently.")
|
34
|
+
tokens = parse.tokenize
|
35
|
+
expected_tokens = [[:str, "myfunc() results in "],
|
36
|
+
[:func, "myfunc"],
|
37
|
+
[:str, " apparently."]]
|
38
|
+
assert_equal expected_tokens, tokens
|
39
|
+
result = parse.evaluate
|
40
|
+
expected = "myfunc() results in [Error evaluating $$myfunc()] apparently."
|
41
|
+
assert_equal expected, result
|
42
|
+
end
|
43
|
+
|
44
|
+
# These tests follow this form:
|
45
|
+
#
|
46
|
+
# def test_func_SUFFIX
|
47
|
+
# str = "WHATEVER"
|
48
|
+
# parse = FormatLine.new(str)
|
49
|
+
# tokens_expected = [[], [], ...]
|
50
|
+
# tokens = parse.tokenize
|
51
|
+
# assert_equal tokens_expected, tokens
|
52
|
+
# result = parse.evaluate
|
53
|
+
# regex_expected = /Today is ....-..-../
|
54
|
+
# assert_match regex_expected, result, "Found unexpected: #{result.inspect}"
|
55
|
+
# end
|
56
|
+
|
57
|
+
def test_func_2
|
58
|
+
str = "Today is $$date"
|
59
|
+
parse = FormatLine.new(str)
|
60
|
+
tokens_expected = [[:str, "Today is "], [:func, "date"]]
|
61
|
+
tokens = parse.tokenize
|
62
|
+
assert_equal tokens_expected, tokens, "Tokens were: #{tokens.inspect}"
|
63
|
+
result = parse.evaluate
|
64
|
+
regex_expected = /Today is ....-..-../
|
65
|
+
assert_match regex_expected, result, "Found unexpected: #{result.inspect}"
|
66
|
+
end
|
26
67
|
|
27
|
-
|
68
|
+
def test_var_before_comma
|
69
|
+
str = "User name is $User, and all is well"
|
70
|
+
parse = FormatLine.new(str)
|
71
|
+
tokens_expected = [[:str, "User name is "], [:var, "User"], [:str, ", and all is well"]]
|
72
|
+
tokens = parse.tokenize
|
73
|
+
assert_equal tokens_expected, tokens, "Tokens were: #{tokens.inspect}"
|
74
|
+
result = parse.evaluate
|
75
|
+
regex_expected = /User name is .*, /
|
76
|
+
assert_match regex_expected, result, "Found unexpected: #{result.inspect}"
|
77
|
+
end
|
28
78
|
|
29
|
-
|
30
|
-
|
79
|
+
def test_var_at_EOS
|
80
|
+
str = "File name is $File"
|
81
|
+
parse = FormatLine.new(str)
|
82
|
+
tokens_expected = [[:str, "File name is "], [:var, "File"]]
|
83
|
+
tokens = parse.tokenize
|
84
|
+
assert_equal tokens_expected, tokens
|
85
|
+
result = parse.evaluate
|
86
|
+
string_expected = "File name is [File is undefined]"
|
87
|
+
assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
|
88
|
+
end
|
31
89
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
STUFF
|
90
|
+
def test_var_starts_string
|
91
|
+
str = "$File is my file name"
|
92
|
+
parse = FormatLine.new(str)
|
93
|
+
tokens_expected = [[:var, "File"], [:str, " is my file name"]]
|
94
|
+
tokens = parse.tokenize
|
95
|
+
assert_equal tokens_expected, tokens
|
96
|
+
result = parse.evaluate
|
97
|
+
string_expected = "[File is undefined] is my file name"
|
98
|
+
assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
|
99
|
+
end
|
43
100
|
|
44
|
-
|
45
|
-
|
46
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
47
|
-
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
48
|
-
assert_match(exp, actual, msg)
|
49
|
-
else
|
50
|
-
assert_equal(exp, actual, msg)
|
51
|
-
end
|
52
|
-
end
|
101
|
+
# Next one is/will be a problem...
|
102
|
+
# I permit periods *inside* variable names
|
53
103
|
|
54
|
-
|
55
|
-
|
104
|
+
def test_var_before_period
|
105
|
+
str = "This is $File."
|
106
|
+
parse = FormatLine.new(str)
|
107
|
+
tokens_expected = [[:str, "This is "], [:var, "File"], [:str, "."]]
|
108
|
+
tokens = parse.tokenize
|
109
|
+
assert_equal tokens_expected, tokens
|
110
|
+
result = parse.evaluate
|
111
|
+
string_expected = "This is [File is undefined]."
|
112
|
+
assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
|
56
113
|
end
|
57
|
-
STDERR.puts "\nend"
|
58
|
-
end
|
59
|
-
=end
|
60
114
|
|
61
|
-
def
|
62
|
-
|
115
|
+
def test_func_needing_parameter_colon_eos # colon, param, EOS
|
116
|
+
str = "Square root of 225 is $$isqrt:225"
|
117
|
+
parse = FormatLine.new(str)
|
118
|
+
tokens_expected = [[:str, "Square root of 225 is "], [:func, "isqrt"], [:colon, "225"]]
|
63
119
|
tokens = parse.tokenize
|
64
|
-
assert_equal
|
65
|
-
expected = "only testing"
|
120
|
+
assert_equal tokens_expected, tokens
|
66
121
|
result = parse.evaluate
|
67
|
-
|
122
|
+
string_expected = "Square root of 225 is 15"
|
123
|
+
assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
|
68
124
|
end
|
69
125
|
|
70
|
-
def
|
71
|
-
|
126
|
+
def test_func_needing_parameter_colon # colon, param, more chars
|
127
|
+
str = "Answer is $$isqrt:225 today"
|
128
|
+
parse = FormatLine.new(str)
|
129
|
+
tokens_expected = [[:str, "Answer is "],
|
130
|
+
[:func, "isqrt"],
|
131
|
+
[:colon, "225"],
|
132
|
+
[:str, " today"]]
|
72
133
|
tokens = parse.tokenize
|
73
|
-
assert_equal
|
74
|
-
[:var, "File"],
|
75
|
-
[:str, " and user is "],
|
76
|
-
[:var, "User"]
|
77
|
-
]
|
134
|
+
assert_equal tokens_expected, tokens
|
78
135
|
result = parse.evaluate
|
79
|
-
|
80
|
-
|
136
|
+
string_expected = "Answer is 15 today"
|
137
|
+
assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
|
81
138
|
end
|
82
139
|
|
83
|
-
|
84
|
-
|
140
|
+
# isqrt: Not real tests??
|
141
|
+
|
142
|
+
def test_isqrt_empty_colon_param
|
143
|
+
str = "Calculate $$isqrt:"
|
144
|
+
parse = FormatLine.new(str)
|
145
|
+
tokens_expected = [[:str, "Calculate "],
|
146
|
+
[:func, "isqrt"] # , [:colon, ""]
|
147
|
+
]
|
148
|
+
# If param is null, we don't get [:colon, value]!
|
149
|
+
# ^ FIXME function should be more like: [:func, name, param]
|
85
150
|
tokens = parse.tokenize
|
86
|
-
assert_equal
|
87
|
-
[:func, "myfunc"],
|
88
|
-
[:str, " apparently."]
|
89
|
-
]
|
151
|
+
assert_equal tokens_expected, tokens
|
90
152
|
result = parse.evaluate
|
91
|
-
|
92
|
-
|
153
|
+
string_expected = "Calculate [Error evaluating $$isqrt(NO PARAM)]"
|
154
|
+
assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_isqrt_empty_bracket_param
|
158
|
+
str = "Calculate $$isqrt[]"
|
159
|
+
parse = FormatLine.new(str)
|
160
|
+
tokens_expected = [[:str, "Calculate "],
|
161
|
+
[:func, "isqrt"] # , [:colon, ""]
|
162
|
+
]
|
163
|
+
# If param is null, we don't get [:colon, value]!
|
164
|
+
# ^ FIXME function should be more like: [:func, name, param]
|
165
|
+
tokens = parse.tokenize
|
166
|
+
assert_equal tokens_expected, tokens
|
167
|
+
result = parse.evaluate
|
168
|
+
string_expected = "Calculate [Error evaluating $$isqrt(NO PARAM)]"
|
169
|
+
assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_isqrt_malformed_number
|
173
|
+
str = "Calculate $$isqrt[3a5]"
|
174
|
+
parse = FormatLine.new(str)
|
175
|
+
tokens_expected = [[:str, "Calculate "],
|
176
|
+
[:func, "isqrt"],
|
177
|
+
[:brackets, "3a5"]
|
178
|
+
]
|
179
|
+
# ^ FIXME function should be more like: [:func, name, param]
|
180
|
+
tokens = parse.tokenize
|
181
|
+
assert_equal tokens_expected, tokens
|
182
|
+
result = parse.evaluate
|
183
|
+
string_expected = "Calculate [Error evaluating $$isqrt(3a5)]"
|
184
|
+
assert_equal string_expected, result, "Found unexpected: #{result.inspect}"
|
93
185
|
end
|
94
186
|
|
187
|
+
# ...end of this group
|
188
|
+
|
95
189
|
def test_func_with_colon
|
96
190
|
parse = FormatLine.new("Calling $$myfunc:foo here.")
|
97
191
|
tokens = parse.tokenize
|
@@ -102,22 +196,22 @@ end
|
|
102
196
|
]
|
103
197
|
result = parse.evaluate
|
104
198
|
expected = "Calling [Error evaluating $$myfunc(foo)] here."
|
105
|
-
|
199
|
+
assert_equal expected, result
|
106
200
|
end
|
107
201
|
|
108
202
|
def test_func_with_brackets
|
109
203
|
parse = FormatLine.new("Calling $$myfunc2[foo bar] here.")
|
110
204
|
tokens = parse.tokenize
|
111
205
|
assert_kind_of Array, tokens
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
206
|
+
assert_equal 4, tokens.size
|
207
|
+
expected_tokens = [[:str, "Calling "],
|
208
|
+
[:func, "myfunc2"],
|
209
|
+
[:brackets, "foo bar"],
|
210
|
+
[:str, " here."]]
|
211
|
+
assert_equal expected_tokens, tokens
|
118
212
|
result = parse.evaluate
|
119
213
|
expected = "Calling [Error evaluating $$myfunc2(foo bar)] here."
|
120
|
-
|
214
|
+
assert_equal expected, result
|
121
215
|
end
|
122
216
|
|
123
217
|
def test_formatting_01 # Check output of $$date
|
@@ -128,8 +222,7 @@ end
|
|
128
222
|
STUFF
|
129
223
|
|
130
224
|
actual = FormatLine.parse!(src)
|
131
|
-
|
132
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
225
|
+
if exp[0] == "/"
|
133
226
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
134
227
|
assert_match(exp, actual, msg)
|
135
228
|
else
|
@@ -145,8 +238,7 @@ end
|
|
145
238
|
STUFF
|
146
239
|
|
147
240
|
actual = FormatLine.parse!(src)
|
148
|
-
|
149
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
241
|
+
if exp[0] == "/"
|
150
242
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
151
243
|
assert_match(exp, actual, msg)
|
152
244
|
else
|
@@ -162,8 +254,7 @@ end
|
|
162
254
|
STUFF
|
163
255
|
|
164
256
|
actual = FormatLine.parse!(src)
|
165
|
-
|
166
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
257
|
+
if exp[0] == "/"
|
167
258
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
168
259
|
assert_match(exp, actual, msg)
|
169
260
|
else
|
@@ -179,8 +270,7 @@ end
|
|
179
270
|
STUFF
|
180
271
|
|
181
272
|
actual = FormatLine.parse!(src)
|
182
|
-
|
183
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
273
|
+
if exp[0] == "/"
|
184
274
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
185
275
|
assert_match(exp, actual, msg)
|
186
276
|
else
|
@@ -196,8 +286,7 @@ end
|
|
196
286
|
STUFF
|
197
287
|
|
198
288
|
actual = FormatLine.parse!(src)
|
199
|
-
|
200
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
289
|
+
if exp[0] == "/"
|
201
290
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
202
291
|
assert_match(exp, actual, msg)
|
203
292
|
else
|
@@ -213,8 +302,7 @@ end
|
|
213
302
|
STUFF
|
214
303
|
|
215
304
|
actual = FormatLine.parse!(src)
|
216
|
-
|
217
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
305
|
+
if exp[0] == "/"
|
218
306
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
219
307
|
assert_match(exp, actual, msg)
|
220
308
|
else
|
@@ -230,8 +318,7 @@ end
|
|
230
318
|
STUFF
|
231
319
|
|
232
320
|
actual = FormatLine.parse!(src)
|
233
|
-
|
234
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
321
|
+
if exp[0] == "/"
|
235
322
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
236
323
|
assert_match(exp, actual, msg)
|
237
324
|
else
|
@@ -247,8 +334,7 @@ end
|
|
247
334
|
STUFF
|
248
335
|
|
249
336
|
actual = FormatLine.parse!(src)
|
250
|
-
|
251
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
337
|
+
if exp[0] == "/"
|
252
338
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
253
339
|
assert_match(exp, actual, msg)
|
254
340
|
else
|
@@ -264,8 +350,7 @@ end
|
|
264
350
|
STUFF
|
265
351
|
|
266
352
|
actual = FormatLine.parse!(src)
|
267
|
-
|
268
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
353
|
+
if exp[0] == "/"
|
269
354
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
270
355
|
assert_match(exp, actual, msg)
|
271
356
|
else
|
@@ -281,8 +366,7 @@ end
|
|
281
366
|
STUFF
|
282
367
|
|
283
368
|
actual = FormatLine.parse!(src)
|
284
|
-
|
285
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
369
|
+
if exp[0] == "/"
|
286
370
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
287
371
|
assert_match(exp, actual, msg)
|
288
372
|
else
|
@@ -298,8 +382,7 @@ end
|
|
298
382
|
STUFF
|
299
383
|
|
300
384
|
actual = FormatLine.parse!(src)
|
301
|
-
|
302
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
385
|
+
if exp[0] == "/"
|
303
386
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
304
387
|
assert_match(exp, actual, msg)
|
305
388
|
else
|
@@ -315,8 +398,7 @@ end
|
|
315
398
|
STUFF
|
316
399
|
|
317
400
|
actual = FormatLine.parse!(src)
|
318
|
-
|
319
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
401
|
+
if exp[0] == "/"
|
320
402
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
321
403
|
assert_match(exp, actual, msg)
|
322
404
|
else
|
@@ -332,8 +414,7 @@ end
|
|
332
414
|
STUFF
|
333
415
|
|
334
416
|
actual = FormatLine.parse!(src)
|
335
|
-
|
336
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
417
|
+
if exp[0] == "/"
|
337
418
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
338
419
|
assert_match(exp, actual, msg)
|
339
420
|
else
|
@@ -349,8 +430,7 @@ end
|
|
349
430
|
STUFF
|
350
431
|
|
351
432
|
actual = FormatLine.parse!(src)
|
352
|
-
|
353
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
433
|
+
if exp[0] == "/"
|
354
434
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
355
435
|
assert_match(exp, actual, msg)
|
356
436
|
else
|
@@ -366,8 +446,7 @@ end
|
|
366
446
|
STUFF
|
367
447
|
|
368
448
|
actual = FormatLine.parse!(src)
|
369
|
-
|
370
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
449
|
+
if exp[0] == "/"
|
371
450
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
372
451
|
assert_match(exp, actual, msg)
|
373
452
|
else
|
@@ -383,8 +462,7 @@ end
|
|
383
462
|
STUFF
|
384
463
|
|
385
464
|
actual = FormatLine.parse!(src)
|
386
|
-
|
387
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
465
|
+
if exp[0] == "/"
|
388
466
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
389
467
|
assert_match(exp, actual, msg)
|
390
468
|
else
|
@@ -400,8 +478,7 @@ end
|
|
400
478
|
STUFF
|
401
479
|
|
402
480
|
actual = FormatLine.parse!(src)
|
403
|
-
|
404
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
481
|
+
if exp[0] == "/"
|
405
482
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
406
483
|
assert_match(exp, actual, msg)
|
407
484
|
else
|
@@ -417,8 +494,7 @@ end
|
|
417
494
|
STUFF
|
418
495
|
|
419
496
|
actual = FormatLine.parse!(src)
|
420
|
-
|
421
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
497
|
+
if exp[0] == "/"
|
422
498
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
423
499
|
assert_match(exp, actual, msg)
|
424
500
|
else
|
@@ -434,8 +510,7 @@ end
|
|
434
510
|
STUFF
|
435
511
|
|
436
512
|
actual = FormatLine.parse!(src)
|
437
|
-
|
438
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
513
|
+
if exp[0] == "/"
|
439
514
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
440
515
|
assert_match(exp, actual, msg)
|
441
516
|
else
|
@@ -451,8 +526,7 @@ end
|
|
451
526
|
STUFF
|
452
527
|
|
453
528
|
actual = FormatLine.parse!(src)
|
454
|
-
|
455
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
529
|
+
if exp[0] == "/"
|
456
530
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
457
531
|
assert_match(exp, actual, msg)
|
458
532
|
else
|
@@ -468,8 +542,7 @@ end
|
|
468
542
|
STUFF
|
469
543
|
|
470
544
|
actual = FormatLine.parse!(src)
|
471
|
-
|
472
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
545
|
+
if exp[0] == "/"
|
473
546
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
474
547
|
assert_match(exp, actual, msg)
|
475
548
|
else
|
@@ -485,8 +558,7 @@ end
|
|
485
558
|
STUFF
|
486
559
|
|
487
560
|
actual = FormatLine.parse!(src)
|
488
|
-
|
489
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
561
|
+
if exp[0] == "/"
|
490
562
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
491
563
|
assert_match(exp, actual, msg)
|
492
564
|
else
|
@@ -502,8 +574,7 @@ end
|
|
502
574
|
STUFF
|
503
575
|
|
504
576
|
actual = FormatLine.parse!(src)
|
505
|
-
|
506
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
577
|
+
if exp[0] == "/"
|
507
578
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
508
579
|
assert_match(exp, actual, msg)
|
509
580
|
else
|
@@ -519,8 +590,7 @@ end
|
|
519
590
|
STUFF
|
520
591
|
|
521
592
|
actual = FormatLine.parse!(src)
|
522
|
-
|
523
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
593
|
+
if exp[0] == "/"
|
524
594
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
525
595
|
assert_match(exp, actual, msg)
|
526
596
|
else
|
@@ -536,8 +606,7 @@ end
|
|
536
606
|
STUFF
|
537
607
|
|
538
608
|
actual = FormatLine.parse!(src)
|
539
|
-
|
540
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
609
|
+
if exp[0] == "/"
|
541
610
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
542
611
|
assert_match(exp, actual, msg)
|
543
612
|
else
|
@@ -553,8 +622,7 @@ end
|
|
553
622
|
STUFF
|
554
623
|
|
555
624
|
actual = FormatLine.parse!(src)
|
556
|
-
|
557
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
625
|
+
if exp[0] == "/"
|
558
626
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
559
627
|
assert_match(exp, actual, msg)
|
560
628
|
else
|
@@ -570,8 +638,7 @@ end
|
|
570
638
|
STUFF
|
571
639
|
|
572
640
|
actual = FormatLine.parse!(src)
|
573
|
-
|
574
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
641
|
+
if exp[0] == "/"
|
575
642
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
576
643
|
assert_match(exp, actual, msg)
|
577
644
|
else
|
@@ -587,8 +654,7 @@ end
|
|
587
654
|
STUFF
|
588
655
|
|
589
656
|
actual = FormatLine.parse!(src)
|
590
|
-
|
591
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
657
|
+
if exp[0] == "/"
|
592
658
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
593
659
|
assert_match(exp, actual, msg)
|
594
660
|
else
|
@@ -604,8 +670,7 @@ end
|
|
604
670
|
STUFF
|
605
671
|
|
606
672
|
actual = FormatLine.parse!(src)
|
607
|
-
|
608
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
673
|
+
if exp[0] == "/"
|
609
674
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
610
675
|
assert_match(exp, actual, msg)
|
611
676
|
else
|
@@ -621,8 +686,7 @@ end
|
|
621
686
|
STUFF
|
622
687
|
|
623
688
|
actual = FormatLine.parse!(src)
|
624
|
-
|
625
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
689
|
+
if exp[0] == "/"
|
626
690
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
627
691
|
assert_match(exp, actual, msg)
|
628
692
|
else
|
@@ -638,8 +702,7 @@ end
|
|
638
702
|
STUFF
|
639
703
|
|
640
704
|
actual = FormatLine.parse!(src)
|
641
|
-
|
642
|
-
if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
|
705
|
+
if exp[0] == "/"
|
643
706
|
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
644
707
|
assert_match(exp, actual, msg)
|
645
708
|
else
|
@@ -648,3 +711,57 @@ end
|
|
648
711
|
end
|
649
712
|
|
650
713
|
end
|
714
|
+
|
715
|
+
# Test generation logic:
|
716
|
+
|
717
|
+
=begin
|
718
|
+
TestLines = []
|
719
|
+
|
720
|
+
items = []
|
721
|
+
formatting_tests = File.open("test/snapshots/formatting-tests.txt")
|
722
|
+
loop do
|
723
|
+
4.times { items << formatting_tests.gets.chomp }
|
724
|
+
# Blank line terminates each "stanza"
|
725
|
+
raise "Oops? #{items.inspect}" unless items.last.empty?
|
726
|
+
TestLines << items
|
727
|
+
break if formatting_tests.eof?
|
728
|
+
end
|
729
|
+
|
730
|
+
STDERR.puts <<~RUBY
|
731
|
+
require 'minitest/autorun'
|
732
|
+
|
733
|
+
require_relative '../lib/livetext'
|
734
|
+
|
735
|
+
# Just another testing class. Chill.
|
736
|
+
|
737
|
+
class TestingLivetext < MiniTest::Test
|
738
|
+
RUBY
|
739
|
+
|
740
|
+
TestLines.each.with_index do |item, num|
|
741
|
+
msg, src, exp, blank = *item
|
742
|
+
# generate tests...
|
743
|
+
name = "test_formatting_#{'%02d' % (num + 1)}"
|
744
|
+
method_source = <<~RUBY
|
745
|
+
def #{name} # #{msg}
|
746
|
+
msg, src, exp = <<~STUFF.split("\\n")
|
747
|
+
#{msg}
|
748
|
+
#{src}
|
749
|
+
#{exp}
|
750
|
+
STUFF
|
751
|
+
|
752
|
+
actual = FormatLine.parse!(src)
|
753
|
+
# FIXME could simplify assert logic?
|
754
|
+
if exp[0] == "/"
|
755
|
+
exp = Regexp.compile(exp[1..-2]) # skip slashes
|
756
|
+
assert_match(exp, actual, msg)
|
757
|
+
else
|
758
|
+
assert_equal(exp, actual, msg)
|
759
|
+
end
|
760
|
+
end
|
761
|
+
|
762
|
+
RUBY
|
763
|
+
STDERR.puts method_source
|
764
|
+
end
|
765
|
+
STDERR.puts "\nend"
|
766
|
+
end
|
767
|
+
=end
|
data/test/unit/parser/set.rb
CHANGED
@@ -137,30 +137,26 @@ class TestParseSet < MiniTest::Test
|
|
137
137
|
# - allow/disallow escaping??
|
138
138
|
end
|
139
139
|
|
140
|
-
# BUG: FormatLine doesn't know variables in this context!
|
141
|
-
|
142
140
|
def test_var_eq_var
|
143
141
|
set = ParseSet.new("file = $File").parse
|
144
142
|
set = set.first # [["var", "value"]]
|
145
143
|
assert_equal set.first, "file"
|
146
|
-
|
144
|
+
assert set.last =~ /undefined/, "Found 'undefined' for variable value"
|
145
|
+
# ^ ParseSet isn't smart enough to know about variables/functions
|
147
146
|
end
|
148
147
|
|
149
|
-
# BUG: ...or functions.
|
150
|
-
# (Additional bug: Failing silently seems wrong.)
|
151
|
-
|
152
148
|
def test_var_eq_func
|
153
149
|
set = ParseSet.new("date = $$date").parse
|
154
150
|
set = set.first # [["var", "value"]]
|
155
151
|
assert_equal set.first, "date"
|
156
|
-
|
157
|
-
|
152
|
+
assert set.last =~ /undefined/, "Found 'undefined' for variable value"
|
153
|
+
# ^ ParseSet isn't smart enough to know about variables/functions
|
158
154
|
end
|
159
155
|
|
160
156
|
def test_two_strings
|
161
|
-
line = %[bday="
|
157
|
+
line = %[bday="May 31", date='5/31']
|
162
158
|
set = ParseSet.new(line).parse
|
163
|
-
assert set == [["bday", "
|
159
|
+
assert set == [["bday", "May 31"], ["date", "5/31"]]
|
164
160
|
end
|
165
161
|
|
166
162
|
end
|