1 # spec/oil-case
2
3 #### case syntax, oneline
4 const x = "header.h"
5 case (x) {
6 *.h | *.cc { echo C++ }
7 *.py { echo Python }
8 }
9 ## status: 0
10 ## STDOUT:
11 C++
12 ## END
13
14 #### case syntax, multiline
15 const x = "hello.py"
16 case (x) {
17 *.h | *.cc {
18 echo C++
19 }
20 *.py {
21 echo Python
22 }
23 }
24 ## status: 0
25 ## STDOUT:
26 Python
27 ## END
28
29 #### case syntax, simple expressions
30 const x = 3
31 case (x) {
32 (3) { echo three }
33 (4) { echo four }
34 }
35 ## status: 0
36 ## STDOUT:
37 three
38 ## END
39
40 #### case syntax, complex expressions
41 const x = 3
42 case (x) {
43 (1 + 2) { echo three }
44 (2 + 2) { echo four }
45 }
46 ## status: 2
47 ## STDOUT:
48 ## END
49
50 #### case semantics, no match
51 const x = 2
52 case (x) {
53 (3) { echo three }
54 (4) { echo four }
55 }
56 ## status: 0
57 ## STDOUT:
58 ## END
59
60 #### case syntax, eggex
61 const x = "main.cc"
62 case (x) {
63 / dot* '.py' / {
64 echo Python
65 }
66 / dot* ('.cc' | '.h') / {
67 echo C++
68 }
69 }
70 ## status: 2
71 ## STDOUT:
72 ## END
73
74 #### empty case statement
75 const x = ""
76 case (x) { }
77 ## status: 0
78 ## STDOUT:
79 ## END
80
81 #### typed args
82 const x = "0"
83 case (x) {
84 (0) { echo int }
85 ("0") { echo string }
86 }
87
88 # FIXME: stdout should be "string", but right now it is "int"
89
90 ## status: 0
91 ## STDOUT:
92 int
93 ## END