livetext 0.9.13 → 0.9.14

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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/lib/errors.rb +4 -2
  3. data/lib/functions.rb +1 -1
  4. data/lib/helpers.rb +4 -0
  5. data/lib/livetext.rb +15 -9
  6. data/lib/parser/general.rb +1 -1
  7. data/lib/parser/mixin.rb +1 -7
  8. data/lib/processor.rb +1 -8
  9. data/lib/standard.rb +6 -11
  10. data/lib/userapi.rb +0 -4
  11. data/test/all.rb +1 -0
  12. data/test/formatting-tests.rb +35 -0
  13. data/test/snapshots/OMIT.txt +10 -0
  14. data/test/snapshots/error_inc_line_num/match-error.txt +1 -0
  15. data/test/snapshots/error_invalid_name/match-error.txt +1 -0
  16. data/test/snapshots/error_line_num/match-error.txt +1 -0
  17. data/test/snapshots/error_mismatched_end/expected-output.txt +0 -2
  18. data/test/snapshots/error_mismatched_end/match-error.txt +1 -0
  19. data/test/snapshots/error_missing_end/match-error.txt +1 -0
  20. data/test/snapshots/error_no_such_copy/match-error.txt +1 -0
  21. data/test/snapshots/error_no_such_inc/match-error.txt +1 -0
  22. data/test/snapshots/error_no_such_mixin/match-error.txt +1 -0
  23. data/test/snapshots/{lines.txt → formatting-tests.txt} +0 -0
  24. data/test/snapshots/predef_vars/match-output.txt +6 -0
  25. data/test/snapshots.rb +41 -92
  26. data/test/unit/parser/general.rb +21 -21
  27. data/test/unit/parser/mixin.rb +1 -1
  28. data/test/unit/parser.rb +2 -0
  29. metadata +13 -44
  30. data/test/snapshots/error_inc_line_num/actual-error.txt +0 -1
  31. data/test/snapshots/error_inc_line_num/actual-output.txt +0 -13
  32. data/test/snapshots/error_inc_line_num/expected-err-line1match.txt +0 -1
  33. data/test/snapshots/error_inc_line_num/out-sdiff.txt +0 -14
  34. data/test/snapshots/error_invalid_name/actual-error.txt +0 -10
  35. data/test/snapshots/error_invalid_name/actual-output.txt +0 -0
  36. data/test/snapshots/error_invalid_name/expected-err-line1match.txt +0 -1
  37. data/test/snapshots/error_invalid_name/out-sdiff.txt +0 -6
  38. data/test/snapshots/error_line_num/actual-error.txt +0 -1
  39. data/test/snapshots/error_line_num/actual-output.txt +0 -5
  40. data/test/snapshots/error_line_num/expected-err-line1match.txt +0 -1
  41. data/test/snapshots/error_line_num/out-sdiff.txt +0 -6
  42. data/test/snapshots/error_mismatched_end/actual-error.txt +0 -1
  43. data/test/snapshots/error_mismatched_end/actual-output.txt +0 -8
  44. data/test/snapshots/error_mismatched_end/expected-err-line1match.txt +0 -1
  45. data/test/snapshots/error_mismatched_end/out-sdiff.txt +0 -9
  46. data/test/snapshots/error_missing_end/actual-error.txt +0 -1
  47. data/test/snapshots/error_missing_end/actual-output.txt +0 -5
  48. data/test/snapshots/error_missing_end/expected-err-line1match.txt +0 -1
  49. data/test/snapshots/error_missing_end/out-sdiff.txt +0 -6
  50. data/test/snapshots/error_name_not_permitted/OLD-exp-out +0 -4
  51. data/test/snapshots/error_no_such_copy/actual-error.txt +0 -10
  52. data/test/snapshots/error_no_such_copy/actual-output.txt +0 -0
  53. data/test/snapshots/error_no_such_copy/expected-err-line1match.txt +0 -1
  54. data/test/snapshots/error_no_such_copy/out-sdiff.txt +0 -5
  55. data/test/snapshots/error_no_such_inc/actual-error.txt +0 -10
  56. data/test/snapshots/error_no_such_inc/actual-output.txt +0 -0
  57. data/test/snapshots/error_no_such_inc/expected-err-line1match.txt +0 -1
  58. data/test/snapshots/error_no_such_inc/out-sdiff.txt +0 -6
  59. data/test/snapshots/error_no_such_mixin/actual-error.txt +0 -1
  60. data/test/snapshots/error_no_such_mixin/actual-output.txt +0 -11
  61. data/test/snapshots/error_no_such_mixin/expected-err-line1match.txt +0 -1
  62. data/test/snapshots/error_no_such_mixin/out-sdiff.txt +0 -12
  63. data/test/snapshots/predef_vars/actual-error.txt +0 -0
  64. data/test/snapshots/predef_vars/actual-output.txt +0 -6
  65. data/test/snapshots/predef_vars/expected-output.txt +0 -6
  66. data/test/snapshots/predef_vars/out-sdiff.txt +0 -7
  67. data/test/snapshots/simple_mixin/actual-error.txt +0 -2
  68. data/test/snapshots/simple_mixin/actual-output.txt +0 -4
  69. data/test/snapshots/simple_mixin/out-sdiff.txt +0 -6
  70. data/test/unit/parse_misc.rb +0 -60
  71. data/test/unit/parse_set.rb +0 -157
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8f9a5d4be00258f23687ca280b306794cb67f2e7c89ba1a453c60dfd59f4268d
4
- data.tar.gz: 423d1901855f09e06f5448008e12095713110d1d4dc8ba4f31ddf871319d2bb3
3
+ metadata.gz: d9e6ad9c8d933b361da03fadc6cc4d28e0a8b699f8f50e434db9bf41f0b9d66b
4
+ data.tar.gz: 49e59704162aea72ac92122d69f0006591856b9fe09f2b2fdbf6843b7253b80b
5
5
  SHA512:
