rtext 0.8.1 → 0.10.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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +120 -89
  3. data/Project.yaml +15 -0
  4. data/RText_Protocol +47 -4
  5. data/lib/rtext/context_builder.rb +49 -8
  6. data/lib/rtext/default_completer.rb +212 -163
  7. data/lib/rtext/default_service_provider.rb +3 -3
  8. data/lib/rtext/frontend/connector.rb +130 -56
  9. data/lib/rtext/instantiator.rb +11 -3
  10. data/lib/rtext/language.rb +5 -5
  11. data/lib/rtext/serializer.rb +3 -3
  12. data/lib/rtext/service.rb +281 -253
  13. data/lib/rtext/tokenizer.rb +2 -2
  14. metadata +33 -33
  15. data/Rakefile +0 -46
  16. data/test/completer_test.rb +0 -606
  17. data/test/context_builder_test.rb +0 -948
  18. data/test/frontend/context_test.rb +0 -301
  19. data/test/instantiator_test.rb +0 -1704
  20. data/test/integration/backend.out +0 -13
  21. data/test/integration/crash_on_request_editor.rb +0 -12
  22. data/test/integration/ecore_editor.rb +0 -50
  23. data/test/integration/frontend.log +0 -38203
  24. data/test/integration/model/invalid_encoding.invenc +0 -2
  25. data/test/integration/model/test.crash_on_request +0 -18
  26. data/test/integration/model/test.crashing_backend +0 -18
  27. data/test/integration/model/test.dont_open_socket +0 -0
  28. data/test/integration/model/test.invalid_cmd_line +0 -0
  29. data/test/integration/model/test.not_in_rtext +0 -0
  30. data/test/integration/model/test_large_with_errors.ect3 +0 -43523
  31. data/test/integration/model/test_metamodel.ect +0 -24
  32. data/test/integration/model/test_metamodel2.ect +0 -5
  33. data/test/integration/model/test_metamodel3.ect4 +0 -7
  34. data/test/integration/model/test_metamodel_error.ect2 +0 -3
  35. data/test/integration/model/test_metamodel_ok.ect2 +0 -18
  36. data/test/integration/test.rb +0 -966
  37. data/test/link_detector_test.rb +0 -287
  38. data/test/message_helper_test.rb +0 -118
  39. data/test/rtext_test.rb +0 -11
  40. data/test/serializer_test.rb +0 -1004
  41. data/test/tokenizer_test.rb +0 -173
