lucid-tdl 1.0.0

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.
@@ -0,0 +1,485 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.4.9
4
+ # from Racc grammer file "".
5
+ #
6
+
7
+ require 'racc/parser.rb'
8
+
9
+ require_relative "./lexer"
10
+ require_relative "../ast"
11
+
12
+ module LucidTDL
13
+ class Parser < Racc::Parser
14
+
15
+ module_eval(<<'...end lucid-tdl.y/module_eval...', 'lucid-tdl.y', 104)
16
+
17
+ def parse(input)
18
+ scan_str(input)
19
+ end
20
+ ...end lucid-tdl.y/module_eval...
21
+ ##### State transition tables begin ###
22
+
23
+ racc_action_table = [
24
+ 4, 4, 9, 10, 11, 21, 33, 23, 24, 25,
25
+ 21, 16, 17, 12, 41, 12, 26, 42, 21, 43,
26
+ 12, 21, 55, 59, 60, 47, 48, 49, 50, 51,
27
+ 52, 21, 21, 32, 23, 24, 25, 21, 47, 48,
28
+ 49, 50, 51, 52, 47, 48, 49, 50, 51, 52,
29
+ 21, 4, 4, 9, 10, 11, 21, 47, 48, 49,
30
+ 50, 51, 52, 47, 48, 49, 50, 51, 52, 47,
31
+ 48, 49, 50, 51, 52, 16, 17, 12, 16, 17,
32
+ 12, 16, 17, 12, 29, 30, 4, 38, 4, 4,
33
+ 26, 37, 4, 62, 21, 21, 4, 64, 26, 35,
34
+ 67, 68, 34, 21, 4, 4, 4, 21, 13, 4 ]
35
+
36
+ racc_action_check = [
37
+ 0, 18, 0, 0, 0, 5, 10, 5, 5, 5,
38
+ 39, 14, 14, 14, 23, 0, 18, 24, 57, 25,
39
+ 5, 31, 31, 39, 39, 57, 57, 57, 57, 57,
40
+ 57, 61, 20, 9, 20, 20, 20, 58, 61, 61,
41
+ 61, 61, 61, 61, 58, 58, 58, 58, 58, 58,
42
+ 71, 3, 29, 3, 3, 3, 72, 71, 71, 71,
43
+ 71, 71, 71, 72, 72, 72, 72, 72, 72, 28,
44
+ 28, 28, 28, 28, 28, 2, 2, 2, 19, 19,
45
+ 19, 40, 40, 40, 7, 7, 8, 17, 37, 38,
46
+ 22, 16, 45, 46, 53, 54, 55, 56, 6, 13,
47
+ 59, 60, 11, 63, 64, 67, 68, 70, 1, 30 ]
48
+
49
+ racc_action_pointer = [
50
+ -2, 108, 60, 49, nil, 3, 81, 77, 84, 30,
51
+ 3, 99, nil, 99, -4, nil, 88, 84, -1, 63,
52
+ 30, nil, 73, 11, 14, 16, nil, nil, 60, 50,
53
+ 107, 19, nil, nil, nil, nil, nil, 86, 87, 8,
54
+ 66, nil, nil, nil, nil, 90, 90, nil, nil, nil,
55
+ nil, nil, nil, 92, 93, 94, 94, 16, 35, 97,
56
+ 98, 29, nil, 101, 102, nil, nil, 103, 104, nil,
57
+ 105, 48, 54, nil, nil ]
58
+
59
+ racc_action_default = [
60
+ -43, -43, -1, -43, -5, -43, -9, -11, -13, -43,
61
+ -43, -43, -41, -43, -2, -35, -43, -43, -43, -3,
62
+ -43, -6, -10, -43, -43, -43, -42, -12, -43, -43,
63
+ -43, -14, -16, -17, -18, 75, -36, -43, -43, -43,
64
+ -4, -19, -20, -21, -22, -25, -43, -29, -30, -31,
65
+ -32, -33, -34, -23, -24, -43, -15, -43, -43, -43,
66
+ -43, -26, -28, -7, -43, -37, -38, -43, -43, -27,
67
+ -8, -43, -43, -39, -40 ]
68
+
69
+ racc_goto_table = [
70
+ 5, 36, 14, 20, 6, 56, 44, 2, 31, 22,
71
+ 19, 27, 28, 3, 1, nil, nil, nil, 39, 40,
72
+ nil, nil, nil, nil, nil, nil, nil, 36, nil, 53,
73
+ 54, nil, nil, nil, nil, 65, 66, 57, 58, 69,
74
+ nil, nil, nil, nil, nil, 61, nil, nil, nil, 73,
75
+ 74, nil, nil, nil, nil, 63, nil, nil, nil, nil,
76
+ nil, nil, nil, nil, 70, nil, nil, 71, 72 ]
77
+
78
+ racc_goto_check = [
79
+ 5, 15, 3, 5, 7, 6, 12, 2, 5, 7,
80
+ 2, 9, 11, 4, 1, nil, nil, nil, 5, 3,
81
+ nil, nil, nil, nil, nil, nil, nil, 15, nil, 5,
82
+ 5, nil, nil, nil, nil, 12, 12, 5, 5, 12,
83
+ nil, nil, nil, nil, nil, 5, nil, nil, nil, 12,
84
+ 12, nil, nil, nil, nil, 5, nil, nil, nil, nil,
85
+ nil, nil, nil, nil, 5, nil, nil, 5, 5 ]
86
+
87
+ racc_goto_pointer = [
88
+ nil, 14, 7, 0, 13, 0, -26, 4, nil, 4,
89
+ nil, 5, -22, nil, nil, -13 ]
90
+
91
+ racc_goto_default = [
92
+ nil, nil, nil, nil, nil, nil, nil, 18, 7, nil,
93
+ 8, nil, nil, 45, 46, 15 ]
94
+
95
+ racc_reduce_table = [
96
+ 0, 0, :racc_error,
97
+ 1, 19, :_reduce_1,
98
+ 2, 19, :_reduce_2,
99
+ 2, 19, :_reduce_3,
100
+ 3, 19, :_reduce_4,
101
+ 1, 23, :_reduce_none,
102
+ 2, 23, :_reduce_none,
103
+ 2, 24, :_reduce_7,
104
+ 3, 24, :_reduce_8,
105
+ 1, 22, :_reduce_9,
106
+ 2, 22, :_reduce_10,
107
+ 1, 20, :_reduce_11,
108
+ 2, 20, :_reduce_12,
109
+ 1, 26, :_reduce_13,
110
+ 2, 26, :_reduce_14,
111
+ 3, 26, :_reduce_15,
112
+ 2, 28, :_reduce_16,
113
+ 2, 28, :_reduce_17,
114
+ 2, 28, :_reduce_18,
115
+ 3, 28, :_reduce_19,
116
+ 3, 28, :_reduce_20,
117
+ 3, 28, :_reduce_21,
118
+ 2, 27, :_reduce_22,
119
+ 2, 29, :_reduce_23,
120
+ 2, 29, :_reduce_24,
121
+ 1, 30, :_reduce_25,
122
+ 2, 30, :_reduce_26,
123
+ 3, 30, :_reduce_27,
124
+ 2, 31, :_reduce_28,
125
+ 1, 32, :_reduce_none,
126
+ 1, 32, :_reduce_none,
127
+ 1, 32, :_reduce_none,
128
+ 1, 32, :_reduce_none,
129
+ 1, 32, :_reduce_none,
130
+ 1, 32, :_reduce_none,
131
+ 1, 21, :_reduce_35,
132
+ 2, 21, :_reduce_36,
133
+ 4, 33, :_reduce_37,
134
+ 4, 33, :_reduce_38,
135
+ 6, 33, :_reduce_39,
136
+ 6, 33, :_reduce_40,
137
+ 1, 25, :_reduce_41,
138
+ 2, 25, :_reduce_42 ]
139
+
140
+ racc_reduce_n = 43
141
+
142
+ racc_shift_n = 75
143
+
144
+ racc_token_table = {
145
+ false => 0,
146
+ :error => 1,
147
+ :NEWLINE => 2,
148
+ :TEXT => 3,
149
+ :FEATURE => 4,
150
+ :ABILITY => 5,
151
+ :RESPONSIBILITY => 6,
152
+ :BACKGROUND => 7,
153
+ :CONTEXT => 8,
154
+ :GIVEN => 9,
155
+ :WHEN => 10,
156
+ :THEN => 11,
157
+ :AND => 12,
158
+ :BUT => 13,
159
+ :GENERIC => 14,
160
+ :SCENARIO => 15,
161
+ :TEST => 16,
162
+ :TAG => 17 }
163
+
164
+ racc_nt_base = 18
165
+
166
+ racc_use_result_var = true
167
+
168
+ Racc_arg = [
169
+ racc_action_table,
170
+ racc_action_check,
171
+ racc_action_default,
172
+ racc_action_pointer,
173
+ racc_goto_table,
174
+ racc_goto_check,
175
+ racc_goto_default,
176
+ racc_goto_pointer,
177
+ racc_nt_base,
178
+ racc_reduce_table,
179
+ racc_token_table,
180
+ racc_shift_n,
181
+ racc_reduce_n,
182
+ racc_use_result_var ]
183
+
184
+ Racc_token_to_s_table = [
185
+ "$end",
186
+ "error",
187
+ "NEWLINE",
188
+ "TEXT",
189
+ "FEATURE",
190
+ "ABILITY",
191
+ "RESPONSIBILITY",
192
+ "BACKGROUND",
193
+ "CONTEXT",
194
+ "GIVEN",
195
+ "WHEN",
196
+ "THEN",
197
+ "AND",
198
+ "BUT",
199
+ "GENERIC",
200
+ "SCENARIO",
201
+ "TEST",
202
+ "TAG",
203
+ "$start",
204
+ "Root",
205
+ "Feature",
206
+ "Scenarios",
207
+ "FeatureTags",
208
+ "Newline",
209
+ "Description",
210
+ "Tags",
211
+ "FeatureHeader",
212
+ "Background",
213
+ "FeatureName",
214
+ "BackgroundHeader",
215
+ "Steps",
216
+ "Step",
217
+ "Keyword",
218
+ "Scenario" ]
219
+
220
+ Racc_debug_parser = false
221
+
222
+ ##### State transition tables end #####
223
+
224
+ # reduce 0 omitted
225
+
226
+ module_eval(<<'.,.,', 'lucid-tdl.y', 4)
227
+ def _reduce_1(val, _values, result)
228
+ result = val[0]
229
+ result
230
+ end
231
+ .,.,
232
+
233
+ module_eval(<<'.,.,', 'lucid-tdl.y', 6)
234
+ def _reduce_2(val, _values, result)
235
+ result = val[0]; result.scenarios = val[1]
236
+ result
237
+ end
238
+ .,.,
239
+
240
+ module_eval(<<'.,.,', 'lucid-tdl.y', 7)
241
+ def _reduce_3(val, _values, result)
242
+ result = val[1]; result.tags = val[0]
243
+ result
244
+ end
245
+ .,.,
246
+
247
+ module_eval(<<'.,.,', 'lucid-tdl.y', 9)
248
+ def _reduce_4(val, _values, result)
249
+ result = val[1]; result.scenarios = val[2]; result.tags = val[0]
250
+ result
251
+ end
252
+ .,.,
253
+
254
+ # reduce 5 omitted
255
+
256
+ # reduce 6 omitted
257
+
258
+ module_eval(<<'.,.,', 'lucid-tdl.y', 18)
259
+ def _reduce_7(val, _values, result)
260
+ result = val[0]
261
+ result
262
+ end
263
+ .,.,
264
+
265
+ module_eval(<<'.,.,', 'lucid-tdl.y', 19)
266
+ def _reduce_8(val, _values, result)
267
+ result = val[0...-1].flatten
268
+ result
269
+ end
270
+ .,.,
271
+
272
+ module_eval(<<'.,.,', 'lucid-tdl.y', 23)
273
+ def _reduce_9(val, _values, result)
274
+ result = val[0]
275
+ result
276
+ end
277
+ .,.,
278
+
279
+ module_eval(<<'.,.,', 'lucid-tdl.y', 24)
280
+ def _reduce_10(val, _values, result)
281
+ result = val[1]
282
+ result
283
+ end
284
+ .,.,
285
+
286
+ module_eval(<<'.,.,', 'lucid-tdl.y', 28)
287
+ def _reduce_11(val, _values, result)
288
+ result = val[0]
289
+ result
290
+ end
291
+ .,.,
292
+
293
+ module_eval(<<'.,.,', 'lucid-tdl.y', 30)
294
+ def _reduce_12(val, _values, result)
295
+ result = val[0]; result.background = val[1]
296
+ result
297
+ end
298
+ .,.,
299
+
300
+ module_eval(<<'.,.,', 'lucid-tdl.y', 34)
301
+ def _reduce_13(val, _values, result)
302
+ result = val[0]
303
+ result
304
+ end
305
+ .,.,
306
+
307
+ module_eval(<<'.,.,', 'lucid-tdl.y', 35)
308
+ def _reduce_14(val, _values, result)
309
+ result = val[0]
310
+ result
311
+ end
312
+ .,.,
313
+
314
+ module_eval(<<'.,.,', 'lucid-tdl.y', 37)
315
+ def _reduce_15(val, _values, result)
316
+ result = val[0]; result.description = val[2]
317
+ result
318
+ end
319
+ .,.,
320
+
321
+ module_eval(<<'.,.,', 'lucid-tdl.y', 41)
322
+ def _reduce_16(val, _values, result)
323
+ result = AST::Feature.new(val[1]); result.pos(filename, lineno)
324
+ result
325
+ end
326
+ .,.,
327
+
328
+ module_eval(<<'.,.,', 'lucid-tdl.y', 42)
329
+ def _reduce_17(val, _values, result)
330
+ result = AST::Feature.new(val[1]); result.pos(filename, lineno)
331
+ result
332
+ end
333
+ .,.,
334
+
335
+ module_eval(<<'.,.,', 'lucid-tdl.y', 43)
336
+ def _reduce_18(val, _values, result)
337
+ result = AST::Feature.new(val[1]); result.pos(filename, lineno)
338
+ result
339
+ end
340
+ .,.,
341
+
342
+ module_eval(<<'.,.,', 'lucid-tdl.y', 44)
343
+ def _reduce_19(val, _values, result)
344
+ result = AST::Feature.new(val[2]); result.pos(filename, lineno)
345
+ result
346
+ end
347
+ .,.,
348
+
349
+ module_eval(<<'.,.,', 'lucid-tdl.y', 45)
350
+ def _reduce_20(val, _values, result)
351
+ result = AST::Feature.new(val[2]); result.pos(filename, lineno)
352
+ result
353
+ end
354
+ .,.,
355
+
356
+ module_eval(<<'.,.,', 'lucid-tdl.y', 46)
357
+ def _reduce_21(val, _values, result)
358
+ result = AST::Feature.new(val[2]); result.pos(filename, lineno)
359
+ result
360
+ end
361
+ .,.,
362
+
363
+ module_eval(<<'.,.,', 'lucid-tdl.y', 51)
364
+ def _reduce_22(val, _values, result)
365
+ result = val[0]; result.steps = val[1]
366
+ result
367
+ end
368
+ .,.,
369
+
370
+ module_eval(<<'.,.,', 'lucid-tdl.y', 55)
371
+ def _reduce_23(val, _values, result)
372
+ result = AST::Background.new; result.pos(filename, lineno)
373
+ result
374
+ end
375
+ .,.,
376
+
377
+ module_eval(<<'.,.,', 'lucid-tdl.y', 56)
378
+ def _reduce_24(val, _values, result)
379
+ result = AST::Background.new; result.pos(filename, lineno)
380
+ result
381
+ end
382
+ .,.,
383
+
384
+ module_eval(<<'.,.,', 'lucid-tdl.y', 60)
385
+ def _reduce_25(val, _values, result)
386
+ result = [val[0]]
387
+ result
388
+ end
389
+ .,.,
390
+
391
+ module_eval(<<'.,.,', 'lucid-tdl.y', 61)
392
+ def _reduce_26(val, _values, result)
393
+ result = [val[0]]
394
+ result
395
+ end
396
+ .,.,
397
+
398
+ module_eval(<<'.,.,', 'lucid-tdl.y', 62)
399
+ def _reduce_27(val, _values, result)
400
+ val[2].unshift(val[0]); result = val[2]
401
+ result
402
+ end
403
+ .,.,
404
+
405
+ module_eval(<<'.,.,', 'lucid-tdl.y', 66)
406
+ def _reduce_28(val, _values, result)
407
+ result = AST::Step.new(val[1], val[0]); result.pos(filename, lineno)
408
+ result
409
+ end
410
+ .,.,
411
+
412
+ # reduce 29 omitted
413
+
414
+ # reduce 30 omitted
415
+
416
+ # reduce 31 omitted
417
+
418
+ # reduce 32 omitted
419
+
420
+ # reduce 33 omitted
421
+
422
+ # reduce 34 omitted
423
+
424
+ module_eval(<<'.,.,', 'lucid-tdl.y', 74)
425
+ def _reduce_35(val, _values, result)
426
+ result = [val[0]]
427
+ result
428
+ end
429
+ .,.,
430
+
431
+ module_eval(<<'.,.,', 'lucid-tdl.y', 75)
432
+ def _reduce_36(val, _values, result)
433
+ result = val[0] << val[1]
434
+ result
435
+ end
436
+ .,.,
437
+
438
+ module_eval(<<'.,.,', 'lucid-tdl.y', 80)
439
+ def _reduce_37(val, _values, result)
440
+ result = AST::Scenario.new(val[1], val[3]); result.pos(filename, lineno - 1)
441
+ result
442
+ end
443
+ .,.,
444
+
445
+ module_eval(<<'.,.,', 'lucid-tdl.y', 82)
446
+ def _reduce_38(val, _values, result)
447
+ result = AST::Scenario.new(val[1], val[3]); result.pos(filename, lineno - 1)
448
+ result
449
+ end
450
+ .,.,
451
+
452
+ module_eval(<<'.,.,', 'lucid-tdl.y', 85)
453
+ def _reduce_39(val, _values, result)
454
+ result = AST::Scenario.new(val[3], val[5], val[0]); result.pos(filename, lineno - 2)
455
+ result
456
+ end
457
+ .,.,
458
+
459
+ module_eval(<<'.,.,', 'lucid-tdl.y', 88)
460
+ def _reduce_40(val, _values, result)
461
+ result = AST::Scenario.new(val[3], val[5], val[0]); result.pos(filename, lineno - 2)
462
+ result
463
+ end
464
+ .,.,
465
+
466
+ module_eval(<<'.,.,', 'lucid-tdl.y', 92)
467
+ def _reduce_41(val, _values, result)
468
+ result = [AST::Tag.new(val[0])]
469
+ result
470
+ end
471
+ .,.,
472
+
473
+ module_eval(<<'.,.,', 'lucid-tdl.y', 93)
474
+ def _reduce_42(val, _values, result)
475
+ result = val[0] << AST::Tag.new(val[1])
476
+ result
477
+ end
478
+ .,.,
479
+
480
+ def _reduce_none(val, _values, result)
481
+ val[0]
482
+ end
483
+
484
+ end # class Parser
485
+ end # module LucidTDL
@@ -0,0 +1,3 @@
1
+ module LucidTDL
2
+ VERSION = "1.0.0"
3
+ end
data/lib/lucid-tdl.rb ADDED
@@ -0,0 +1,11 @@
1
+ require "lucid-tdl/version"
2
+ require "lucid-tdl/ast"
3
+ require "lucid-tdl/parser/parser"
4
+
5
+ module LucidTDL
6
+ def self.parse(input)
7
+ parser = Parser.new
8
+ parser.parse(input)
9
+ end
10
+ end
11
+
data/lucid-tdl.gemspec ADDED
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'lucid-tdl/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "lucid-tdl"
8
+ gem.version = LucidTDL::VERSION
9
+ gem.authors = ["Jeff Nyman"]
10
+ gem.email = ["jeffnyman@gmail.com"]
11
+ gem.description = "Test Description Language"
12
+ gem.summary = "Test Description Language"
13
+ gem.homepage = "https://github.com/jnyman/lucid-tdl"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+ end
@@ -0,0 +1,125 @@
1
+ require 'test_helper'
2
+ require 'ostruct'
3
+
4
+ class LucidVisitor
5
+ def visit_LucidNode(lucid_node)
6
+ lucid_node.elements
7
+ end
8
+ end
9
+
10
+ class LucidNode < LucidTDL::AST::Node
11
+ attr_reader :elements
12
+
13
+ def initialize(name, elements)
14
+ @name = name
15
+ @elements = elements
16
+ end
17
+ end
18
+
19
+ module LucidTDL
20
+ module AST
21
+ describe Node do
22
+ it "is visitable" do
23
+ lucid_node = LucidNode.new('Lucid Node', ['one', 'two', 'three'])
24
+ visitor = LucidVisitor.new
25
+
26
+ lucid_node.accept(visitor).must_equal ['one', 'two', 'three']
27
+ end
28
+ end
29
+
30
+ [Feature, Ability, Responsibility, Scenario, Test, Tag].each do |node|
31
+ describe node do
32
+ it "is a node" do
33
+ node.ancestors.must_include Node
34
+ end
35
+
36
+ it "has a line" do
37
+ instance = node.new("Name")
38
+ instance.name.must_equal 'Name'
39
+ instance.must_respond_to :line
40
+ end
41
+ end
42
+ end
43
+
44
+ describe Feature do
45
+ it "is Enumerable" do
46
+ tags = ['-one', '-two']
47
+ background = ['one', 'two']
48
+ elements = ['+one', '+two']
49
+
50
+ instance = Feature.new("Test Feature", elements, tags, background)
51
+ instance.tags.each.to_a.must_equal ['-one', '-two']
52
+ instance.background.each.to_a.must_equal ['one', 'two']
53
+ instance.each.to_a.must_equal ['+one', '+two']
54
+ end
55
+ end
56
+
57
+ describe Scenario do
58
+ before do
59
+ @steps = [
60
+ OpenStruct.new(line: 4),
61
+ OpenStruct.new(line: 5),
62
+ ]
63
+ end
64
+
65
+ it "is Enumerable" do
66
+ instance = Scenario.new("Name", @steps)
67
+ instance.each.to_a.must_equal @steps
68
+ end
69
+
70
+ it "has tags" do
71
+ tags = ['selenium', 'wip']
72
+
73
+ instance = Scenario.new("Name", @steps, tags)
74
+ instance.tags.must_equal tags
75
+ end
76
+ end
77
+
78
+ describe Background do
79
+ before do
80
+ @steps = [
81
+ OpenStruct.new(line: 4),
82
+ OpenStruct.new(line: 5),
83
+ ]
84
+ end
85
+
86
+ it "is a Node" do
87
+ Background.ancestors.must_include Node
88
+ end
89
+
90
+ it "is Enumerable" do
91
+ instance = Background.new(@steps)
92
+ instance.each.to_a.must_equal @steps
93
+ end
94
+
95
+ describe "when there are background steps" do
96
+ it "records line" do
97
+ instance = Background.new(@steps)
98
+ instance.pos("file", 3)
99
+ instance.line.must_equal 3
100
+ end
101
+ end
102
+
103
+ describe "otherwise" do
104
+ it "does not" do
105
+ instance = Background.new([])
106
+ instance.line.must_equal nil
107
+ end
108
+ end
109
+ end
110
+
111
+ describe Step do
112
+ it "is a Node" do
113
+ Step.ancestors.must_include Node
114
+ end
115
+
116
+ it "has a line" do
117
+ instance = Step.new("Name", 'Given')
118
+ instance.pos("file", 2)
119
+ instance.name.must_equal 'Name'
120
+ instance.keyword.must_equal 'Given'
121
+ instance.line.must_equal 2
122
+ end
123
+ end
124
+ end
125
+ end