6
- metadata.gz: dfd42d9206980d3819e45fc174baf74378c01d13e61c8a8ce58f00bc3d3b7889b1bace1b74076c5491657978e704b55e6f82543e57ffdaa128993f6ec584c5e9
7
- data.tar.gz: 570a8c6f92f4baaadad6c946871910e7ae2107741bef4212e16e7a49e90e1f929a8149c9f99553319a811eb42a6ce37fff0e15b8985235b91858f800d3ca77be
6
+ metadata.gz: 74b1b06e0bc91d976c0f60a2136ed8bb1c4d2d5ba33359620752b44a51918a89fbba2cec9c542ae12a6368de82bdc4db64b30a4d95146caab4e5a290f9c7fa8b
7
+ data.tar.gz: ed0c0fa3b4da538ddbd31cd799a84f5647d45a369f0f45d729c223f74c7b0f2445bfc0812aa0c319b9a9f5992efa6af521d550eed38a8e2c551b183e28a16722
data/lib/errors.rb CHANGED
@@ -3,11 +3,13 @@
3
3
 
4
4
  def make_exception(sym, str, target_class = Object)
5
5
  return if target_class.constants.include?(sym)
6
- target_class.const_set(sym, StandardError.dup)
6
+ klass = sym # :"#{sym}_Class"
7
+ target_class.const_set(klass, StandardError.dup)
7
8
  define_method(sym) do |*args|
9
+ args = [] unless args.first
8
10
  msg = str.dup
9
11
  args.each.with_index {|arg, i| msg.sub!("%#{i+1}", arg) }
10
- target_class.class_eval(sym.to_s).new(msg)
12
+ target_class.class_eval(klass.to_s).new(msg)
11
13
  end
12
14
  end
13
15
 
data/lib/functions.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- require_relative 'standard' # FIXME?
2
+ require_relative 'standard' # FIXME umm, why is this necessary??
3
3
 
4
4
  # Class Functions is where '$$func' functions are stored dynamically...
5
5
  # user-def AND pre-def??
data/lib/helpers.rb CHANGED
@@ -18,4 +18,8 @@ module Helpers
18
18
  end
19
19
  end
20
20
 
21
+ def grab_file(fname)
22
+ File.read(fname)
23
+ end
24
+
21
25
  end
data/lib/livetext.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # Class Livetext skeleton (top level).
2
2
 
3
3
  class Livetext
4
- VERSION = "0.9.13"
4
+ VERSION = "0.9.14"
5
5
  Path = File.expand_path(File.join(File.dirname(__FILE__)))
6
6
  end
7
7
 
@@ -9,6 +9,7 @@ end
9
9
 
10
10
  require 'fileutils'
11
11
 
12
+ require 'helpers'
12
13
  require_relative 'errors'