@@ -1,606 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__),"..","lib")
2
-
3
- require 'test/unit'
4
- require 'rgen/metamodel_builder'
5
- require 'rtext/language'
6
- require 'rtext/context_builder'
7
- require 'rtext/default_completer'
8
-
9
- class CompleterTest < Test::Unit::TestCase
10
-
11
- module TestMM
12
- extend RGen::MetamodelBuilder::ModuleExtension
13
- class TestNode2 < RGen::MetamodelBuilder::MMBase
14
- has_attr 'text', String
15
- has_attr 'unlabled', String
16
- end
17
- class TestNode3 < RGen::MetamodelBuilder::MMBase
18
- end
19
- class TestNode < RGen::MetamodelBuilder::MMBase
20
- has_attr 'text', String
21
- has_attr 'unlabled1', String
22
- has_attr 'unlabled2', Integer
23
- has_many_attr 'nums', Integer
24
- has_one 'related', TestNode
25
- has_many 'others', TestNode
26
- contains_many 'childs', TestNode, 'parent'
27
- contains_one 'child2RoleA', TestNode2, 'parentA'
28
- contains_many 'child2RoleB', TestNode2, 'parentB'
29
- contains_one_uni 'testNode3', TestNode3
30
- end
31
- SomeEnum = RGen::MetamodelBuilder::DataTypes::Enum.new(
32
- :name => "SomeEnum", :literals => [:A, :B, :'non-word*chars'])
33
- class TestNode3 < RGen::MetamodelBuilder::MMBase
34
- has_attr 'bool', Boolean
35
- has_attr 'float', Float
36
- has_attr 'enum', SomeEnum
37
- end
38
- class TextNode < RGen::MetamodelBuilder::MMBase
39
- end
40
- end
41
-
42
- def test_after_command
43
- options = complete TestMM, <<-END
44
- TestNode |
45
- END
46
- assert_options([
47
- ["\"\"", "[unlabled1] <EString>"],
48
- ["text:", "<EString>"],
49
- ["nums:", "<EInt>"],
50
- ["related:", "<TestNode>"],
51
- ["others:", "<TestNode>"]
52
- ], options)
53
- end
54
-
55
- def test_lable_prefix
56
- options = complete TestMM, <<-END
57
- TestNode t|
58
- END
59
- assert_options([
60
- ["\"\"", "[unlabled1] <EString>"],
61
- ["text:", "<EString>"],
62
- ["nums:", "<EInt>"],
63
- ["related:", "<TestNode>"],
64
- ["others:", "<TestNode>"]
65
- ], options)
66
- end
67
-
68
- def test_lable_within
69
- options = complete TestMM, <<-END
70
- TestNode t|ext
71
- END
72
- assert_options([
73
- ["\"\"", "[unlabled1] <EString>"],
74
- ["text:", "<EString>"],
75
- ["nums:", "<EInt>"],
76
- ["related:", "<TestNode>"],
77
- ["others:", "<TestNode>"]
78
- ], options)
79
- end
80
-
81
- def test_unlabled_prefix
82
- options = complete TestMM, <<-END
83
- TestNode u|
84
- END
85
- assert_options([
86
- ["\"\"", "[unlabled1] <EString>"],
87
- ["text:", "<EString>"],
88
- ["nums:", "<EInt>"],
89
- ["related:", "<TestNode>"],
90
- ["others:", "<TestNode>"]
91
- ], options)
92
- end
93
-
94
- def test_after_labled_value
95
- options = complete TestMM, <<-END
96
- TestNode nums: 1, |
97
- END
98
- assert_options([
99
- ["text:", "<EString>"],
100
- ["related:", "<TestNode>"],
101
- ["others:", "<TestNode>"]
102
- ], options)
103
- end
104
-
105
- def test_after_labled_value_directly_after_comma
106
- options = complete TestMM, <<-END
107
- TestNode nums: 1,|
108
- END
109
- assert_options([
110
- ["text:", "<EString>"],
111
- ["related:", "<TestNode>"],
112
- ["others:", "<TestNode>"]
113
- ], options)
114
- end
115
-
116
- def test_after_second_labled_value_directly_after_comma
117
- options = complete TestMM, <<-END
118
- TestNode nums: 1, text: "a",|
119
- END
120
- assert_options([
121
- ["related:", "<TestNode>"],
122
- ["others:", "<TestNode>"]
123
- ], options)
124
- end
125
-
126
- def test_after_unlabled_value
127
- options = complete TestMM, <<-END
128
- TestNode "bla", |
129
- END
130
- assert_options([
131
- ["0", "[unlabled2] <EInt>"],
132
- ["text:", "<EString>"],
133
- ["nums:", "<EInt>"],
134
- ["related:", "<TestNode>"],
135
- ["others:", "<TestNode>"]
136
- ], options)
137
- end
138
-
139
- def test_after_unlabled_value_directly_after_comma
140
- options = complete TestMM, <<-END
141
- TestNode "bla",|
142
- END
143
- assert_options([
144
- ["0", "[unlabled2] <EInt>"],
145
- ["text:", "<EString>"],
146
- ["nums:", "<EInt>"],
147
- ["related:", "<TestNode>"],
148
- ["others:", "<TestNode>"]
149
- ], options)
150
- end
151
-
152
- def test_after_unlabled_value2
153
- options = complete TestMM, <<-END
154
- TestNode "bla", 1, |
155
- END
156
- assert_options([
157
- ["text:", "<EString>"],
158
- ["nums:", "<EInt>"],
159
- ["related:", "<TestNode>"],
160
- ["others:", "<TestNode>"]
161
- ], options)
162
- end
163
-
164
- def test_after_unlabled_value3
165
- options = complete TestMM, <<-END
166
- TestNode "bla", 1,|
167
- END
168
- assert_options([
169
- ["text:", "<EString>"],
170
- ["nums:", "<EInt>"],
171
- ["related:", "<TestNode>"],
172
- ["others:", "<TestNode>"]
173
- ], options)
174
- end
175
-
176
- def test_after_array
177
- options = complete TestMM, <<-END
178
- TestNode nums: [1, 2], |
179
- END
180
- assert_options([
181
- ["text:", "<EString>"],
182
- ["related:", "<TestNode>"],
183
- ["others:", "<TestNode>"]
184
- ], options)
185
- end
186
-
187
- def test_after_array_direct
188
- options = complete TestMM, <<-END
189
- TestNode nums: [1, 2]|
190
- END
191
- assert_options([
192
- ], options)
193
- end
194
-
195
- def test_value_int
196
- options = complete TestMM, <<-END
197
- TestNode nums: |
198
- END
199
- assert_options([
200
- ["0", "<EInt>"],
201
- ], options)
202
- end
203
-
204
- def test_value_int_part
205
- options = complete TestMM, <<-END
206
- TestNode nums: 0|
207
- END
208
- assert_options([
209
- ["0", "<EInt>"]
210
- ], options)
211
- end
212
-
213
- def test_value_boolean
214
- options = complete TestMM, <<-END
215
- TestNode3 bool: |
216
- END
217
- assert_options([
218
- ["true", "<EBoolean>"],
219
- ["false", "<EBoolean>"],
220
- ], options)
221
- end
222
-
223
- def test_value_boolean_part
224
- options = complete TestMM, <<-END
225
- TestNode3 bool: t|
226
- END
227
- assert_options([
228
- ["true", "<EBoolean>"],
229
- ["false", "<EBoolean>"],
230
- ], options)
231
- end
232
-
233
- def test_value_boolean_full
234
- options = complete TestMM, <<-END
235
- TestNode3 bool: true|
236
- END
237
- assert_options([
238
- ["true", "<EBoolean>"],
239
- ["false", "<EBoolean>"],
240
- ], options)
241
- end
242
-
243
- def test_value_float
244
- options = complete TestMM, <<-END
245
- TestNode3 float: |
246
- END
247
- assert_options([
248
- ["0.0", "<EFloat>"],
249
- ], options)
250
- end
251
-
252
- def test_value_float_part
253
- options = complete TestMM, <<-END
254
- TestNode3 float: 0|
255
- END
256
- assert_options([
257
- ["0.0", "<EFloat>"],
258
- ], options)
259
- end
260
-
261
- def test_value_float_full
262
- options = complete TestMM, <<-END
263
- TestNode3 float: 0.0|
264
- END
265
- assert_options([
266
- ["0.0", "<EFloat>"],
267
- ], options)
268
- end
269
-
270
- def test_value_enum
271
- options = complete TestMM, <<-END
272
- TestNode3 enum: |
273
- END
274
- assert_options([
275
- ["A", "<SomeEnum>"],
276
- ["B", "<SomeEnum>"],
277
- ["\"non-word*chars\"", "<SomeEnum>"]
278
- ], options)
279
- end
280
-
281
- def test_value_enum_part
282
- options = complete TestMM, <<-END
283
- TestNode3 enum: A|
284
- END
285
- assert_options([
286
- ["A", "<SomeEnum>"],
287
- ["B", "<SomeEnum>"],
288
- ["\"non-word*chars\"", "<SomeEnum>"]
289
- ], options)
290
- end
291
-
292
- def test_array_value
293
- options = complete TestMM, <<-END
294
- TestNode nums: [|
295
- END
296
- assert_options([
297
- ["0", "<EInt>"],
298
- ], options)
299
- end
300
-
301
- def test_array_value2
302
- options = complete TestMM, <<-END
303
- TestNode nums: [1,|
304
- END
305
- assert_options([
306
- ["0", "<EInt>"],
307
- ], options)
308
- end
309
-
310
- def test_reference_value
311
- options = complete(TestMM, %Q(\
312
- TestNode related: |\
313
- ), lambda { |r| [
314
- RText::DefaultCompleter::CompletionOption.new("A", "a"),
315
- RText::DefaultCompleter::CompletionOption.new("B", "b") ] })
316
- assert_options([
317
- ["A", "a"],
318
- ["B", "b"],
319
- ], options)
320
- end
321
-
322
- def test_reference_value_part
323
- options = complete(TestMM, %Q(\
324
- TestNode related: /My/|\
325
- ), lambda { |r| [
326
- RText::DefaultCompleter::CompletionOption.new("/My/Target", "a"),
327
- RText::DefaultCompleter::CompletionOption.new("/MyOther/Target", "b") ] })
328
- assert_options([
329
- ["/My/Target", "a"],
330
- ["/MyOther/Target", "b"]
331
- ], options)
332
- end
333
-
334
- def test_reference_value_no_ref_completion_provider
335
- options = complete TestMM, <<-END
336
- TestNode related: |
337
- END
338
- assert_options([
339
- ], options)
340
- end
341
-
342
- def test_reference_value_in_array
343
- options = complete(TestMM, %Q(\
344
- TestNode others: |
345
- ), lambda { |r| [
346
- RText::DefaultCompleter::CompletionOption.new("A", "a"),
347
- RText::DefaultCompleter::CompletionOption.new("B", "b") ] })
348
- assert_options([
349
- ["A", "a"],
350
- ["B", "b"],
351
- ], options)
352
- end
353
-
354
- def test_reference_value_in_array_after_bracket
355
- options = complete(TestMM, %Q(\
356
- TestNode others: [|
357
- ), lambda { |r| [
358
- RText::DefaultCompleter::CompletionOption.new("A", "a"),
359
- RText::DefaultCompleter::CompletionOption.new("B", "b") ] })
360
- assert_options([
361
- ["A", "a"],
362
- ["B", "b"],
363
- ], options)
364
- end
365
-
366
- def test_reference_value_in_array_second_value
367
- options = complete(TestMM, %Q(\
368
- TestNode others: [xxx, |
369
- ), lambda { |r| [
370
- RText::DefaultCompleter::CompletionOption.new("A", "a"),
371
- RText::DefaultCompleter::CompletionOption.new("B", "b") ] })
372
- assert_options([
373
- ["A", "a"],
374
- ["B", "b"],
375
- ], options)
376
- end
377
-
378
- def test_reference_value_nested
379
- options = complete(TestMM, %Q(\
380
- TestNode {
381
- TestNode SimpleState, others: [|/StatemachineMM/State]
382
- ), lambda { |r| [
383
- RText::DefaultCompleter::CompletionOption.new("A", "a"),
384
- RText::DefaultCompleter::CompletionOption.new("B", "b") ] })
385
- assert_options([
386
- ["A", "a"],
387
- ["B", "b"],
388
- ], options)
389
- end
390
-
391
- def test_after_curly
392
- options = complete TestMM, <<-END
393
- TestNode {|
394
- END
395
- assert_options([
396
- ], options)
397
- end
398
-
399
- def test_children
400
- options = complete TestMM, <<-END
401
- TestNode {
402
- |
403
- END
404
- assert_options([
405
- ["TestNode", "<unlabled1>, <unlabled2>"],
406
- ["child2RoleA:", "<TestNode2>"],
407
- ["child2RoleB:", "<TestNode2>"],
408
- ["testNode3:", "<TestNode3>"]
409
- ], options)
410
- end
411
-
412
- def test_children_with_role
413
- options = complete TestMM, <<-END
414
- TestNode {
415
- child2RoleA:
416
- |
417
- END
418
- assert_options([
419
- ["TestNode2", "<unlabled>"],
420
- ], options)
421
- end
422
-
423
- def test_after_child_role
424
- options = complete TestMM, <<-END
425
- TestNode {
426
- child2RoleA:|
427
- END
428
- assert_options([
429
- ], options)
430
- end
431
-
432
- def test_after_child_role2
433
- options = complete TestMM, <<-END
434
- TestNode {
435
- child2RoleA: |
436
- END
437
- assert_options([
438
- ], options)
439
- end
440
-
441
- def test_after_child_role3
442
- options = complete TestMM, <<-END
443
- TestNode {
444
- child2RoleA: [|
445
- END
446
- assert_options([
447
- ], options)
448
- end
449
-
450
- def test_after_child_role4
451
- options = complete TestMM, <<-END
452
- TestNode {
453
- child2RoleA: [ |
454
- END
455
- assert_options([
456
- ], options)
457
- end
458
-
459
- def test_children_with_role_array
460
- options = complete TestMM, <<-END
461
- TestNode {
462
- child2RoleB: [
463
- |
464
- END
465
- assert_options([
466
- ["TestNode2", "<unlabled>"],
467
- ], options)
468
- end
469
-
470
- def test_children_prefix
471
- options = complete TestMM, <<-END
472
- TestNode {
473
- child2RoleB: [
474
- X|
475
- END
476
- assert_options([
477
- ["TestNode2", "<unlabled>"],
478
- ], options)
479
- end
480
-
481
- def test_children_inside_childrole
482
- options = complete TestMM, <<-END
483
- TestNode {
484
- child2RoleA:
485
- TestNode2 |
486
- END
487
- assert_options([
488
- ["unlabled", "[unlabled] <EString>"],
489
- ["text:", "<EString>"]
490
- ], options)
491
- end
492
-
493
- def test_children_inside_childrole_array
494
- options = complete TestMM, <<-END
495
- TestNode {
496
- child2RoleB: [
497
- TestNode2 |
498
- END
499
- assert_options([
500
- ["unlabled", "[unlabled] <EString>"],
501
- ["text:", "<EString>"]
502
- ], options)
503
- end
504
-
505
- def test_unquoted_argument
506
- options = complete TestMM, <<-END
507
- TestNode {
508
- child2RoleB: [
509
- TestNode2 text: |
510
- END
511
- assert_options([
512
- ["text", "<EString>"]
513
- ], options)
514
- end
515
-
516
- def test_root
517
- options = complete TestMM, <<-END
518
- |
519
- END
520
- assert_options([
521
- ["TestNode", "<unlabled1>, <unlabled2>"],
522
- ["TestNode2", "<unlabled>"],
523
- ["TestNode3", ""],
524
- ["TextNode", ""]
525
- ], options)
526
- end
527
-
528
- def test_root_no_context_lines
529
- options = complete TestMM, ""
530
- assert_options([
531
- ["TestNode", "<unlabled1>, <unlabled2>"],
532
- ["TestNode2", "<unlabled>"],
533
- ["TestNode3", ""],
534
- ["TextNode", ""]
535
- ], options)
536
- end
537
-
538
- def test_root_prefix
539
- options = complete TestMM, <<-END
540
- Text|
541
- END
542
- assert_options([
543
- ["TestNode", "<unlabled1>, <unlabled2>"],
544
- ["TestNode2", "<unlabled>"],
545
- ["TestNode3", ""],
546
- ["TextNode", ""]
547
- ], options)
548
- end
549
-
550
- def test_within_command
551
- options = complete TestMM, <<-END
552
- Text|Node
553
- END
554
- assert_options([
555
- ["TestNode", "<unlabled1>, <unlabled2>"],
556
- ["TestNode2", "<unlabled>"],
557
- ["TestNode3", ""],
558
- ["TextNode", ""]
559
- ], options)
560
- end
561
-
562
- def test_within_command2
563
- options = complete TestMM, <<-END
564
- |TextNode
565
- END
566
- assert_options([
567
- ["TestNode", "<unlabled1>, <unlabled2>"],
568
- ["TestNode2", "<unlabled>"],
569
- ["TestNode3", ""],
570
- ["TextNode", ""]
571
- ], options)
572
- end
573
-
574
- def assert_options(expected, options)
575
- assert_equal(expected, options.collect { |o| [o.text, o.extra] })
576
- end
577
-
578
- def complete(mm, text, ref_comp_option_provider=nil)
579
- context_lines = text.split("\n")
580
- if context_lines.last
581
- pos_in_line = context_lines.last.index("|")
582
- context_lines.last.sub!("|", "")
583
- end
584
- lang = RText::Language.new(mm.ecore,
585
- :root_classes => mm.ecore.eAllClasses,
586
- :unlabled_arguments => lambda {|c| ["unlabled1", "unlabled2", "unlabled"]},
587
- :unquoted_arguments => lambda {|c| c.name == "TestNode2" ? ["text", "unlabled"] : []},
588
- :labeled_containments => lambda {|c| ["testNode3"]})
589
- context = RText::ContextBuilder.build_context(lang, context_lines, pos_in_line)
590
- completer = RText::DefaultCompleter.new(lang)
591
- class << completer
592
- attr_accessor :ref_comp_option_provider
593
- def reference_options(context)
594
- if ref_comp_option_provider
595
- ref_comp_option_provider.call(context.feature)
596
- else
597
- super
598
- end
599
- end
600
- end
601
- completer.ref_comp_option_provider = ref_comp_option_provider
602
- completer.complete(context)
603
- end
604
-
605
- end
606
-