|
1 "{ Package: 'stx:goodies/petitparser/parsers/smalltalk/tests' }" |
|
2 |
|
3 PPCompositeParserTest subclass:#PPSmalltalkGrammarTests |
|
4 instanceVariableNames:'' |
|
5 classVariableNames:'' |
|
6 poolDictionaries:'' |
|
7 category:'PetitSmalltalk-Tests' |
|
8 ! |
|
9 |
|
10 PPSmalltalkGrammarTests comment:'' |
|
11 ! |
|
12 |
|
13 |
|
14 !PPSmalltalkGrammarTests class methodsFor:'accessing'! |
|
15 |
|
16 packageNamesUnderTest |
|
17 ^ #('PetitSmalltalk') |
|
18 ! ! |
|
19 |
|
20 !PPSmalltalkGrammarTests methodsFor:'accessing'! |
|
21 |
|
22 parserClass |
|
23 ^ PPSmalltalkGrammar |
|
24 ! ! |
|
25 |
|
26 !PPSmalltalkGrammarTests methodsFor:'testing'! |
|
27 |
|
28 testArray1 |
|
29 self |
|
30 parse: '{}' |
|
31 rule: #array |
|
32 ! |
|
33 |
|
34 testArray2 |
|
35 self |
|
36 parse: '{self foo}' |
|
37 rule: #array |
|
38 ! |
|
39 |
|
40 testArray3 |
|
41 self |
|
42 parse: '{self foo. self bar}' |
|
43 rule: #array |
|
44 ! |
|
45 |
|
46 testArray4 |
|
47 self |
|
48 parse: '{self foo. self bar.}' |
|
49 rule: #array |
|
50 ! |
|
51 |
|
52 testAssignment1 |
|
53 self |
|
54 parse: '1' |
|
55 rule: #expression |
|
56 ! |
|
57 |
|
58 testAssignment2 |
|
59 self |
|
60 parse: 'a := 1' |
|
61 rule: #expression |
|
62 ! |
|
63 |
|
64 testAssignment3 |
|
65 self |
|
66 parse: 'a := b := 1' |
|
67 rule: #expression |
|
68 ! |
|
69 |
|
70 testAssignment4 |
|
71 PPSmalltalkGrammar allowUnderscoreAssignment |
|
72 ifTrue: [ self parse: 'a _ 1' rule: #expression ] |
|
73 ifFalse: [ self fail: 'a _ 1' rule: #expression ] |
|
74 ! |
|
75 |
|
76 testAssignment5 |
|
77 PPSmalltalkGrammar allowUnderscoreAssignment |
|
78 ifTrue: [ self parse: 'a _ b _ 1' rule: #expression ] |
|
79 ifFalse: [ self fail: 'a _ b _ 1' rule: #expression ] |
|
80 ! |
|
81 |
|
82 testAssignment6 |
|
83 self |
|
84 parse: 'a := (b := c)' |
|
85 rule: #expression |
|
86 ! |
|
87 |
|
88 testComment1 |
|
89 self |
|
90 parse: '1"one"+2' |
|
91 rule: #expression |
|
92 ! |
|
93 |
|
94 testComment2 |
|
95 self |
|
96 parse: '1 "one" +2' |
|
97 rule: #expression |
|
98 ! |
|
99 |
|
100 testComment3 |
|
101 self |
|
102 parse: '1"one"+"two"2' |
|
103 rule: #expression |
|
104 ! |
|
105 |
|
106 testComment4 |
|
107 self |
|
108 parse: '1"one""two"+2' |
|
109 rule: #expression |
|
110 ! |
|
111 |
|
112 testComment5 |
|
113 self |
|
114 parse: '1"one" "two"+2' |
|
115 rule: #expression |
|
116 ! |
|
117 |
|
118 testCompleteness |
|
119 "This test asserts that all subclasses override all test methods." |
|
120 |
|
121 self class allSubclasses do: [ :subclass | |
|
122 self class testSelectors do: [ :selector | |
|
123 self |
|
124 assert: (selector = #testCompleteness or: [ subclass selectors includes: selector ]) |
|
125 description: subclass printString , ' does not test ' , selector printString ] ] |
|
126 ! |
|
127 |
|
128 testMethod1 |
|
129 self |
|
130 parse: 'negated ^ 0 - self' |
|
131 rule: #method |
|
132 ! |
|
133 |
|
134 testMethod2 |
|
135 "Spaces at the beginning of the method." |
|
136 self |
|
137 parse: ' negated ^ 0 - self' |
|
138 rule: #method |
|
139 ! |
|
140 |
|
141 testMethod3 |
|
142 "Spaces at the end of the method." |
|
143 self |
|
144 parse: ' negated ^ 0 - self ' |
|
145 rule: #method |
|
146 ! |
|
147 |
|
148 testSequence1 |
|
149 self |
|
150 parse: '| a | 1 . 2' |
|
151 rule: #sequence |
|
152 ! |
|
153 |
|
154 testStatements1 |
|
155 self |
|
156 parse: '1' |
|
157 rule: #sequence |
|
158 ! |
|
159 |
|
160 testStatements2 |
|
161 self |
|
162 parse: '1 . 2' |
|
163 rule: #sequence |
|
164 ! |
|
165 |
|
166 testStatements3 |
|
167 self |
|
168 parse: '1 . 2 . 3' |
|
169 rule: #sequence |
|
170 ! |
|
171 |
|
172 testStatements4 |
|
173 self |
|
174 parse: '1 . 2 . 3 .' |
|
175 rule: #sequence |
|
176 ! |
|
177 |
|
178 testStatements5 |
|
179 self |
|
180 parse: '1 . . 2' |
|
181 rule: #sequence |
|
182 ! |
|
183 |
|
184 testStatements6 |
|
185 self |
|
186 parse: '1. 2' |
|
187 rule: #sequence |
|
188 ! |
|
189 |
|
190 testStatements7 |
|
191 self |
|
192 parse: '. 1' |
|
193 rule: #sequence |
|
194 ! |
|
195 |
|
196 testStatements8 |
|
197 self |
|
198 parse: '.1' |
|
199 rule: #sequence |
|
200 ! |
|
201 |
|
202 testTemporaries1 |
|
203 self |
|
204 parse: '| a |' |
|
205 rule: #sequence |
|
206 ! |
|
207 |
|
208 testTemporaries2 |
|
209 self |
|
210 parse: '| a b |' |
|
211 rule: #sequence |
|
212 ! |
|
213 |
|
214 testTemporaries3 |
|
215 self |
|
216 parse: '| a b c |' |
|
217 rule: #sequence |
|
218 ! |
|
219 |
|
220 testVariable1 |
|
221 self |
|
222 parse: 'trueBinding' |
|
223 rule: #primary |
|
224 ! |
|
225 |
|
226 testVariable2 |
|
227 self |
|
228 parse: 'falseBinding' |
|
229 rule: #primary |
|
230 ! |
|
231 |
|
232 testVariable3 |
|
233 self |
|
234 parse: 'nilly' |
|
235 rule: #primary |
|
236 ! |
|
237 |
|
238 testVariable4 |
|
239 self |
|
240 parse: 'selfish' |
|
241 rule: #primary |
|
242 ! |
|
243 |
|
244 testVariable5 |
|
245 self |
|
246 parse: 'supernanny' |
|
247 rule: #primary |
|
248 ! |
|
249 |
|
250 testVariable6 |
|
251 PPSmalltalkGrammar allowUnderscoreAssignment ifFalse: [ |
|
252 self |
|
253 parse: 'super_nanny' |
|
254 rule: #primary ] |
|
255 ! |
|
256 |
|
257 testVariable7 |
|
258 PPSmalltalkGrammar allowUnderscoreAssignment ifFalse: [ |
|
259 self |
|
260 parse: '__gen_var_123__' |
|
261 rule: #primary ] |
|
262 ! ! |
|
263 |
|
264 !PPSmalltalkGrammarTests methodsFor:'testing-blocks'! |
|
265 |
|
266 testArgumentsBlock1 |
|
267 self |
|
268 parse: '[ :a | ]' |
|
269 rule: #block |
|
270 ! |
|
271 |
|
272 testArgumentsBlock2 |
|
273 self |
|
274 parse: '[ :a :b | ]' |
|
275 rule: #block |
|
276 ! |
|
277 |
|
278 testArgumentsBlock3 |
|
279 self |
|
280 parse: '[ :a :b :c | ]' |
|
281 rule: #block |
|
282 ! |
|
283 |
|
284 testComplexBlock1 |
|
285 self |
|
286 parse: '[ :a | | b | c ]' |
|
287 rule: #block |
|
288 ! |
|
289 |
|
290 testComplexBlock2 |
|
291 self |
|
292 parse: '[:a||b|c]' |
|
293 rule: #block |
|
294 ! |
|
295 |
|
296 testSimpleBlock1 |
|
297 self |
|
298 parse: '[ ]' |
|
299 rule: #block |
|
300 ! |
|
301 |
|
302 testSimpleBlock2 |
|
303 self |
|
304 parse: '[ nil ]' |
|
305 rule: #block |
|
306 ! |
|
307 |
|
308 testSimpleBlock3 |
|
309 self |
|
310 parse: '[ :a ]' |
|
311 rule: #block |
|
312 ! |
|
313 |
|
314 testStatementBlock1 |
|
315 self |
|
316 parse: '[ nil ]' |
|
317 rule: #block |
|
318 ! |
|
319 |
|
320 testStatementBlock2 |
|
321 self |
|
322 parse: '[ | a | nil ]' |
|
323 rule: #block |
|
324 ! |
|
325 |
|
326 testStatementBlock3 |
|
327 self |
|
328 parse: '[ | a b | nil ]' |
|
329 rule: #block |
|
330 ! ! |
|
331 |
|
332 !PPSmalltalkGrammarTests methodsFor:'testing-literals'! |
|
333 |
|
334 testArrayLiteral1 |
|
335 self |
|
336 parse: '#()' |
|
337 rule: #arrayLiteral |
|
338 ! |
|
339 |
|
340 testArrayLiteral10 |
|
341 self |
|
342 parse: '#((1 2) #(1 2 3))' |
|
343 rule: #arrayLiteral |
|
344 ! |
|
345 |
|
346 testArrayLiteral11 |
|
347 self |
|
348 parse: '#([1 2] #[1 2 3])' |
|
349 rule: #arrayLiteral |
|
350 ! |
|
351 |
|
352 testArrayLiteral2 |
|
353 self |
|
354 parse: '#(1)' |
|
355 rule: #arrayLiteral |
|
356 ! |
|
357 |
|
358 testArrayLiteral3 |
|
359 self |
|
360 parse: '#(1 2)' |
|
361 rule: #arrayLiteral |
|
362 ! |
|
363 |
|
364 testArrayLiteral4 |
|
365 self |
|
366 parse: '#(true false nil)' |
|
367 rule: #arrayLiteral |
|
368 ! |
|
369 |
|
370 testArrayLiteral5 |
|
371 self |
|
372 parse: '#($a)' |
|
373 rule: #arrayLiteral |
|
374 ! |
|
375 |
|
376 testArrayLiteral6 |
|
377 self |
|
378 parse: '#(1.2)' |
|
379 rule: #arrayLiteral |
|
380 ! |
|
381 |
|
382 testArrayLiteral7 |
|
383 self |
|
384 parse: '#(size #at: at:put: #''=='')' |
|
385 rule: #arrayLiteral |
|
386 ! |
|
387 |
|
388 testArrayLiteral8 |
|
389 self |
|
390 parse: '#(''baz'')' |
|
391 rule: #arrayLiteral |
|
392 ! |
|
393 |
|
394 testArrayLiteral9 |
|
395 self |
|
396 parse: '#((1) 2)' |
|
397 rule: #arrayLiteral |
|
398 ! |
|
399 |
|
400 testByteLiteral1 |
|
401 self |
|
402 parse: '#[]' |
|
403 rule: #byteLiteral |
|
404 ! |
|
405 |
|
406 testByteLiteral2 |
|
407 self |
|
408 parse: '#[0]' |
|
409 rule: #byteLiteral |
|
410 ! |
|
411 |
|
412 testByteLiteral3 |
|
413 self |
|
414 parse: '#[255]' |
|
415 rule: #byteLiteral |
|
416 ! |
|
417 |
|
418 testByteLiteral4 |
|
419 self |
|
420 parse: '#[ 1 2 ]' |
|
421 rule: #byteLiteral |
|
422 ! |
|
423 |
|
424 testByteLiteral5 |
|
425 self |
|
426 parse: '#[ 2r1010 8r77 16rFF ]' |
|
427 rule: #byteLiteral |
|
428 ! |
|
429 |
|
430 testCharLiteral1 |
|
431 self |
|
432 parse: '$a' |
|
433 rule: #charLiteral |
|
434 ! |
|
435 |
|
436 testCharLiteral2 |
|
437 self |
|
438 parse: '$ ' |
|
439 rule: #charLiteral |
|
440 ! |
|
441 |
|
442 testCharLiteral3 |
|
443 self |
|
444 parse: '$$' |
|
445 rule: #charLiteral |
|
446 ! |
|
447 |
|
448 testNumberLiteral1 |
|
449 self |
|
450 parse: '0' |
|
451 rule: #numberLiteral |
|
452 ! |
|
453 |
|
454 testNumberLiteral10 |
|
455 self |
|
456 parse: '10r10' |
|
457 rule: #numberLiteral |
|
458 ! |
|
459 |
|
460 testNumberLiteral11 |
|
461 self |
|
462 parse: '8r777' |
|
463 rule: #numberLiteral |
|
464 ! |
|
465 |
|
466 testNumberLiteral12 |
|
467 self |
|
468 parse: '16rAF' |
|
469 rule: #numberLiteral |
|
470 ! |
|
471 |
|
472 testNumberLiteral13 |
|
473 self |
|
474 parse: '16rCA.FE' |
|
475 rule: #numberLiteral |
|
476 ! |
|
477 |
|
478 testNumberLiteral14 |
|
479 self |
|
480 parse: '3r-22.2' |
|
481 rule: #numberLiteral |
|
482 ! |
|
483 |
|
484 testNumberLiteral15 |
|
485 self |
|
486 parse: '0.50s2' |
|
487 rule: #numberLiteral |
|
488 ! |
|
489 |
|
490 testNumberLiteral2 |
|
491 self |
|
492 parse: '0.1' |
|
493 rule: #numberLiteral |
|
494 ! |
|
495 |
|
496 testNumberLiteral3 |
|
497 self |
|
498 parse: '123' |
|
499 rule: #numberLiteral |
|
500 ! |
|
501 |
|
502 testNumberLiteral4 |
|
503 self |
|
504 parse: '123.456' |
|
505 rule: #numberLiteral |
|
506 ! |
|
507 |
|
508 testNumberLiteral5 |
|
509 self |
|
510 parse: '-0' |
|
511 rule: #numberLiteral |
|
512 ! |
|
513 |
|
514 testNumberLiteral6 |
|
515 self |
|
516 parse: '-0.1' |
|
517 rule: #numberLiteral |
|
518 ! |
|
519 |
|
520 testNumberLiteral7 |
|
521 self |
|
522 parse: '-123' |
|
523 rule: #numberLiteral |
|
524 ! |
|
525 |
|
526 testNumberLiteral8 |
|
527 self |
|
528 parse: '-123' |
|
529 rule: #numberLiteral |
|
530 ! |
|
531 |
|
532 testNumberLiteral9 |
|
533 self |
|
534 parse: '-123.456' |
|
535 rule: #numberLiteral |
|
536 ! |
|
537 |
|
538 testSpecialLiteral1 |
|
539 self |
|
540 parse: 'true' |
|
541 rule: #trueLiteral |
|
542 ! |
|
543 |
|
544 testSpecialLiteral2 |
|
545 self |
|
546 parse: 'false' |
|
547 rule: #falseLiteral |
|
548 ! |
|
549 |
|
550 testSpecialLiteral3 |
|
551 self |
|
552 parse: 'nil' |
|
553 rule: #nilLiteral |
|
554 ! |
|
555 |
|
556 testStringLiteral1 |
|
557 self |
|
558 parse: '''''' |
|
559 rule: #stringLiteral |
|
560 ! |
|
561 |
|
562 testStringLiteral2 |
|
563 self |
|
564 parse: '''ab''' |
|
565 rule: #stringLiteral |
|
566 ! |
|
567 |
|
568 testStringLiteral3 |
|
569 self |
|
570 parse: '''ab''''cd''' |
|
571 rule: #stringLiteral |
|
572 ! |
|
573 |
|
574 testSymbolLiteral1 |
|
575 self |
|
576 parse: '#foo' |
|
577 rule: #symbolLiteral |
|
578 ! |
|
579 |
|
580 testSymbolLiteral2 |
|
581 self |
|
582 parse: '#+' |
|
583 rule: #symbolLiteral |
|
584 ! |
|
585 |
|
586 testSymbolLiteral3 |
|
587 self |
|
588 parse: '#key:' |
|
589 rule: #symbolLiteral |
|
590 ! |
|
591 |
|
592 testSymbolLiteral4 |
|
593 self |
|
594 parse: '#key:value:' |
|
595 rule: #symbolLiteral |
|
596 ! |
|
597 |
|
598 testSymbolLiteral5 |
|
599 self |
|
600 parse: '#''testing-result''' |
|
601 rule: #symbolLiteral |
|
602 ! |
|
603 |
|
604 testSymbolLiteral6 |
|
605 PPSmalltalkGrammar allowUnderscoreAssignment ifFalse: [ |
|
606 self |
|
607 parse: '#__gen__binding' |
|
608 rule: #symbolLiteral ] |
|
609 ! |
|
610 |
|
611 testSymbolLiteral7 |
|
612 self |
|
613 parse: '# fucker' |
|
614 rule: #symbolLiteral |
|
615 ! |
|
616 |
|
617 testSymbolLiteral8 |
|
618 self |
|
619 parse: '##fucker' |
|
620 rule: #symbolLiteral |
|
621 ! |
|
622 |
|
623 testSymbolLiteral9 |
|
624 self |
|
625 parse: '## fucker' |
|
626 rule: #symbolLiteral |
|
627 ! ! |
|
628 |
|
629 !PPSmalltalkGrammarTests methodsFor:'testing-messages'! |
|
630 |
|
631 testBinaryExpression1 |
|
632 self |
|
633 parse: '1 + 2' |
|
634 rule: #expression |
|
635 ! |
|
636 |
|
637 testBinaryExpression2 |
|
638 self |
|
639 parse: '1 + 2 + 3' |
|
640 rule: #expression |
|
641 ! |
|
642 |
|
643 testBinaryExpression3 |
|
644 self |
|
645 parse: '1 // 2' |
|
646 rule: #expression |
|
647 ! |
|
648 |
|
649 testBinaryExpression4 |
|
650 self |
|
651 parse: '1 -- 2' |
|
652 rule: #expression |
|
653 ! |
|
654 |
|
655 testBinaryExpression5 |
|
656 self |
|
657 parse: '1 ==> 2' |
|
658 rule: #expression. |
|
659 ! |
|
660 |
|
661 testBinaryMethod1 |
|
662 self |
|
663 parse: '+ a' |
|
664 rule: #method |
|
665 ! |
|
666 |
|
667 testBinaryMethod2 |
|
668 self |
|
669 parse: '+ a | b |' |
|
670 rule: #method |
|
671 ! |
|
672 |
|
673 testBinaryMethod3 |
|
674 self |
|
675 parse: '+ a b' |
|
676 rule: #method |
|
677 ! |
|
678 |
|
679 testBinaryMethod4 |
|
680 self |
|
681 parse: '+ a | b | c' |
|
682 rule: #method |
|
683 ! |
|
684 |
|
685 testBinaryMethod5 |
|
686 self |
|
687 parse: '-- a' |
|
688 rule: #method |
|
689 ! |
|
690 |
|
691 testCascadeExpression1 |
|
692 self |
|
693 parse: '1 abs; negated' |
|
694 rule: #expression |
|
695 ! |
|
696 |
|
697 testCascadeExpression2 |
|
698 self |
|
699 parse: '1 abs negated; raisedTo: 12; negated' |
|
700 rule: #expression |
|
701 ! |
|
702 |
|
703 testCascadeExpression3 |
|
704 self |
|
705 parse: '1 + 2; - 3' |
|
706 rule: #expression |
|
707 ! |
|
708 |
|
709 testKeywordExpression1 |
|
710 self |
|
711 parse: '1 to: 2' |
|
712 rule: #expression |
|
713 ! |
|
714 |
|
715 testKeywordExpression2 |
|
716 self |
|
717 parse: '1 to: 2 by: 3' |
|
718 rule: #expression |
|
719 ! |
|
720 |
|
721 testKeywordExpression3 |
|
722 self |
|
723 parse: '1 to: 2 by: 3 do: 4' |
|
724 rule: #expression |
|
725 ! |
|
726 |
|
727 testKeywordMethod1 |
|
728 self |
|
729 parse: 'to: a' |
|
730 rule: #method |
|
731 ! |
|
732 |
|
733 testKeywordMethod2 |
|
734 self |
|
735 parse: 'to: a do: b | c |' |
|
736 rule: #method |
|
737 ! |
|
738 |
|
739 testKeywordMethod3 |
|
740 self |
|
741 parse: 'to: a do: b by: c d' |
|
742 rule: #method |
|
743 ! |
|
744 |
|
745 testKeywordMethod4 |
|
746 self |
|
747 parse: 'to: a do: b by: c | d | e' |
|
748 rule: #method |
|
749 ! |
|
750 |
|
751 testUnaryExpression1 |
|
752 self |
|
753 parse: '1 abs' |
|
754 rule: #expression |
|
755 ! |
|
756 |
|
757 testUnaryExpression2 |
|
758 self |
|
759 parse: '1 abs negated' |
|
760 rule: #expression |
|
761 ! |
|
762 |
|
763 testUnaryMethod1 |
|
764 self |
|
765 parse: 'abs' |
|
766 rule: #method |
|
767 ! |
|
768 |
|
769 testUnaryMethod2 |
|
770 self |
|
771 parse: 'abs | a |' |
|
772 rule: #method |
|
773 ! |
|
774 |
|
775 testUnaryMethod3 |
|
776 self |
|
777 parse: 'abs a' |
|
778 rule: #method |
|
779 ! |
|
780 |
|
781 testUnaryMethod4 |
|
782 self |
|
783 parse: 'abs | a | b' |
|
784 rule: #method |
|
785 ! |
|
786 |
|
787 testUnaryMethod5 |
|
788 self |
|
789 parse: 'abs | a |' |
|
790 rule: #method |
|
791 ! ! |
|
792 |
|
793 !PPSmalltalkGrammarTests methodsFor:'testing-pragmas'! |
|
794 |
|
795 testPragma1 |
|
796 self |
|
797 parse: 'method <foo>' |
|
798 rule: #method |
|
799 ! |
|
800 |
|
801 testPragma10 |
|
802 self |
|
803 parse: 'method <foo: bar>' |
|
804 rule: #method |
|
805 ! |
|
806 |
|
807 testPragma11 |
|
808 self |
|
809 parse: 'method <foo: true>' |
|
810 rule: #method |
|
811 ! |
|
812 |
|
813 testPragma12 |
|
814 self |
|
815 parse: 'method <foo: false>' |
|
816 rule: #method |
|
817 ! |
|
818 |
|
819 testPragma13 |
|
820 self |
|
821 parse: 'method <foo: nil>' |
|
822 rule: #method |
|
823 ! |
|
824 |
|
825 testPragma14 |
|
826 self |
|
827 parse: 'method <foo: ()>' |
|
828 rule: #method |
|
829 ! |
|
830 |
|
831 testPragma15 |
|
832 self |
|
833 parse: 'method <foo: #()>' |
|
834 rule: #method |
|
835 ! |
|
836 |
|
837 testPragma16 |
|
838 self |
|
839 parse: 'method < + 1 >' |
|
840 rule: #method |
|
841 ! |
|
842 |
|
843 testPragma2 |
|
844 self |
|
845 parse: 'method <foo> <bar>' |
|
846 rule: #method |
|
847 ! |
|
848 |
|
849 testPragma3 |
|
850 self |
|
851 parse: 'method | a | <foo>' |
|
852 rule: #method |
|
853 ! |
|
854 |
|
855 testPragma4 |
|
856 self |
|
857 parse: 'method <foo> | a |' |
|
858 rule: #method |
|
859 ! |
|
860 |
|
861 testPragma5 |
|
862 self |
|
863 parse: 'method <foo> | a | <bar>' |
|
864 rule: #method |
|
865 ! |
|
866 |
|
867 testPragma6 |
|
868 self |
|
869 parse: 'method <foo: 1>' |
|
870 rule: #method |
|
871 ! |
|
872 |
|
873 testPragma7 |
|
874 self |
|
875 parse: 'method <foo: 1.2>' |
|
876 rule: #method |
|
877 ! |
|
878 |
|
879 testPragma8 |
|
880 self |
|
881 parse: 'method <foo: ''bar''>' |
|
882 rule: #method |
|
883 ! |
|
884 |
|
885 testPragma9 |
|
886 self |
|
887 parse: 'method <foo: #''bar''>' |
|
888 rule: #method |
|
889 ! ! |
|
890 |
|
891 !PPSmalltalkGrammarTests class methodsFor:'documentation'! |
|
892 |
|
893 version_HG |
|
894 |
|
895 ^ '$Changeset: <not expanded> $' |
|
896 ! ! |
|
897 |