# file : tests/switch/testscript # copyright : Copyright (c) 2014-2019 Code Synthesis Ltd # license : MIT; see accompanying LICENSE file # Test switch. .include ../common.testscript : basics : $* <>EOO for i: 1 2 3 4 5 { switch $i { case 1 print 1 case 2 { print 2 } case 0 case 3 print 0,3 case 0|4 print 0,4 default print d } } EOI 1 2 0,3 0,4 d EOO : basics-multiple : $* <>EOO for i: 1 2 3 4 5 { switch $i, $i { case 1, 1 print 1 case 1, 2 assert case 2 { print 2 } case 3, 3 case 0, 0 print 3,0 case 4|0, 0|4|0 print 4,0 default print d } } EOI 1 2 3,0 4,0 d EOO : basics-matcher : $* <>EOO for i: 123 abc { switch $i: regex.match { case '[0-9]+' print n case '[a-z]+' print a } } EOI n a EOO : basics-matcher-arg : $* <>EOO for i: abc ABC aBC { switch $i: regex.match icase { case '[a-z]+' print a } } EOI a a a EOO : basics-matcher-multiple : $* <>EOO for i: 123 abc { switch $i: regex.match, $i: regex.match { case '[0-9]+', '[0-9]+' print nn case '[0-9]+', '[a-z]+' print na case '[a-z]+', '[0-9]+' print an case '[a-z]+', '[a-z]+' print aa } } EOI nn aa EOO #\ : basics-extractor : $* <>EOO for i: 123 abc { switch $i: regex.extract { case '([0-9]+)' print n default print d } } EOI n d EOO #\ : empty : $* <>EOO switch 1 { default print d } EOI d EOO : nested : $* <>EOO switch 1 { case 1 { switch 2 { case 2 print 2 case 1 assert } } case 2 assert } EOI 2 EOO : case-default : $* <>EOO for i: 1 2 { switch $i { case 1 default print 1,d } } EOI 1,d 1,d EOO : case-outside : $* <>EOE != 0 case 1 EOI :1:1: error: case outside switch EOE : default-before-case : $* <>EOE != 0 switch 1 { default x = 1 case 2 x = 2 } EOI :5:3: error: case after default info: default must be last in the switch block EOE : default-multiple : $* <>EOE != 0 switch 1 { default x = 1 default x = 2 } EOI :5:3: error: multiple defaults EOE : empty-switch : $* <>EOE != 0 switch { } EOI :1:7: error: expected switch expression instead of EOE : empty-case : $* <>EOE != 0 switch 1 { case x = 1 } EOI :3:7: error: expected case pattern instead of EOE : junk-in-switch : $* <>EOE != 0 switch 1 { x = 0 } EOI :3:3: error: expected case or default instead of 'x' EOE : multiple-more-patterns : $* <>EOE != 0 switch 1 { case 1, 1 } EOI :3:11: error: more patterns than switch expressions EOE : matcher-missing : $* <>EOE != 0 switch 1: { case 1 x = 1 } EOI :1:10: error: expected function name instead of EOE : matcher-bad-name : $* <>EOE != 0 switch 1: file{x} { case 1 x = 1 } EOI :1:11: error: function name expected instead of file{x} EOE : matcher-unknown : $* <>EOE != 0 switch 1: no_such_matcher { case 1 x = 1 } EOI :3:8: error: unmatched call to no_such_matcher(, ) EOE : match-extraction : $* <>EOE != 0 switch 1 { case 1: y x = $y } EOI :3:9: error: unexpected ':' (match extraction is not yet supported) EOE