livetext 0.9.08 → 0.9.13
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/bin/livetext +0 -1
- data/lib/errors.rb +13 -0
- data/lib/formatline.rb +3 -5
- data/lib/functions.rb +6 -2
- data/lib/helpers.rb +21 -0
- data/lib/html.rb +32 -0
- data/lib/livetext/importable.rb +2 -0
- data/lib/livetext.rb +52 -46
- data/lib/parser/general.rb +38 -0
- data/lib/parser/import.rb +17 -0
- data/lib/parser/mixin.rb +46 -0
- data/lib/parser/set.rb +136 -0
- data/lib/parser/string.rb +55 -0
- data/lib/parser.rb +5 -0
- data/lib/processor.rb +26 -18
- data/lib/standard.rb +145 -292
- data/lib/userapi.rb +6 -5
- data/livetext.gemspec +1 -2
- data/test/all.rb +3 -0
- data/test/formatting.rb +2 -9
- data/test/{data → snapshots}/basic_formatting/expected-error.txt +0 -0
- data/test/{data → snapshots}/basic_formatting/expected-output.txt +0 -0
- data/test/{data → snapshots}/basic_formatting/source.lt3 +0 -0
- data/test/{data → snapshots}/block_comment/expected-error.txt +0 -0
- data/test/{data → snapshots}/block_comment/expected-output.txt +0 -0
- data/test/{data → snapshots}/block_comment/source.lt3 +0 -0
- data/test/{data → snapshots}/comments_ignored_1/expected-error.txt +0 -0
- data/test/{data → snapshots}/comments_ignored_1/expected-output.txt +0 -0
- data/test/{data → snapshots}/comments_ignored_1/source.lt3 +0 -0
- data/test/{data → snapshots}/copy_is_raw/expected-error.txt +0 -0
- data/test/{data → snapshots}/copy_is_raw/expected-output.txt +0 -0
- data/test/{data → snapshots}/copy_is_raw/rawtext.inc +0 -0
- data/test/{data → snapshots}/copy_is_raw/source.lt3 +0 -0
- data/test/{data → snapshots}/crap +0 -0
- data/test/{data → snapshots}/def_method/expected-error.txt +0 -0
- data/test/{data → snapshots}/def_method/expected-output.txt +0 -0
- data/test/{data → snapshots}/def_method/source.lt3 +0 -0
- data/test/{data/error_inc_line_num/expected-err-line1match.txt → snapshots/error_inc_line_num/actual-error.txt} +0 -0
- data/test/snapshots/error_inc_line_num/actual-output.txt +13 -0
- data/test/{data/error_line_num → snapshots/error_inc_line_num}/expected-err-line1match.txt +0 -0
- data/test/{data → snapshots}/error_inc_line_num/expected-output.txt +6 -0
- data/test/{data → snapshots}/error_inc_line_num/file2.lt3 +0 -0
- data/test/snapshots/error_inc_line_num/out-sdiff.txt +14 -0
- data/test/{data → snapshots}/error_inc_line_num/source.lt3 +0 -0
- data/test/snapshots/error_invalid_name/actual-error.txt +10 -0
- data/test/{data/error_no_such_mixin/expected-output.txt → snapshots/error_invalid_name/actual-output.txt} +0 -0
- data/test/{data → snapshots}/error_invalid_name/expected-err-line1match.txt +0 -0
- data/test/{data → snapshots}/error_invalid_name/expected-output.txt +0 -0
- data/test/snapshots/error_invalid_name/out-sdiff.txt +6 -0
- data/test/{data → snapshots}/error_invalid_name/source.lt3 +0 -0
- data/test/snapshots/error_line_num/actual-error.txt +1 -0
- data/test/snapshots/error_line_num/actual-output.txt +5 -0
- data/test/snapshots/error_line_num/expected-err-line1match.txt +1 -0
- data/test/{data → snapshots}/error_line_num/expected-output.txt +0 -0
- data/test/snapshots/error_line_num/out-sdiff.txt +6 -0
- data/test/{data → snapshots}/error_line_num/source.lt3 +0 -0
- data/test/snapshots/error_mismatched_end/actual-error.txt +1 -0
- data/test/snapshots/error_mismatched_end/actual-output.txt +8 -0
- data/test/{data → snapshots}/error_mismatched_end/expected-err-line1match.txt +0 -0
- data/test/{data → snapshots}/error_mismatched_end/expected-output.txt +2 -0
- data/test/snapshots/error_mismatched_end/out-sdiff.txt +9 -0
- data/test/{data → snapshots}/error_mismatched_end/source.lt3 +0 -0
- data/test/{data/error_missing_end/expected-err-line1match.txt → snapshots/error_missing_end/actual-error.txt} +0 -0
- data/test/snapshots/error_missing_end/actual-output.txt +5 -0
- data/test/snapshots/error_missing_end/expected-err-line1match.txt +1 -0
- data/test/{data → snapshots}/error_missing_end/expected-output.txt +1 -0
- data/test/snapshots/error_missing_end/out-sdiff.txt +6 -0
- data/test/{data → snapshots}/error_missing_end/source.lt3 +0 -0
- data/test/{data/error_name_not_permitted/expected-output.txt → snapshots/error_name_not_permitted/OLD-exp-out} +0 -0
- data/test/{data/example_alpha/expected-error.txt → snapshots/error_name_not_permitted/expected-output.txt} +0 -0
- data/test/snapshots/error_name_not_permitted/match-error.txt +1 -0
- data/test/{data → snapshots}/error_name_not_permitted/source.lt3 +0 -0
- data/test/snapshots/error_no_such_copy/actual-error.txt +10 -0
- data/test/{data/example_alpha2/expected-error.txt → snapshots/error_no_such_copy/actual-output.txt} +0 -0
- data/test/snapshots/error_no_such_copy/expected-err-line1match.txt +1 -0
- data/test/{data → snapshots}/error_no_such_copy/expected-output.txt +0 -1
- data/test/snapshots/error_no_such_copy/out-sdiff.txt +5 -0
- data/test/{data → snapshots}/error_no_such_copy/source.lt3 +1 -0
- data/test/snapshots/error_no_such_inc/actual-error.txt +10 -0
- data/test/{data/functions/expected-error.txt → snapshots/error_no_such_inc/actual-output.txt} +0 -0
- data/test/snapshots/error_no_such_inc/expected-err-line1match.txt +1 -0
- data/test/{data → snapshots}/error_no_such_inc/expected-output.txt +0 -0
- data/test/snapshots/error_no_such_inc/out-sdiff.txt +6 -0
- data/test/{data → snapshots}/error_no_such_inc/source.lt3 +0 -0
- data/test/snapshots/error_no_such_mixin/actual-error.txt +1 -0
- data/test/snapshots/error_no_such_mixin/actual-output.txt +11 -0
- data/test/{data → snapshots}/error_no_such_mixin/expected-err-line1match.txt +0 -0
- data/test/snapshots/error_no_such_mixin/expected-output.txt +5 -0
- data/test/snapshots/error_no_such_mixin/out-sdiff.txt +12 -0
- data/test/{data → snapshots}/error_no_such_mixin/source.lt3 +0 -0
- data/test/{data/hello_world → snapshots/example_alpha}/expected-error.txt +0 -0
- data/test/{data → snapshots}/example_alpha/expected-output.txt +0 -0
- data/test/{data → snapshots}/example_alpha/source.lt3 +0 -0
- data/test/{data/more_complex_vars → snapshots/example_alpha2}/expected-error.txt +0 -0
- data/test/{data → snapshots}/example_alpha2/expected-output.txt +0 -0
- data/test/{data → snapshots}/example_alpha2/source.lt3 +0 -0
- data/test/{data → snapshots}/fixit +0 -0
- data/test/{data/raw_lines → snapshots/functions}/expected-error.txt +0 -0
- data/test/{data → snapshots}/functions/expected-output.txt +0 -0
- data/test/{data → snapshots}/functions/source.lt3 +0 -0
- data/test/{data/raw_text_block → snapshots/hello_world}/expected-error.txt +0 -0
- data/test/{data → snapshots}/hello_world/expected-output.txt +0 -0
- data/test/{data → snapshots}/hello_world/source.lt3 +0 -0
- data/test/{data → snapshots}/lines.txt +4 -0
- data/test/{data/simple_copy → snapshots/more_complex_vars}/expected-error.txt +0 -0
- data/test/{data → snapshots}/more_complex_vars/expected-output.txt +0 -0
- data/test/{data → snapshots}/more_complex_vars/source.lt3 +0 -0
- data/test/{data/simple_include/expected-error.txt → snapshots/predef_vars/actual-error.txt} +0 -0
- data/test/snapshots/predef_vars/actual-output.txt +6 -0
- data/test/{data/simple_mixin → snapshots/predef_vars}/expected-error.txt +0 -0
- data/test/snapshots/predef_vars/expected-output.txt +6 -0
- data/test/snapshots/predef_vars/out-sdiff.txt +7 -0
- data/test/snapshots/predef_vars/source.lt3 +6 -0
- data/test/{data/simple_vars → snapshots/raw_lines}/expected-error.txt +0 -0
- data/test/{data → snapshots}/raw_lines/expected-output.txt +0 -0
- data/test/{data → snapshots}/raw_lines/source.lt3 +0 -0
- data/test/{data/single_raw_line → snapshots/raw_text_block}/expected-error.txt +0 -0
- data/test/{data → snapshots}/raw_text_block/expected-output.txt +0 -0
- data/test/{data → snapshots}/raw_text_block/rawtext.inc +0 -0
- data/test/{data → snapshots}/raw_text_block/source.lt3 +0 -0
- data/test/{data/table_with_heredocs → snapshots/simple_copy}/expected-error.txt +0 -0
- data/test/{data → snapshots}/simple_copy/expected-output.txt +0 -0
- data/test/{data → snapshots}/simple_copy/simplefile.inc +0 -0
- data/test/{data → snapshots}/simple_copy/source.lt3 +0 -0
- data/test/{data/subset.txt → snapshots/simple_include/expected-error.txt} +0 -0
- data/test/{data → snapshots}/simple_include/expected-output.txt +0 -0
- data/test/{data → snapshots}/simple_include/simplefile.inc +0 -0
- data/test/{data → snapshots}/simple_include/source.lt3 +0 -0
- data/test/snapshots/simple_mixin/actual-error.txt +2 -0
- data/test/snapshots/simple_mixin/actual-output.txt +4 -0
- data/test/snapshots/simple_mixin/expected-error.txt +0 -0
- data/test/{data → snapshots}/simple_mixin/expected-output.txt +0 -0
- data/test/snapshots/simple_mixin/out-sdiff.txt +6 -0
- data/test/{data → snapshots}/simple_mixin/simple_mixin.rb +0 -0
- data/test/{data → snapshots}/simple_mixin/source.lt3 +0 -0
- data/test/snapshots/simple_vars/expected-error.txt +0 -0
- data/test/{data → snapshots}/simple_vars/expected-output.txt +0 -0
- data/test/{data → snapshots}/simple_vars/source.lt3 +0 -0
- data/test/snapshots/single_raw_line/expected-error.txt +0 -0
- data/test/{data → snapshots}/single_raw_line/expected-output.txt +0 -0
- data/test/{data → snapshots}/single_raw_line/source.lt3 +0 -0
- data/test/snapshots/subset.txt +0 -0
- data/test/snapshots/table_with_heredocs/expected-error.txt +0 -0
- data/test/{data → snapshots}/table_with_heredocs/expected-output.txt +0 -0
- data/test/{data → snapshots}/table_with_heredocs/source.lt3 +0 -0
- data/test/snapshots.rb +219 -0
- data/test/testlines.rb +17 -7
- data/test/unit/all.rb +3 -0
- data/test/unit/html.rb +38 -0
- data/test/unit/parse_misc.rb +60 -0
- data/test/unit/parse_set.rb +157 -0
- data/test/unit/parser/all.rb +3 -0
- data/test/unit/parser/general.rb +59 -0
- data/test/unit/parser/importable.rb +19 -0
- data/test/unit/parser/mixin.rb +19 -0
- data/test/unit/parser/set.rb +157 -0
- data/test/unit/parser/string.rb +130 -0
- data/test/unit/parser.rb +4 -0
- data/test/unit/standard.rb +23 -0
- data/test/unit/stringparser.rb +140 -0
- metadata +152 -95
- data/test/data/error_name_not_permitted/expected-error.txt +0 -1
- data/test/data/error_no_such_copy/expected-err-line1match.txt +0 -1
- data/test/data/error_no_such_inc/expected-err-line1match.txt +0 -1
- data/test/extratests.txt +0 -20
- data/test/test.rb +0 -140
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
|
|
2
|
+
require 'minitest/autorun'
|
|
3
|
+
|
|
4
|
+
require_relative '../../../lib/parser/set'
|
|
5
|
+
|
|
6
|
+
ParseSet = Livetext::ParseSet
|
|
7
|
+
|
|
8
|
+
class TestParseSet < MiniTest::Test
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def teardown
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_one_unquoted
|
|
17
|
+
set = ParseSet.new('my_var_123 = 789').parse
|
|
18
|
+
pair = set.first
|
|
19
|
+
assert_equal pair, %w[my_var_123 789]
|
|
20
|
+
|
|
21
|
+
set = ParseSet.new('var_234 = naked_string').parse
|
|
22
|
+
pair = set.first
|
|
23
|
+
assert_equal pair, %w[var_234 naked_string]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_one_single_quoted
|
|
27
|
+
set = ParseSet.new("fancy.var.name = 'simple string'").parse
|
|
28
|
+
pair = set.first
|
|
29
|
+
assert_equal pair, ["fancy.var.name", "simple string"]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_one_double_quoted
|
|
33
|
+
set = ParseSet.new('fancy.var2 = "another string"').parse
|
|
34
|
+
pair = set.first
|
|
35
|
+
assert_equal pair, ["fancy.var2", "another string"]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_multiple_unquoted
|
|
39
|
+
pair1, pair2 = ParseSet.new("this=345, that=678").parse
|
|
40
|
+
assert_equal pair1, %w[this 345]
|
|
41
|
+
assert_equal pair2, %w[that 678]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_multiple_unquoted_quoted
|
|
45
|
+
pair1, pair2 = ParseSet.new('alpha = 567, beta = "oh well"').parse
|
|
46
|
+
assert_equal pair1, %w[alpha 567]
|
|
47
|
+
assert_equal pair2, ["beta", "oh well"]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_quote_embedded_comma
|
|
51
|
+
set = ParseSet.new('gamma = "oh, well"').parse
|
|
52
|
+
pair = set.first
|
|
53
|
+
assert_equal pair, ["gamma", "oh, well"]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_get_var
|
|
57
|
+
@parse = ParseSet.new("foo=345")
|
|
58
|
+
assert_equal @parse.get_var, "foo"
|
|
59
|
+
@parse = ParseSet.new("foo = 345")
|
|
60
|
+
assert_equal @parse.get_var, "foo"
|
|
61
|
+
@parse = ParseSet.new("foo123 = 345")
|
|
62
|
+
assert_equal @parse.get_var, "foo123"
|
|
63
|
+
@parse = ParseSet.new("foo_bar = 345")
|
|
64
|
+
assert_equal @parse.get_var, "foo_bar"
|
|
65
|
+
@parse = ParseSet.new("Foobar = 345")
|
|
66
|
+
assert_equal @parse.get_var, "Foobar"
|
|
67
|
+
@parse = ParseSet.new("_foobar = 345")
|
|
68
|
+
assert_equal @parse.get_var, "_foobar"
|
|
69
|
+
|
|
70
|
+
# will not notice missing equal sign till later parsing
|
|
71
|
+
@parse = ParseSet.new("foo bar")
|
|
72
|
+
assert_equal @parse.get_var, "foo"
|
|
73
|
+
|
|
74
|
+
# can detect missing equal sign if iteration ends
|
|
75
|
+
@parse = ParseSet.new("foo")
|
|
76
|
+
assert_raises(NoEqualSign) { @parse.get_var }
|
|
77
|
+
@parse = ParseSet.new("foo-bar = 345")
|
|
78
|
+
assert_raises(BadVariableName) { @parse.get_var }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_skip_equal
|
|
82
|
+
@parse = ParseSet.new("=")
|
|
83
|
+
assert_nil @parse.skip_equal
|
|
84
|
+
@parse = ParseSet.new(" = ")
|
|
85
|
+
assert_nil @parse.skip_equal
|
|
86
|
+
@parse = ParseSet.new(" =")
|
|
87
|
+
assert_nil @parse.skip_equal
|
|
88
|
+
@parse = ParseSet.new(" = 345")
|
|
89
|
+
assert_equal @parse.skip_equal, "3"
|
|
90
|
+
@parse = ParseSet.new(" = 'meh'")
|
|
91
|
+
assert_equal @parse.skip_equal, "'"
|
|
92
|
+
|
|
93
|
+
@parse = ParseSet.new("no equal here")
|
|
94
|
+
assert_raises(NoEqualSign) { @parse.skip_equal }
|
|
95
|
+
@parse = ParseSet.new("")
|
|
96
|
+
assert_raises(NoEqualSign) { @parse.skip_equal }
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def test_quoted_value
|
|
100
|
+
@parse = ParseSet.new(%['this'])
|
|
101
|
+
assert_equal @parse.quoted_value, "this"
|
|
102
|
+
@parse = ParseSet.new(%["that"])
|
|
103
|
+
assert_equal @parse.quoted_value, "that"
|
|
104
|
+
@parse = ParseSet.new(%[""])
|
|
105
|
+
assert_equal @parse.quoted_value, ""
|
|
106
|
+
@parse = ParseSet.new(%[''])
|
|
107
|
+
assert_equal @parse.quoted_value, ""
|
|
108
|
+
|
|
109
|
+
@parse = ParseSet.new(%['foo"])
|
|
110
|
+
assert_raises(BadQuotedString) { @parse.quoted_value }
|
|
111
|
+
@parse = ParseSet.new(%["bar'])
|
|
112
|
+
assert_raises(BadQuotedString) { @parse.quoted_value }
|
|
113
|
+
@parse = ParseSet.new(%['baz])
|
|
114
|
+
assert_raises(BadQuotedString) { @parse.quoted_value }
|
|
115
|
+
@parse = ParseSet.new(%["bam])
|
|
116
|
+
assert_raises(BadQuotedString) { @parse.quoted_value }
|
|
117
|
+
# LATER:
|
|
118
|
+
# - allow (escaped?) comma in quoted string
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def test_unquoted_value
|
|
122
|
+
# Note: an unquoted value is still a string!
|
|
123
|
+
@parse = ParseSet.new(%[342 ])
|
|
124
|
+
assert_equal @parse.unquoted_value, "342"
|
|
125
|
+
@parse = ParseSet.new(%[343,])
|
|
126
|
+
assert_equal @parse.unquoted_value, "343"
|
|
127
|
+
@parse = ParseSet.new(%[344,678])
|
|
128
|
+
assert_equal @parse.unquoted_value, "344"
|
|
129
|
+
@parse = ParseSet.new(%[345.123])
|
|
130
|
+
assert_equal @parse.unquoted_value, "345.123"
|
|
131
|
+
@parse = ParseSet.new(%[whatever])
|
|
132
|
+
assert_equal @parse.unquoted_value, "whatever"
|
|
133
|
+
|
|
134
|
+
# LATER:
|
|
135
|
+
# - disallow comma in unquoted string
|
|
136
|
+
# - disallow quote trailing unquoted string
|
|
137
|
+
# - allow/disallow escaping??
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# BUG: FormatLine doesn't know variables in this context!
|
|
141
|
+
|
|
142
|
+
def xtest_4
|
|
143
|
+
set = ParseSet.new("file = $File").parse
|
|
144
|
+
assert_equal set.first, "file"
|
|
145
|
+
assert set.last !~ /undefined/
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# BUG: ...or functions.
|
|
149
|
+
# (Additional bug: Failing silently seems wrong.)
|
|
150
|
+
|
|
151
|
+
def xtest_5
|
|
152
|
+
set = ParseSet.new("date = $$date").parse
|
|
153
|
+
assert_equal set.first, "date"
|
|
154
|
+
assert set.last =~ /^\d\d.\d\d.\d\d/
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
require 'minitest/autorun'
|
|
2
|
+
|
|
3
|
+
require_relative '../../../lib/parser/string'
|
|
4
|
+
|
|
5
|
+
class TestStringParser < MiniTest::Test
|
|
6
|
+
|
|
7
|
+
def setup
|
|
8
|
+
# Lengths: zero, one, arbitrary
|
|
9
|
+
@str0 = ""
|
|
10
|
+
@str1 = "x"
|
|
11
|
+
@strN = "This is a test"
|
|
12
|
+
@zero = StringParser.new(@str0)
|
|
13
|
+
@one = StringParser.new(@str1)
|
|
14
|
+
@many = StringParser.new(@strN)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def teardown
|
|
18
|
+
# Line and length are invariants
|
|
19
|
+
assert_equal @zero.len, 0
|
|
20
|
+
assert_equal @one.len, 1
|
|
21
|
+
assert_equal @many.len, 14
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_init
|
|
25
|
+
assert_equal @zero.line, ""
|
|
26
|
+
assert @zero.eos, "EOS was initially false for #{@zero.inspect}"
|
|
27
|
+
assert_equal @zero.i, 0
|
|
28
|
+
|
|
29
|
+
assert_equal @one.line, "x"
|
|
30
|
+
refute @one.eos, "EOS was initially true for #{@one.inspect}"
|
|
31
|
+
assert_equal @one.i, 0
|
|
32
|
+
|
|
33
|
+
assert_equal @many.line, "This is a test"
|
|
34
|
+
refute @many.eos, "EOS was initially true for #{@many.inspect}"
|
|
35
|
+
assert_equal @many.i, 0
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_next
|
|
39
|
+
assert_nil @zero.next
|
|
40
|
+
assert_equal @zero.i, 0 # nothing happens
|
|
41
|
+
|
|
42
|
+
assert_equal @one.next, "x"
|
|
43
|
+
assert_equal @one.i, 1
|
|
44
|
+
|
|
45
|
+
assert_equal @many.next, "T"
|
|
46
|
+
refute @many.eos, "EOS was true for #{@many.inspect}"
|
|
47
|
+
assert_equal @many.i, 1
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_eos
|
|
51
|
+
assert @zero.eos?
|
|
52
|
+
refute @one.eos?
|
|
53
|
+
refute @many.eos?
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_next_eos
|
|
57
|
+
@zero.next
|
|
58
|
+
assert @zero.eos?
|
|
59
|
+
|
|
60
|
+
@one.next
|
|
61
|
+
assert @one.eos?
|
|
62
|
+
@one.next
|
|
63
|
+
assert @one.eos?
|
|
64
|
+
|
|
65
|
+
@many.next
|
|
66
|
+
refute @many.eos?
|
|
67
|
+
count = @many.len # doesn't make sense??
|
|
68
|
+
count.times { @many.next }
|
|
69
|
+
assert @many.eos?
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_peek
|
|
73
|
+
assert_nil @zero.peek
|
|
74
|
+
assert_equal @one.peek, @str1[0]
|
|
75
|
+
assert_equal @many.peek, @strN[0]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def test_next_peek
|
|
79
|
+
char1 = @zero.next
|
|
80
|
+
char2 = @zero.peek
|
|
81
|
+
assert_nil char1
|
|
82
|
+
assert_nil char2
|
|
83
|
+
assert @zero.i == 0
|
|
84
|
+
assert @zero.last?
|
|
85
|
+
assert @zero.eos?
|
|
86
|
+
|
|
87
|
+
refute @one.last? # FIXME??
|
|
88
|
+
char1 = @one.peek
|
|
89
|
+
refute @one.last? # FIXME??
|
|
90
|
+
char2 = @one.next
|
|
91
|
+
char3 = @one.peek
|
|
92
|
+
assert char1
|
|
93
|
+
assert char2 == char1
|
|
94
|
+
assert char3 == @str1[1]
|
|
95
|
+
assert @one.i == 1
|
|
96
|
+
assert @one.last?
|
|
97
|
+
assert @one.eos? # FIXME??
|
|
98
|
+
|
|
99
|
+
char1 = @many.peek
|
|
100
|
+
char2 = @many.next
|
|
101
|
+
char3 = @many.peek
|
|
102
|
+
assert char1
|
|
103
|
+
assert char2 == char1
|
|
104
|
+
assert char3 == @strN[1]
|
|
105
|
+
assert @many.i == 1
|
|
106
|
+
refute @many.last?
|
|
107
|
+
refute @many.eos?
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def test_skip_spaces
|
|
111
|
+
none = StringParser.new("abc")
|
|
112
|
+
char, index = none.peek, none.i
|
|
113
|
+
none.skip_spaces
|
|
114
|
+
refute none.peek == " "
|
|
115
|
+
assert_equal none.peek, char
|
|
116
|
+
assert_equal none.i, index
|
|
117
|
+
|
|
118
|
+
one = StringParser.new(" def")
|
|
119
|
+
one.skip_spaces
|
|
120
|
+
refute one.peek == " "
|
|
121
|
+
assert_equal one.peek, "d"
|
|
122
|
+
assert_equal one.i, 1
|
|
123
|
+
|
|
124
|
+
some = StringParser.new(" xyz")
|
|
125
|
+
some.skip_spaces
|
|
126
|
+
refute some.peek == " "
|
|
127
|
+
assert_equal some.peek, "x"
|
|
128
|
+
assert_equal some.i, 3
|
|
129
|
+
end
|
|
130
|
+
end
|
data/test/unit/parser.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'minitest/autorun'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
require_relative '../../lib/livetext'
|
|
5
|
+
|
|
6
|
+
class TestingLivetext < MiniTest::Test
|
|
7
|
+
include Livetext::Standard
|
|
8
|
+
include Livetext::UserAPI
|
|
9
|
+
|
|
10
|
+
# Only method here "really" belongs elsewhere? FIXME
|
|
11
|
+
|
|
12
|
+
def test_onoff
|
|
13
|
+
refute onoff('off'), "Expected onoff('off') to be false"
|
|
14
|
+
assert onoff('on'), "Expected onoff('on') to be true"
|
|
15
|
+
refute onoff('oFf'), "Expected onoff('oFf') to be false"
|
|
16
|
+
assert onoff('oN'), "Expected onoff('oN') to be true"
|
|
17
|
+
assert onoff(nil), "Expected onoff(nil) to be true"
|
|
18
|
+
|
|
19
|
+
assert_raises(ExpectedOnOff, "Should raise ExpectedOnOff") { onoff("") }
|
|
20
|
+
assert_raises(ExpectedOnOff, "Should raise ExpectedOnOff") { onoff(345) }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
require 'minitest/autorun'
|
|
2
|
+
|
|
3
|
+
require_relative '../../lib/stringparser'
|
|
4
|
+
|
|
5
|
+
class TestStringParser < MiniTest::Test
|
|
6
|
+
|
|
7
|
+
def setup
|
|
8
|
+
# Lengths: zero, one, arbitrary
|
|
9
|
+
@str0 = ""
|
|
10
|
+
@str1 = "x"
|
|
11
|
+
@strN = "This is a test"
|
|
12
|
+
@zero = StringParser.new(@str0)
|
|
13
|
+
@one = StringParser.new(@str1)
|
|
14
|
+
@many = StringParser.new(@strN)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def teardown
|
|
18
|
+
# Line and length are invariants
|
|
19
|
+
assert_equal @zero.len, 0
|
|
20
|
+
assert_equal @one.len, 1
|
|
21
|
+
assert_equal @many.len, 14
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_init
|
|
25
|
+
assert_equal @zero.line, ""
|
|
26
|
+
assert @zero.eos, "EOS was initially false for #{@zero.inspect}"
|
|
27
|
+
assert_equal @zero.i, 0
|
|
28
|
+
|
|
29
|
+
assert_equal @one.line, "x"
|
|
30
|
+
refute @one.eos, "EOS was initially true for #{@one.inspect}"
|
|
31
|
+
assert_equal @one.i, 0
|
|
32
|
+
|
|
33
|
+
assert_equal @many.line, "This is a test"
|
|
34
|
+
refute @many.eos, "EOS was initially true for #{@many.inspect}"
|
|
35
|
+
assert_equal @many.i, 0
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_next
|
|
39
|
+
assert_nil @zero.next
|
|
40
|
+
assert_equal @zero.i, 0 # nothing happens
|
|
41
|
+
|
|
42
|
+
assert_equal @one.next, "x"
|
|
43
|
+
assert_equal @one.i, 1
|
|
44
|
+
|
|
45
|
+
assert_equal @many.next, "T"
|
|
46
|
+
refute @many.eos, "EOS was true for #{@many.inspect}"
|
|
47
|
+
assert_equal @many.i, 1
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_eos
|
|
51
|
+
assert @zero.eos?
|
|
52
|
+
refute @one.eos?
|
|
53
|
+
refute @many.eos?
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_next_eos
|
|
57
|
+
@zero.next
|
|
58
|
+
assert @zero.eos?
|
|
59
|
+
|
|
60
|
+
@one.eos?
|
|
61
|
+
refute @one.eos?
|
|
62
|
+
@one.next
|
|
63
|
+
assert @one.eos?
|
|
64
|
+
@one.next # One beyond the actual end
|
|
65
|
+
assert @one.eos? # Still the end
|
|
66
|
+
|
|
67
|
+
@many.next
|
|
68
|
+
refute @many.eos?
|
|
69
|
+
count = @many.len # doesn't make sense??
|
|
70
|
+
count.times { @many.next }
|
|
71
|
+
assert @many.eos?
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_peek
|
|
75
|
+
assert_nil @zero.peek
|
|
76
|
+
assert_equal @one.peek, @str1[0]
|
|
77
|
+
assert_equal @many.peek, @strN[0]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_next_peek
|
|
81
|
+
char1 = @zero.next
|
|
82
|
+
char2 = @zero.peek
|
|
83
|
+
assert_nil char1
|
|
84
|
+
assert_nil char2
|
|
85
|
+
assert @zero.i == 0
|
|
86
|
+
assert @zero.last?
|
|
87
|
+
assert @zero.eos?
|
|
88
|
+
|
|
89
|
+
refute @one.last?
|
|
90
|
+
char1 = @one.peek
|
|
91
|
+
refute @one.last?
|
|
92
|
+
char2 = @one.next
|
|
93
|
+
assert @one.last? # One beyond the last
|
|
94
|
+
char3 = @one.peek
|
|
95
|
+
assert char1
|
|
96
|
+
assert char2 == char1
|
|
97
|
+
assert char3 == @str1[1]
|
|
98
|
+
assert @one.i == 1
|
|
99
|
+
assert @one.last?
|
|
100
|
+
assert @one.eos?
|
|
101
|
+
|
|
102
|
+
char1 = @many.peek
|
|
103
|
+
char2 = @many.next
|
|
104
|
+
char3 = @many.peek
|
|
105
|
+
assert char1
|
|
106
|
+
assert char2 == char1
|
|
107
|
+
assert char3 == @strN[1]
|
|
108
|
+
assert @many.i == 1
|
|
109
|
+
refute @many.last?
|
|
110
|
+
refute @many.eos?
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_skip_spaces
|
|
114
|
+
none = StringParser.new("abc")
|
|
115
|
+
char, index = none.peek, none.i
|
|
116
|
+
none.skip_spaces
|
|
117
|
+
refute none.peek == " "
|
|
118
|
+
assert_equal none.peek, char
|
|
119
|
+
assert_equal none.i, index
|
|
120
|
+
|
|
121
|
+
one = StringParser.new(" def")
|
|
122
|
+
one.skip_spaces
|
|
123
|
+
refute one.peek == " "
|
|
124
|
+
assert_equal one.peek, "d"
|
|
125
|
+
assert_equal one.i, 1
|
|
126
|
+
|
|
127
|
+
some = StringParser.new(" xyz")
|
|
128
|
+
some.skip_spaces
|
|
129
|
+
refute some.peek == " "
|
|
130
|
+
assert_equal some.peek, "x"
|
|
131
|
+
assert_equal some.i, 3
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_for_parse_set
|
|
135
|
+
str = StringParser.new('gamma = "oh, well"')
|
|
136
|
+
count = str.len # doesn't make sense??
|
|
137
|
+
count.times { print str.next; }
|
|
138
|
+
|
|
139
|
+
end
|
|
140
|
+
end
|