slidefield 0.1
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 +7 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +674 -0
- data/README.md +254 -0
- data/Rakefile +7 -0
- data/bin/slidefield +89 -0
- data/examples/complete/assets/K2.jpg +0 -0
- data/examples/complete/assets/gobi.jpg +0 -0
- data/examples/complete/assets/mount_everest.jpg +0 -0
- data/examples/complete/assets/sahara.jpg +0 -0
- data/examples/complete/main.sfp +7 -0
- data/examples/complete/slides/deserts.sfi +19 -0
- data/examples/complete/slides/mountains.sfi +25 -0
- data/examples/complete/templates.sfi +95 -0
- data/examples/complete/variables.sfi +6 -0
- data/examples/minimal/main.sfp +43 -0
- data/examples/minimal/ruby-logo.png +0 -0
- data/lib/slidefield/animator.rb +104 -0
- data/lib/slidefield/errors.rb +6 -0
- data/lib/slidefield/interpreter.rb +414 -0
- data/lib/slidefield/object_data.rb +78 -0
- data/lib/slidefield/object_manager.rb +29 -0
- data/lib/slidefield/object_rules.rb +79 -0
- data/lib/slidefield/objects/_base.rb +29 -0
- data/lib/slidefield/objects/_root.rb +10 -0
- data/lib/slidefield/objects/animation.rb +10 -0
- data/lib/slidefield/objects/debug.rb +18 -0
- data/lib/slidefield/objects/image.rb +47 -0
- data/lib/slidefield/objects/include.rb +9 -0
- data/lib/slidefield/objects/layout.rb +10 -0
- data/lib/slidefield/objects/rect.rb +44 -0
- data/lib/slidefield/objects/slide.rb +43 -0
- data/lib/slidefield/objects/song.rb +31 -0
- data/lib/slidefield/objects/text.rb +57 -0
- data/lib/slidefield/parser.rb +99 -0
- data/lib/slidefield/version.rb +3 -0
- data/lib/slidefield/viewer.rb +89 -0
- data/lib/slidefield.rb +27 -0
- data/slidefield.gemspec +27 -0
- data/test/helper.rb +11 -0
- data/test/resources/include_sub.sfp +1 -0
- data/test/resources/parse_error.sfp +1 -0
- data/test/resources/recursive_include.sfp +1 -0
- data/test/resources/sub/include_parent.sfp +1 -0
- data/test/resources/unclosed_object.sfp +2 -0
- data/test/resources/unknown_object.sfp +1 -0
- data/test/resources/wrong_template.sfp +4 -0
- data/test/test_animator.rb +244 -0
- data/test/test_examples.rb +29 -0
- data/test/test_interpreter.rb +1766 -0
- data/test/test_object_data.rb +108 -0
- data/test/test_object_manager.rb +48 -0
- data/test/test_object_rules.rb +87 -0
- data/test/test_parser.rb +408 -0
- metadata +199 -0
@@ -0,0 +1,108 @@
|
|
1
|
+
require File.expand_path '../helper', __FILE__
|
2
|
+
|
3
|
+
class TestObjectData < MiniTest::Test
|
4
|
+
def test_initialize
|
5
|
+
o = SlideField::ObjectData.new :test, 'location'
|
6
|
+
assert_equal :test, o.type
|
7
|
+
assert_equal 'location', o.loc
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_variables
|
11
|
+
o = SlideField::ObjectData.new :test, 'loc'
|
12
|
+
refute o.has? :test
|
13
|
+
assert_nil o.get(:test)
|
14
|
+
assert_nil o.var_type(:test)
|
15
|
+
assert_nil o.var_loc(:test)
|
16
|
+
|
17
|
+
o.set :test, 'hello world', 'line 42 char 24', :string
|
18
|
+
assert o.has? :test
|
19
|
+
assert_equal 'hello world', o.get(:test)
|
20
|
+
assert_equal :string, o.var_type(:test)
|
21
|
+
assert_equal 'line 42 char 24', o.var_loc(:test)
|
22
|
+
|
23
|
+
o.set :test, 'hello tester'
|
24
|
+
assert_equal 'hello tester', o.get(:test)
|
25
|
+
assert_equal :string, o.var_type(:test)
|
26
|
+
assert_equal 'line 42 char 24', o.var_loc(:test)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_children
|
30
|
+
parent = SlideField::ObjectData.new :parent, 'loc'
|
31
|
+
assert_equal [], parent.children
|
32
|
+
|
33
|
+
child1 = SlideField::ObjectData.new :child, 'loc'
|
34
|
+
child2 = SlideField::ObjectData.new :child, 'loc'
|
35
|
+
child3 = SlideField::ObjectData.new :uniqueOfHisKind, 'loc'
|
36
|
+
|
37
|
+
parent << child1
|
38
|
+
parent << child2
|
39
|
+
parent << child3
|
40
|
+
|
41
|
+
assert_equal [child1, child2, child3], parent.children
|
42
|
+
assert_equal [child1, child2], parent[:child]
|
43
|
+
assert_equal [child3], parent[:uniqueOfHisKind]
|
44
|
+
|
45
|
+
assert_equal parent, child1.parent
|
46
|
+
assert_equal parent, child2.parent
|
47
|
+
assert_equal parent, child3.parent
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_inheritance
|
51
|
+
parent = SlideField::ObjectData.new :parent, 'loc'
|
52
|
+
parent.set 'variable', 'value', 'loc', :type
|
53
|
+
|
54
|
+
child = SlideField::ObjectData.new :child, 'loc'
|
55
|
+
parent << child
|
56
|
+
|
57
|
+
assert parent.has?('variable')
|
58
|
+
refute child.has?('variable')
|
59
|
+
assert_equal 'value', child.get('variable')
|
60
|
+
assert_equal :type, child.var_type('variable')
|
61
|
+
assert_equal 'loc', child.var_loc('variable')
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_context_string
|
65
|
+
o1 = SlideField::ObjectData.new :test, 'loc'
|
66
|
+
o1.context = 'context1'
|
67
|
+
|
68
|
+
o2 = SlideField::ObjectData.new :test, 'loc'
|
69
|
+
o2.context = 'context2'
|
70
|
+
o1 << o2
|
71
|
+
|
72
|
+
o3 = SlideField::ObjectData.new :test, 'loc'
|
73
|
+
o3.context = 'context2'
|
74
|
+
o2 << o3
|
75
|
+
|
76
|
+
o4 = SlideField::ObjectData.new :test, 'loc'
|
77
|
+
o4.context = 'context1'
|
78
|
+
o3 << o4
|
79
|
+
|
80
|
+
assert_equal "[context1]", o1.context_string
|
81
|
+
assert_equal "[context1] [context2]", o2.context_string
|
82
|
+
assert_equal "[context1] [context2]", o3.context_string
|
83
|
+
assert_equal "[context1] [context2] [context1]", o4.context_string
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_rules
|
87
|
+
o = SlideField::ObjectData.new :slide, 'loc'
|
88
|
+
assert_instance_of SlideField::ObjectRules::Slide, o.rules
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_ancestor
|
92
|
+
parent = SlideField::ObjectData.new :parent, 'loc'
|
93
|
+
assert_equal [], parent.children
|
94
|
+
|
95
|
+
child1 = SlideField::ObjectData.new :child1, 'loc'
|
96
|
+
child2 = SlideField::ObjectData.new :child2, 'loc'
|
97
|
+
child3 = SlideField::ObjectData.new :child3, 'loc'
|
98
|
+
|
99
|
+
parent << child1
|
100
|
+
child1 << child2
|
101
|
+
child2 << child3
|
102
|
+
|
103
|
+
assert_equal parent, child1.ancestor(:parent)
|
104
|
+
assert_equal parent, child2.ancestor(:parent)
|
105
|
+
assert_equal child1, child3.ancestor(:child1)
|
106
|
+
assert_nil parent.ancestor(:parent)
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.expand_path '../helper', __FILE__
|
2
|
+
|
3
|
+
module SlideField::ObjectManager
|
4
|
+
class CatchTest < Base
|
5
|
+
def load(what)
|
6
|
+
raise what
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestObjectManager < MiniTest::Test
|
12
|
+
def test_new
|
13
|
+
window = nil
|
14
|
+
|
15
|
+
obj1 = SlideField::ObjectData.new :slide, 'loc'
|
16
|
+
obj2 = SlideField::ObjectData.new :text, 'loc'
|
17
|
+
obj3 = SlideField::ObjectData.new :unknown, 'loc'
|
18
|
+
|
19
|
+
klass1 = SlideField::ObjectManager::Slide
|
20
|
+
klass2 = SlideField::ObjectManager::Text
|
21
|
+
|
22
|
+
assert_instance_of klass1, man1 = SlideField::ObjectManager.new(obj1, window)
|
23
|
+
assert_instance_of klass2, SlideField::ObjectManager.new(obj2, window)
|
24
|
+
assert_nil SlideField::ObjectManager.new(obj3, window)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_slide_non_graphic_children
|
28
|
+
obj1 = SlideField::ObjectData.new :slide, 'loc'
|
29
|
+
obj2 = SlideField::ObjectData.new :unknown, 'loc'
|
30
|
+
|
31
|
+
obj1 << obj2
|
32
|
+
|
33
|
+
manager = SlideField::ObjectManager.new obj1, nil
|
34
|
+
manager.load
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_catch
|
38
|
+
obj = SlideField::ObjectData.new :catchTest, 'loc'
|
39
|
+
obj.context = 'context'
|
40
|
+
|
41
|
+
manager = SlideField::ObjectManager.new obj, nil
|
42
|
+
error = assert_raises SlideField::RuntimeError do
|
43
|
+
manager.execute :load, 'error message'
|
44
|
+
end
|
45
|
+
|
46
|
+
assert_equal "[context] An error occured while executing the 'load' event on the object 'catchTest' at loc:\n\t(RuntimeError) error message", error.message
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require File.expand_path '../helper', __FILE__
|
2
|
+
|
3
|
+
module SlideField::ObjectRules
|
4
|
+
class RulesTest < Base
|
5
|
+
def rules
|
6
|
+
property :var1, :string, "default"
|
7
|
+
property :var2, :integer, nil
|
8
|
+
property :var3, :string, "value"
|
9
|
+
|
10
|
+
child :obj1
|
11
|
+
child :obj2, 1
|
12
|
+
child :obj3, 1, 2
|
13
|
+
super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class TestObjectRules < MiniTest::Test
|
19
|
+
def test_accessor
|
20
|
+
klass = SlideField::ObjectRules::RulesTest
|
21
|
+
assert_instance_of klass, SlideField::ObjectRules[:rulesTest]
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_unknown
|
25
|
+
assert_nil SlideField::ObjectRules[:thisDoesNotExist]
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_cache
|
29
|
+
klass = SlideField::ObjectRules::RulesTest
|
30
|
+
first = klass.get
|
31
|
+
second = klass.get
|
32
|
+
|
33
|
+
assert_same first, second
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_properties_names
|
37
|
+
rules = SlideField::ObjectRules::RulesTest.get
|
38
|
+
assert_equal [:var1, :var2, :var3], rules.properties_names
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_properties_types
|
42
|
+
rules = SlideField::ObjectRules::RulesTest.get
|
43
|
+
assert_equal [:string, :integer], rules.properties_types
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
def test_required_properties
|
48
|
+
rules = SlideField::ObjectRules::RulesTest.get
|
49
|
+
assert_equal [:var2], rules.required_properties
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_optional_properties
|
53
|
+
rules = SlideField::ObjectRules::RulesTest.get
|
54
|
+
assert_equal [:var1, :var3], rules.optional_properties
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def test_type_of_property
|
59
|
+
rules = SlideField::ObjectRules::RulesTest.get
|
60
|
+
assert_equal :string, rules.type_of_property(:var1)
|
61
|
+
assert_equal nil, rules.type_of_property(:unknown)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_matching_properties
|
65
|
+
rules = SlideField::ObjectRules::RulesTest.get
|
66
|
+
assert_equal [:var1, :var3], rules.matching_properties(:string)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_default_value
|
70
|
+
rules = SlideField::ObjectRules::RulesTest.get
|
71
|
+
assert_equal "default", rules.default_value(:var1)
|
72
|
+
assert_equal nil, rules.default_value(:unknown)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_accepted_children
|
76
|
+
rules = SlideField::ObjectRules::RulesTest.get
|
77
|
+
assert_equal [:obj1, :obj2, :obj3, :include, :debug], rules.accepted_children
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_requirements_of_child
|
81
|
+
rules = SlideField::ObjectRules::RulesTest.get
|
82
|
+
assert_equal [0, 0], rules.requirements_of_child(:obj1)
|
83
|
+
assert_equal [1, 0], rules.requirements_of_child(:obj2)
|
84
|
+
assert_equal [1, 2], rules.requirements_of_child(:obj3)
|
85
|
+
assert_equal nil, rules.requirements_of_child(:obj4)
|
86
|
+
end
|
87
|
+
end
|
data/test/test_parser.rb
ADDED
@@ -0,0 +1,408 @@
|
|
1
|
+
require File.expand_path '../helper', __FILE__
|
2
|
+
|
3
|
+
class TestParser < MiniTest::Test
|
4
|
+
def expect(input, tokens)
|
5
|
+
assert_equal tokens, parse(input)
|
6
|
+
end
|
7
|
+
|
8
|
+
def parse(input)
|
9
|
+
clean_tokens SlideField::Parser.new.parse(input)
|
10
|
+
end
|
11
|
+
|
12
|
+
def clean_tokens(tokens)
|
13
|
+
case tokens
|
14
|
+
when Array
|
15
|
+
tokens.collect {|e|
|
16
|
+
clean_tokens e
|
17
|
+
}
|
18
|
+
when Hash
|
19
|
+
tokens.merge(tokens) {|k,e|
|
20
|
+
clean_tokens e
|
21
|
+
}
|
22
|
+
when Parslet::Slice
|
23
|
+
tokens.to_s
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_var_identifier
|
28
|
+
tokens = [
|
29
|
+
:assignment=>{
|
30
|
+
:variable=>'var',
|
31
|
+
:operator=>'=',
|
32
|
+
:value=>{:filters=>[], :identifier=>'val'}
|
33
|
+
}
|
34
|
+
]
|
35
|
+
|
36
|
+
expect 'var=val', tokens
|
37
|
+
expect 'var = val', tokens
|
38
|
+
expect 'var = val ', tokens
|
39
|
+
expect "var\t=\tval", tokens
|
40
|
+
expect "var\t=\tval % comment", tokens
|
41
|
+
expect "var\t%{%}=%{%}val", tokens
|
42
|
+
expect " var=val", tokens
|
43
|
+
expect "\t\tvar=val", tokens
|
44
|
+
expect "var=val;", tokens
|
45
|
+
expect "var=val;%comment", tokens
|
46
|
+
|
47
|
+
expect 'var+=val', [
|
48
|
+
:assignment=>{
|
49
|
+
:variable=>'var',
|
50
|
+
:operator=>'+=',
|
51
|
+
:value=>{:filters=>[], :identifier=>'val'}
|
52
|
+
}
|
53
|
+
]
|
54
|
+
expect 'var-=val', [
|
55
|
+
:assignment=>{
|
56
|
+
:variable=>'var',
|
57
|
+
:operator=>'-=',
|
58
|
+
:value=>{:filters=>[], :identifier=>'val'}
|
59
|
+
}
|
60
|
+
]
|
61
|
+
expect 'var*=val', [
|
62
|
+
:assignment=>{
|
63
|
+
:variable=>'var',
|
64
|
+
:operator=>'*=',
|
65
|
+
:value=>{:filters=>[], :identifier=>'val'}
|
66
|
+
}
|
67
|
+
]
|
68
|
+
expect 'var/=val', [
|
69
|
+
:assignment=>{
|
70
|
+
:variable=>'var',
|
71
|
+
:operator=>'/=',
|
72
|
+
:value=>{:filters=>[], :identifier=>'val'}
|
73
|
+
}
|
74
|
+
]
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_var_integer
|
78
|
+
expect 'var=42', [
|
79
|
+
:assignment=>{
|
80
|
+
:variable=>'var',
|
81
|
+
:operator=>'=',
|
82
|
+
:value=>{:filters=>[], :integer=>'42'}
|
83
|
+
}
|
84
|
+
]
|
85
|
+
|
86
|
+
expect 'var=-42', [
|
87
|
+
:assignment=>{
|
88
|
+
:variable=>'var',
|
89
|
+
:operator=>'=',
|
90
|
+
:value=>{:filters=>[], :integer=>'-42'}
|
91
|
+
}
|
92
|
+
]
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_var_string
|
96
|
+
expect 'var="value"', [
|
97
|
+
:assignment=>{
|
98
|
+
:variable=>'var',
|
99
|
+
:operator=>'=',
|
100
|
+
:value=>{:filters=>[], :string=>'"value"'}
|
101
|
+
}
|
102
|
+
]
|
103
|
+
|
104
|
+
expect 'var="say \"hello\""', [
|
105
|
+
:assignment=>{
|
106
|
+
:variable=>'var',
|
107
|
+
:operator=>'=',
|
108
|
+
:value=>{:filters=>[], :string=>'"say \\"hello\\""'}
|
109
|
+
}
|
110
|
+
]
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_var_point
|
114
|
+
expect 'var=42x24', [
|
115
|
+
:assignment=>{
|
116
|
+
:variable=>'var',
|
117
|
+
:operator=>'=',
|
118
|
+
:value=>{:filters=>[], :point=>'42x24'}
|
119
|
+
}
|
120
|
+
]
|
121
|
+
|
122
|
+
expect 'var=-42x24', [
|
123
|
+
:assignment=>{
|
124
|
+
:variable=>'var',
|
125
|
+
:operator=>'=',
|
126
|
+
:value=>{:filters=>[], :point=>'-42x24'}
|
127
|
+
}
|
128
|
+
]
|
129
|
+
|
130
|
+
expect 'var=42x-24', [
|
131
|
+
:assignment=>{
|
132
|
+
:variable=>'var',
|
133
|
+
:operator=>'=',
|
134
|
+
:value=>{:filters=>[], :point=>'42x-24'}
|
135
|
+
}
|
136
|
+
]
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_var_color
|
140
|
+
expect 'var=#C0FF33FF', [
|
141
|
+
:assignment=>{
|
142
|
+
:variable=>'var',
|
143
|
+
:operator=>'=',
|
144
|
+
:value=>{:filters=>[], :color=>'#C0FF33FF'}
|
145
|
+
}
|
146
|
+
]
|
147
|
+
|
148
|
+
expect 'var=#c0ff33ff', [
|
149
|
+
:assignment=>{
|
150
|
+
:variable=>'var',
|
151
|
+
:operator=>'=',
|
152
|
+
:value=>{:filters=>[], :color=>'#c0ff33ff'}
|
153
|
+
}
|
154
|
+
]
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_var_boolean
|
158
|
+
expect 'var=:true', [
|
159
|
+
:assignment=>{
|
160
|
+
:variable=>'var',
|
161
|
+
:operator=>'=',
|
162
|
+
:value=>{:filters=>[], :boolean=>':true'}
|
163
|
+
}
|
164
|
+
]
|
165
|
+
|
166
|
+
expect 'var=:false', [
|
167
|
+
:assignment=>{
|
168
|
+
:variable=>'var',
|
169
|
+
:operator=>'=',
|
170
|
+
:value=>{:filters=>[], :boolean=>':false'}
|
171
|
+
}
|
172
|
+
]
|
173
|
+
end
|
174
|
+
|
175
|
+
def test_var_object
|
176
|
+
expect 'var=\\test', [
|
177
|
+
:assignment=>{
|
178
|
+
:variable=>'var',
|
179
|
+
:operator=>'=',
|
180
|
+
:value=>{:filters=>[], :object=>{:type=>'test'}}
|
181
|
+
}
|
182
|
+
]
|
183
|
+
|
184
|
+
expect 'var=\\test {}', [
|
185
|
+
:assignment=>{
|
186
|
+
:variable=>'var',
|
187
|
+
:operator=>'=',
|
188
|
+
:value=>{:filters=>[], :object=>{:type=>'test', :body=>[]}}
|
189
|
+
}
|
190
|
+
]
|
191
|
+
|
192
|
+
expect "var=\\test {\n\tvar=val\n}", [
|
193
|
+
:assignment=>{
|
194
|
+
:variable=>'var',
|
195
|
+
:operator=>'=',
|
196
|
+
:value=>{
|
197
|
+
:filters=>[],
|
198
|
+
:object=>{:type=>'test', :body=>[
|
199
|
+
{:assignment=>{
|
200
|
+
:variable=>'var',
|
201
|
+
:operator=>'=',
|
202
|
+
:value=>{:filters=>[], :identifier=>'val'}}
|
203
|
+
}
|
204
|
+
]}
|
205
|
+
}
|
206
|
+
}
|
207
|
+
]
|
208
|
+
end
|
209
|
+
|
210
|
+
def test_filter
|
211
|
+
tokens = [
|
212
|
+
:assignment=>{
|
213
|
+
:variable=>'var',
|
214
|
+
:operator=>'=',
|
215
|
+
:value=>{
|
216
|
+
:filters=>[{:name=>'filter_name'}],
|
217
|
+
:identifier=>'val'
|
218
|
+
}
|
219
|
+
}
|
220
|
+
]
|
221
|
+
|
222
|
+
expect 'var=(filter_name)val', tokens
|
223
|
+
expect 'var=(filter_name) val', tokens
|
224
|
+
expect 'var= (filter_name) val', tokens
|
225
|
+
expect "var= (filter_name)\t\tval", tokens
|
226
|
+
expect "var= (filter_name)%{%}val", tokens
|
227
|
+
expect "var= ( filter_name )val", tokens
|
228
|
+
|
229
|
+
tokens = [
|
230
|
+
:assignment=>{
|
231
|
+
:variable=>'var',
|
232
|
+
:operator=>'=',
|
233
|
+
:value=>{
|
234
|
+
:filters=>[{:name=>'first'}, {:name=>'second'}],
|
235
|
+
:identifier=>'val'
|
236
|
+
}
|
237
|
+
}
|
238
|
+
]
|
239
|
+
|
240
|
+
expect "var=(first)(second)val", tokens
|
241
|
+
expect "var=(first) (second)val", tokens
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_object
|
245
|
+
expect '\\test', [
|
246
|
+
{:object=>{:type=>'test'}}
|
247
|
+
]
|
248
|
+
|
249
|
+
expect '\\test % comment', [
|
250
|
+
{:object=>{:type=>'test'}}
|
251
|
+
]
|
252
|
+
|
253
|
+
expect '\\TEST', [
|
254
|
+
{:object=>{:type=>'TEST'}}
|
255
|
+
]
|
256
|
+
|
257
|
+
expect '\\te_st', [
|
258
|
+
{:object=>{:type=>'te_st'}}
|
259
|
+
]
|
260
|
+
|
261
|
+
expect '\\t3s7', [
|
262
|
+
{:object=>{:type=>'t3s7'}}
|
263
|
+
]
|
264
|
+
|
265
|
+
tokens = [
|
266
|
+
{:object=>{:type=>'test', :body=>[]}}
|
267
|
+
]
|
268
|
+
|
269
|
+
expect '\\test{}', tokens
|
270
|
+
expect '\\test { } ', tokens
|
271
|
+
expect "\\test\t{\t}\t", tokens
|
272
|
+
expect "\\test\n{\n}", tokens
|
273
|
+
expect '\\test%{%}{%{%}}', tokens
|
274
|
+
end
|
275
|
+
|
276
|
+
def test_object_value
|
277
|
+
tokens = [
|
278
|
+
{:object=>{
|
279
|
+
:type=>'test',
|
280
|
+
:value=>{:filters=>[], :identifier=>'val'}
|
281
|
+
}}
|
282
|
+
]
|
283
|
+
|
284
|
+
expect '\\test val', tokens
|
285
|
+
expect "\\test\tval", tokens
|
286
|
+
expect "\\test%{%}val", tokens
|
287
|
+
assert_raises Parslet::ParseFailed do
|
288
|
+
parse "\\test\nval"
|
289
|
+
end
|
290
|
+
|
291
|
+
expect '\\test 42', [
|
292
|
+
{:object=>{
|
293
|
+
:type=>'test',
|
294
|
+
:value=>{:filters=>[], :integer=>'42'}
|
295
|
+
}}
|
296
|
+
]
|
297
|
+
|
298
|
+
expect '\\test4-2', [
|
299
|
+
{:object=>{
|
300
|
+
:type=>'test4',
|
301
|
+
:value=>{:filters=>[], :integer=>'-2'}
|
302
|
+
}}
|
303
|
+
]
|
304
|
+
|
305
|
+
expect '\\test "string"', [
|
306
|
+
{:object=>{
|
307
|
+
:type=>'test',
|
308
|
+
:value=>{:filters=>[], :string=>'"string"'}
|
309
|
+
}}
|
310
|
+
]
|
311
|
+
|
312
|
+
expect '\\test 24x42', [
|
313
|
+
{:object=>{
|
314
|
+
:type=>'test',
|
315
|
+
:value=>{:filters=>[], :point=>'24x42'}
|
316
|
+
}}
|
317
|
+
]
|
318
|
+
|
319
|
+
expect '\\test #FFFFFFFF', [
|
320
|
+
{:object=>{
|
321
|
+
:type=>'test',
|
322
|
+
:value=>{:filters=>[], :color=>'#FFFFFFFF'}
|
323
|
+
}}
|
324
|
+
]
|
325
|
+
|
326
|
+
expect '\\test :true', [
|
327
|
+
{:object=>{
|
328
|
+
:type=>'test',
|
329
|
+
:value=>{:filters=>[], :boolean=>':true'}
|
330
|
+
}}
|
331
|
+
]
|
332
|
+
|
333
|
+
expect '\\test (filter)val', [
|
334
|
+
{:object=>{
|
335
|
+
:type=>'test',
|
336
|
+
:value=>{:filters=>[{:name=>'filter'}], :identifier=>'val'}
|
337
|
+
}}
|
338
|
+
]
|
339
|
+
end
|
340
|
+
|
341
|
+
def test_object_body
|
342
|
+
expect '\\test{\\child;}', [
|
343
|
+
{:object=>{:type=>'test', :body=>[
|
344
|
+
{:object=>{:type=>'child'}}
|
345
|
+
]}}
|
346
|
+
]
|
347
|
+
|
348
|
+
assert_raises Parslet::ParseFailed do
|
349
|
+
parse '\\test{\\child}'
|
350
|
+
end
|
351
|
+
|
352
|
+
expect "\\test{\n\t\\child\n}", [
|
353
|
+
{:object=>{:type=>'test', :body=>[
|
354
|
+
{:object=>{:type=>'child'}}
|
355
|
+
]}}
|
356
|
+
]
|
357
|
+
|
358
|
+
expect "\\test{\n\t\\child { \\subchild; }\n}", [
|
359
|
+
{:object=>{:type=>'test', :body=>[
|
360
|
+
{:object=>{:type=>'child', :body=>[
|
361
|
+
{:object=>{:type=>'subchild'}}
|
362
|
+
]}}
|
363
|
+
]}}
|
364
|
+
]
|
365
|
+
|
366
|
+
expect "\\test{var=val;}", [
|
367
|
+
{:object=>{:type=>'test', :body=>[
|
368
|
+
{:assignment=>{
|
369
|
+
:variable=>'var',
|
370
|
+
:operator=>'=',
|
371
|
+
:value=>{:filters=>[], :identifier=>'val'}}
|
372
|
+
}
|
373
|
+
]}}
|
374
|
+
]
|
375
|
+
|
376
|
+
assert_raises Parslet::ParseFailed do
|
377
|
+
parse '\\test{var=val}'
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
def test_template
|
382
|
+
expect '\\&test', [
|
383
|
+
{:object=>{:template=>'&', :type=>'test'}}
|
384
|
+
]
|
385
|
+
end
|
386
|
+
|
387
|
+
def test_comments
|
388
|
+
assert_raises Parslet::ParseFailed do
|
389
|
+
parse "%{"
|
390
|
+
end
|
391
|
+
|
392
|
+
parse "% {"
|
393
|
+
end
|
394
|
+
|
395
|
+
def test_separator
|
396
|
+
assert_raises Parslet::ParseFailed do
|
397
|
+
parse "life = 42 life = 42"
|
398
|
+
end
|
399
|
+
|
400
|
+
expect "\\test; \\test", [
|
401
|
+
{:object=>{:type=>'test'}},
|
402
|
+
{:object=>{:type=>'test'}}
|
403
|
+
]
|
404
|
+
|
405
|
+
parse "\\test; life = 42"
|
406
|
+
parse "life = 42; \\test"
|
407
|
+
end
|
408
|
+
end
|