13
14
  require_relative 'functions'
14
15
  require_relative 'userapi'
@@ -20,10 +21,14 @@ Plugins = File.expand_path(File.join(File.dirname(__FILE__), "../plugin"))
20
21
 
21
22
  TTY = ::File.open("/dev/tty", "w")
22
23
 
24
+ make_exception(:EndWithoutOpening, "Error: found .end with no opening command")
25
+
23
26
  # Class Livetext reopened (top level).
24
27
 
25
28
  class Livetext
26
29
 
30
+ include Helpers
31
+
27
32
  Vars = {}
28
33
 
29
34
  Space = " "
@@ -192,7 +197,7 @@ class Livetext
192
197
 
193
198
  def process_file(fname, btrace=false)
194
199
  _setfile(fname)
195
- text = File.readlines(fname) # FIXME currently causes failure
200
+ text = File.readlines(fname)
196
201
  enum = text.each
197
202
  @backtrace = btrace
198
203
  @main.source(enum, fname, 0)
@@ -228,20 +233,21 @@ class Livetext
228
233
  line = line.sub(/# .*$/, "")
229
234
  name = _get_name(line).to_sym
230
235
  result = nil
231
- if @main.respond_to?(name)
232
- result = @main.send(name)
236
+ case
237
+ when name == :end # special case
238
+ puts @body
239
+ raise EndWithoutOpening()
240
+ when @main.respond_to?(name)
241
+ result = @main.send(name)
233
242
  else
234
243
  @main._error! "Name '#{name}' is unknown"
235
244
  return
236
245
  end
237
246
  result
238
247
  rescue => err
248
+ puts @body # earlier correct output, not flushed yet
239
249
  STDERR.puts "Error: #{err.inspect}"
240
- # STDERR.puts err.backtrace
241
- # @main._error!(err)
242
- puts @body
243
- @body = ""
244
- return @body
250
+ STDERR.puts err.backtrace
245
251
  end
246
252
 
247
253
  end
@@ -7,7 +7,7 @@ make_exception(:NilValue, "Error: nil value")
7
7
  make_exception(:NullString, "Error: null string")
8
8
  make_exception(:ExpectedString, "Error: expected a string")
9
9
 
10
- class Livetext::ParseMisc < StringParser
10
+ class Livetext::ParseGeneral < StringParser
11
11
 
12
12
  def initialize(str)
13
13
  super
data/lib/parser/mixin.rb CHANGED
@@ -8,13 +8,7 @@ make_exception(:NoEqualSign, "Error: no equal sign found")
8
8
 
9
9
  class Livetext::ParseMixin # < StringParser
10
10
 
11
- # def self.parse(str)
12
- # self.new(str).parse
13
- # end
14
- #
15
- # def initialize(line)
16
- # super
17
- # end
11
+ include Helpers
18
12
 
19
13
  def cwd_root?
20
14
  File.dirname(File.expand_path(".")) == "/"
data/lib/processor.rb CHANGED
@@ -40,12 +40,8 @@ class Livetext
40
40
 
41
41
  def _error!(err, raise_error=false, trace=false) # FIXME much bullshit happens here
42
42
  where = @sources.last || @save_location
43
- # puts @parent.body
44
- # puts "[lib/processor] Error: #{err}"
45
- # puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
46
- STDERR.puts "Error: #{err}" # (at #{where[1]} line #{where[2]})"
43
+ STDERR.puts "Error: #{err} (at #{where[1]} line #{where[2]})"
47
44
  STDERR.puts err.backtrace if err.respond_to?(:backtrace) # && trace
48
- # raise "lib/processor error!" # FIXME
49
45
  raise GenericError.new("Error: #{err}") if raise_error
50
46
  end
51
47
 
@@ -76,9 +72,6 @@ class Livetext
76
72
  nil
77
73
  end
78
74
 
79
- def grab_file(fname)
80
- File.read(fname)
81
- end
82
75
 
83
76
  end
84
77
 
data/lib/standard.rb CHANGED
@@ -24,7 +24,7 @@ module Livetext::Standard
24
24
 
25
25
  attr_reader :_data
26
26
 
27
- def data=(val) # FIXME this is weird, let's not do it
27
+ def data=(val) # FIXME this is weird, let's remove it soonish
28
28
  @_data = val.chomp
29
29
  @_args = val.split rescue []
30
30
  @_mixins = []
@@ -154,6 +154,8 @@ module Livetext::Standard
154
154
  set_variables(pairs)
155
155
  end
156
156
 
157
+ # FIXME really these should be one method...
158
+
157
159
  def variables! # cwd, not FileDir - weird, fix later
158
160
  prefix = _args[0]
159
161
  file = _args[1]
@@ -164,7 +166,7 @@ module Livetext::Standard
164
166
  else
165
167
  lines = _body
166
168
  end
167
- pairs = Livetext::ParseMisc.parse_vars(prefix, lines)
169
+ pairs = Livetext::ParseGeneral.parse_vars(prefix, lines)
168
170
  set_variables(pairs)
169
171
  end
170
172
 
@@ -178,7 +180,7 @@ module Livetext::Standard
178
180
  else
179
181
  lines = _body
180
182
  end
181
- pairs = Livetext::ParseMisc.parse_vars(prefix, lines)
183
+ pairs = Livetext::ParseGeneral.parse_vars(prefix, lines)
182
184
  set_variables(pairs)
183
185
  end
184
186
 
@@ -225,13 +227,6 @@ module Livetext::Standard
225
227
  _optional_blank_line
226
228
  end
227
229
 
228
- def in_out # FIXME dumb name!
229
- file, dest = *@_args
230
- check_file_exists(file)
231
- @parent.process_file(file, dest)
232
- _optional_blank_line
233
- end
234
-
235
230
  def _include # dot command
236
231
  file = _format(@_args.first) # allows for variables
237
232
  check_file_exists(file)
@@ -260,7 +255,7 @@ module Livetext::Standard
260
255
  name = @_args.first # Expect a module name
261
256
  return if @_mixins.include?(name)
262
257
  @_mixins << name
263
- parse = Livetext::ParseMixin.new(name) # FIXME??
258
+ parse = Livetext::ParseMixin.new # (name) # FIXME??
264
259
  file = parse.find_mixin(name)
265
260
  parse.use_mixin(name, file)
266
261
  _optional_blank_line
data/lib/userapi.rb CHANGED
@@ -94,10 +94,6 @@ module Livetext::UserAPI
94
94
  else
95
95
  lines
96
96
  end
97
- # rescue => err
98
- # str = err.inspect + "\n"
99
- # str << err.backtrace.map {|x| " " + x }.join("\n")
100
- # _error!(str)
101
97
  end
102
98
 
103
99
  def _body_text(raw=false)
data/test/all.rb CHANGED
@@ -1,3 +1,4 @@
1
1
 
2
2
  require_relative 'unit/all'
3
3
  require_relative 'snapshots' # snapshots
4
+ require_relative 'formatting-tests' # one-liners in input
@@ -0,0 +1,35 @@
1
+ require 'minitest/autorun'
2
+
3
+ require_relative '../lib/livetext'
4
+
5
+ # Just another testing class. Chill.
6
+
7
+ class TestingLivetext < MiniTest::Test
8
+
9
+ TestLines = []
10
+
11
+ items = []
12
+ formatting_tests = File.open("formatting-tests.txt")
13
+ loop do
14
+ 4.times { items << formatting_tests.gets.chomp }
15
+ # Blank line terminates each "stanza"
16
+ raise "Oops? #{items.inspect}" unless items.last.empty?
17
+ TestLines << items
18
+ break if formatting_tests.eof?
19
+ end
20
+
21
+ TestLines.each.with_index do |item, num|
22
+ msg, src, exp, blank = *item
23
+ define_method("test_formatting_#{num}") do
24
+ actual = FormatLine.parse!(src)
25
+ # FIXME could simplify assert logic?
26
+ if exp[0] == "/" # regex! FIXME doesn't honor %r[...]
27
+ exp = Regexp.compile(exp[1..-2]) # skip slashes
28
+ assert_match(exp, actual, msg)
29
+ else
30
+ assert_equal(exp, actual, msg)
31
+ end
32
+ end
33
+ end
34
+ end
35
+
@@ -0,0 +1,10 @@
1
+ # Comments are ignored.
2
+ # Other lines: name_of_snapshot and any comments here are ignored (no # needed)
3
+ # fake_test_name Use # to un-omit ;)
4
+ error_no_such_inc Output BEFORE error doesn't get passed through
5
+ error_no_such_copy ^ Same behavior as error_no_such_inc
6
+ simple_mixin Mixin doesn't work?? But no error... maybe _def isn't working.
7
+ error_missing_end Output is duplicated somehow. Look for: puts @body or puts @main.body
8
+ error_no_such_mixin ^ Same behavior as error_missing_end
9
+ error_line_num Same behavior as error_missing_end
10
+ error_invalid_name ^ Same behavior as error_no_such_inc
@@ -0,0 +1 @@
1
+ 1 /Error: Name 'foobar' is unknown/
@@ -0,0 +1 @@
1
+ 1 /Error: Illegal name 'to_s'/
@@ -0,0 +1 @@
1
+ 1 /Error: Name 'foobar' is unknown/
@@ -4,5 +4,3 @@ without something
4
4
  beginning a block:
5
5
  <p>
6
6
 
7
- foo bar
8
- baz
@@ -0,0 +1 @@
1
+ 1 /Error: found .end with no opening command/
@@ -0,0 +1 @@
1
+ 1 /Error: Expected .end, found end of file/
@@ -0,0 +1 @@
1
+ 1 /Error: file nosuchfile.txt not found/
@@ -0,0 +1 @@
1
+ 1 /Error: file nosuchinc.lt3 not found/
@@ -0,0 +1 @@
1
+ 1 /No such mixin 'nosuchthing'/
File without changes
@@ -0,0 +1,6 @@
1
+ 1 Here we go...
2
+ 2 File = source.lt3
3
+ 3 /FileDir = .*.test.snapshots.predef_vars/
4
+ 4 /User = [A-Za-z][A-Za-z0-9]*/
5
+ 5 /Version = 0\.\d{1,2}\.\d{1,2}/
6
+ 6 NoSuchVar = [NoSuchVar is undefined]
data/test/snapshots.rb CHANGED
@@ -8,17 +8,27 @@ Snapshots...
8
8
  NOTE that the external_files method has been replaced by the Snapshot class.
9
9
 
10
10
  You can add any ordinary test method above. But so far, most of these tests simply
11
- call external_files.
11
+ call Snapshot.new
12
12
 
13
- The external_files method works this way:
13
+ It works this way:
14
14
  - If the test (caller) method is test_my_silly_feature, then we will
15
15
  look for a directory called snapshots/my_silly_feature
16
- - In here, there must be a source.lt3, expected-output.txt, and expected-error.txt
17
- - Technically, any of these can be empty
16
+ - In here, there must be a source.lt3
17
+ - ...and also either expected-output.txt OR match-output.txt (not both)
18
+ - ...and also either expected-error.txt OR match-error.txt (not both)
19
+ - Technically, any existing file can be empty
20
+ - The expected-* files are "literal" data
21
+ * compared byte-for-byte
22
+ * watch spaces and bad regexes, etc. #duh
23
+ * each of these files corresponds to a single assertion
24
+ - A match-* file has two entries per line:
25
+ * a ONE-BASED line number (in actual-* file)
26
+ * a String OR a Regexp (to match against that line)
27
+ * If there is nonsense here, it currently isn't caught
28
+ * each of these files MAY correspond to many assertions
18
29
  - We run livetext on the source and compare actual vs expected (stdout, stderr)
19
- - The "real" output gets checked first
30
+ - The error output gets checked first (expected or match), THEN standard output
20
31
  - Of course, both must compare correctly for the test to pass
21
- - See also: match*
22
32
  =end
23
33
 
24
34
 
@@ -58,13 +68,12 @@ class TestingLivetext < MiniTest::Test
58
68
  info = "Expected line #{line_num} of #{actual.inspect} to match #{item.inspect} (was: #{lines[line_num].inspect})"
59
69
  good = item === lines[line_num]
60
70
  @errors = true unless good
61
- # assert item === lines[line_num], info # string or regex
62
71
  @assertion.call item === lines[line_num], info # string or regex
63
72
  end
64
73
  end
65
74
 
66
75
  def sdiff(f1, f2, out)
67
- File.open(out, "w") {|file| file.puts "#{'%-60s'% 'EXPECTED'}| #{'%-60s'% 'ACTUAL'}" }
76
+ File.open(out, "w") {|file| file.puts "#{'%-60s'% 'ACTUAL'}| #{'%-60s'% 'EXPECTED'}" }
68
77
  system("/usr/bin/sdiff -t -w 121 #{f1} #{f2} >>#{out}")
69
78
  end
70
79
 
@@ -75,8 +84,7 @@ class TestingLivetext < MiniTest::Test
75
84
  @errors = true if not same
76
85
  file = "out-sdiff.txt"
77
86
  sdiff(ACTUAL_OUT, EXP_OUT, file)
78
- # assert same, "Discrepancy in STDOUT - see #@base/#{file}"
79
- @assertion.call same, "Discrepancy in STDOUT - see #@base/#{file}"
87
+ @assertion.call same, "Discrepancy in STDOUT - see #{file} in test/snapshots/#@base"
80
88
  else
81
89
  check_matches(ACTUAL_OUT, MATCH_OUT)
82
90
  end
@@ -89,8 +97,7 @@ class TestingLivetext < MiniTest::Test
89
97
  @errors = true if not same
90
98
  file = "err-sdiff.txt"
91
99
  sdiff(ACTUAL_ERR, EXP_ERR, file)
92
- # assert same, "Discrepancy in STDERR - see #@base/#{file}"
93
- @assertion.call same, "Discrepancy in STDERR - see #@base/#{file}"
100
+ @assertion.call same, "Discrepancy in STDERR - see #{file} in test/snapshots/#@base"
94
101
  else
95
102
  check_matches(ACTUAL_ERR, MATCH_ERR)
96
103
  end
@@ -101,6 +108,9 @@ class TestingLivetext < MiniTest::Test
101
108
  system("rm -f #{ACTUAL_OUT} #{ACTUAL_ERR} *sdiff.txt")
102
109
  end
103
110
 
111
+ def filter # TODO move subset/omit logic here??
112
+ end
113
+
104
114
  def run
105
115
  @errors = false # oops, need to reset
106
116
  Dir.chdir(@base) do
@@ -115,7 +125,7 @@ class TestingLivetext < MiniTest::Test
115
125
 
116
126
  TTY = File.open("/dev/tty","w")
117
127
 
118
- cmdline = ARGV.first == "cmdline"
128
+ cmdline = ARGV.first == "cmdline" # FIXME remove??
119
129
  if cmdline
120
130
  dir = "../"
121
131
  Dir.chdir `livetext --path`.chomp.chomp
@@ -124,38 +134,29 @@ class TestingLivetext < MiniTest::Test
124
134
  end
125
135
 
126
136
  Data = "#{dir}test/snapshots"
127
- TestLines = []
128
137
  Dir.chdir(Data)
129
138
 
130
- items = []
131
- short_tests = File.open("lines.txt")
132
- loop do
133
- 4.times { items << short_tests.gets.chomp }
134
- # Blank line terminates each "stanza"
135
- raise "Oops? #{items.inspect}" unless items.last.empty?
136
- TestLines << items
137
- break if short_tests.eof?
138
- end
139
+ TestDirs = Dir.entries(".").reject {|fname| ! File.directory?(fname) } - %w[. ..]
139
140
 
140
- if File.size("subset.txt") == 0
141
- puts "Defining via TestLines"
142
- TestLines.each.with_index do |item, num|
143
- msg, src, exp, blank = *item
144
- define_method("test_formatting_#{num}") do
145
- actual = FormatLine.parse!(src)
146
- if exp[0] == "/" # regex!
147
- exp = Regexp.compile(exp[1..-2]) # skip slashes
148
- assert_match(exp, actual, msg)
149
- else
150
- assert_equal(exp, actual, msg)
151
- end
152
- end
153
- end
141
+ selected = File.readlines("subset.txt").map(&:chomp)
142
+
143
+ omitfile = "OMIT.txt"
144
+ omitted = File.readlines(omitfile).map(&:chomp)
145
+ omitted.reject! {|line| line.start_with?("#") }
146
+ omit_names = omitted.map {|line| line.split.first }
147
+ STDERR.puts
148
+ STDERR.puts " >>> Warning: Omitting #{omitted.size} snapshot tests:\n "
149
+ indented = " "*7
150
+ omitted.each do |line|
151
+ STDERR.print indented
152
+ name, info = line.split(" ", 2)
153
+ STDERR.printf "%-20s %s\n", name, info
154
154
  end
155
+ STDERR.puts
155
156
 
156
- TestDirs = Dir.entries(".").reject {|fname| ! File.directory?(fname) } - %w[. ..]
157
- selected = File.readlines("subset.txt").map(&:chomp)
158
- Subset = selected.empty? ? TestDirs : selected
157
+ wanted = selected.empty? ? TestDirs : selected
158
+
159
+ Subset = wanted - omit_names
159
160
 
160
161
  Subset.each do |tdir|
161
162
  define_method("test_#{tdir}") do
@@ -164,56 +165,4 @@ class TestingLivetext < MiniTest::Test
164
165
  this.run
165
166
  end
166
167
  end
167
-
168
- def green(str)
169
- "" + str.to_s + ""
170
- end
171
-
172
- def red(str)
173
- "" + str.to_s + ""
174
- end
175
-
176
- def sdiff(which, f1, f2, out, rx)
177
- return "\n >>> No match for std#{which}!" if rx
178
- File.open(out, "w") {|file| file.puts "#{'%-60s'% 'EXPECTED'}| #{'%-60s'% 'ACTUAL'}" }
179
- system("/usr/bin/sdiff -t -w 121 #{f1} #{f2} >>#{out}")
180
- return "\n >>> Unexpected std#{which}! See #{out}"
181
- end
182
-
183
- def external_files(base)
184
- Dir.chdir(base) do
185
- src, out, exp = "source.lt3", "/tmp/#{base}--actual-output.txt", "expected-output.txt"
186
- err, erx = "/tmp/#{base}--actual-error.txt", "expected-error.txt"
187
-
188
- # New features - match out/err by regex
189
- expout_regex = "expected-out-line1match.txt"
190
- experr_regex = "expected-err-line1match.txt"
191
-
192
- cmd = "livetext #{src} >#{out} 2>#{err}"
193
- system(cmd)
194
-
195
- output = File.read(out)
196
- errors = File.read(err)
197
- rx_out = rx_err = nil
198
-
199
- expected = File.exist?(expout_regex) ? rx_out = /#{Regexp.escape(File.read(expout_regex).chomp)}/ : File.read(exp)
200
- errexp = File.exist?(experr_regex) ? rx_err = /#{Regexp.escape(File.read(experr_regex).chomp)}/ : File.read(erx)
201
-
202
- out_ok = rx_out ? output =~ rx_out : output == expected
203
- err_ok = rx_err ? errors =~ rx_err : errors == errexp
204
-
205
- system("mkdir -p /tmp/#{base}")
206
- bad_out = bad_err = nil
207
- bad_out = sdiff("out", exp, out, "/tmp/#{base}/exp.out.sdiff", rx_out) unless out_ok
208
- bad_err = sdiff("err", erx, err, "/tmp/#{base}/exp.err.sdiff", rx_err) unless err_ok
209
-
210
- assert(err_ok, bad_err)
211
- assert(out_ok, bad_out)
212
- # only on success
213
- system("rm -rf #{out} #{err} /tmp/#{base}") if out_ok && err_ok
214
- end
215
- end
216
-
217
168
  end
218
-
219
-
@@ -3,9 +3,9 @@ require 'minitest/autorun'
3
3
 
4
4
  require_relative '../../../lib/parser/general'
5
5
 
6
- ParseMisc = ::Livetext::ParseMisc
6
+ ParseGeneral = ::Livetext::ParseGeneral
7
7
 
8
- class TestParseMisc < MiniTest::Test
8
+ class TestParseGeneral < MiniTest::Test
9
9
 
10
10
  def setup
11
11
  end
@@ -14,45 +14,45 @@ class TestParseMisc < MiniTest::Test
14
14
  end
15
15
 
16
16
  def test_strip_quotes
17
- assert_raises(NilValue) { ParseMisc.new(nil).strip_quotes }
18
- assert_raises(NullString) { ParseMisc.new("").strip_quotes }
19
- assert_raises(MismatchedQuotes) { ParseMisc.new(%['test]).strip_quotes }
20
- # assert_raises(MismatchedQuotes) { ParseMisc.new(%[test']).strip_quotes }
21
- assert_raises(MismatchedQuotes) { ParseMisc.new(%["test]).strip_quotes }
22
- # assert_raises(MismatchedQuotes) { ParseMisc.new(%[test"]).strip_quotes }
23
- assert_raises(MismatchedQuotes) { ParseMisc.new(%["test']).strip_quotes }
24
- assert_raises(MismatchedQuotes) { ParseMisc.new(%['test"]).strip_quotes }
25
-
26
- assert ParseMisc.new(%[24601]).strip_quotes == "24601", "Failure 1"
27
- assert ParseMisc.new(%[3.14]).strip_quotes == "3.14", "Failure 2"
28
- assert ParseMisc.new(%[test]).strip_quotes == "test", "Failure 3"
29
- assert ParseMisc.new(%['test']).strip_quotes == "test", "Failure 4"
30
- assert ParseMisc.new(%["test"]).strip_quotes == "test", "Failure 5"
17
+ assert_raises(NilValue) { ParseGeneral.new(nil).strip_quotes }
18
+ assert_raises(NullString) { ParseGeneral.new("").strip_quotes }
19
+ assert_raises(MismatchedQuotes) { ParseGeneral.new(%['test]).strip_quotes }
20
+ # assert_raises(MismatchedQuotes) { ParseGeneral.new(%[test']).strip_quotes }
21
+ assert_raises(MismatchedQuotes) { ParseGeneral.new(%["test]).strip_quotes }
22
+ # assert_raises(MismatchedQuotes) { ParseGeneral.new(%[test"]).strip_quotes }
23
+ assert_raises(MismatchedQuotes) { ParseGeneral.new(%["test']).strip_quotes }
24
+ assert_raises(MismatchedQuotes) { ParseGeneral.new(%['test"]).strip_quotes }
25
+
26
+ assert ParseGeneral.new(%[24601]).strip_quotes == "24601", "Failure 1"
27
+ assert ParseGeneral.new(%[3.14]).strip_quotes == "3.14", "Failure 2"
28
+ assert ParseGeneral.new(%[test]).strip_quotes == "test", "Failure 3"
29
+ assert ParseGeneral.new(%['test']).strip_quotes == "test", "Failure 4"
30
+ assert ParseGeneral.new(%["test"]).strip_quotes == "test", "Failure 5"
31
31
  end
32
32
 
33
33
  def test_variables
34
34
  vars = ["foo 234\n", "bar 456\n"]
35
35
  expect = [%w[foo 234], %w[bar 456]]
36
- assert_equal ParseMisc.parse_vars(vars), expect
36
+ assert_equal ParseGeneral.parse_vars(vars), expect
37
37
 
38
38
  vars = ["foo2 234", "bar2 456"] # newline irrelevant
39
39
  expect = [%w[foo2 234], %w[bar2 456]]
40
- assert_equal ParseMisc.parse_vars(vars), expect
40
+ assert_equal ParseGeneral.parse_vars(vars), expect
41
41
 
42
42
  # quotes are not stripped... hmm
43
43
  vars = ["alpha 'simple string'", 'beta "another string"']
44
44
  expect = [["alpha", "'simple string'"], ["beta", '"another string"']]
45
- assert_equal ParseMisc.parse_vars(vars), expect
45
+ assert_equal ParseGeneral.parse_vars(vars), expect
46
46
 
47
47
  # prefix (namespacing)
48
48
  vars = ["alpha 'simple string'", 'beta "another string"']
49
49
  expect = [["this.alpha", "'simple string'"], ["this.beta", '"another string"']]
50
- assert_equal ParseMisc.parse_vars(vars, prefix: "this"), expect
50
+ assert_equal ParseGeneral.parse_vars(vars, prefix: "this"), expect
51
51
 
52
52
  # prefix (namespacing)
53
53
  vars = ["alpha 'simple string'", 'beta "another string"']
54
54
  expect = [["this.that.alpha", "'simple string'"], ["this.that.beta", '"another string"']]
55
- assert_equal ParseMisc.parse_vars(vars, prefix: "this.that"), expect
55
+ assert_equal ParseGeneral.parse_vars(vars, prefix: "this.that"), expect
56
56
 
57
57
  end
58
58
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  require 'minitest/autorun'
3
3
 
4
- require_relative 'set'
4
+ require_relative '../../../lib/parser/set'
5
5
 
6
6
  ParseSet = Livetext::ParseSet
7
7
 
data/test/unit/parser.rb CHANGED
@@ -2,3 +2,5 @@
2
2
  require_relative 'parser/string'
3
3
  require_relative 'parser/set'
4
4
  require_relative 'parser/general'
5
+ require_relative 'parser/mixin' # currently empty
6
+ require_relative 'parser/importable' # currently empty