livetext 0.9.21 → 0.9.25

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