|
82 | 82 | } |
83 | 83 | } |
84 | 84 |
|
| 85 | +func TestParserTypeShapeAllowsEnumFieldName(t *testing.T) { |
| 86 | + source := `def run(payload: { enum: string, nested: { enum: int } }) |
| 87 | + payload |
| 88 | +end` |
| 89 | + |
| 90 | + p := newParser(source) |
| 91 | + program, errs := p.ParseProgram() |
| 92 | + if len(errs) > 0 { |
| 93 | + t.Fatalf("expected no parse errors, got %v", errs) |
| 94 | + } |
| 95 | + if len(program.Statements) != 1 { |
| 96 | + t.Fatalf("expected 1 statement, got %d", len(program.Statements)) |
| 97 | + } |
| 98 | + fn, ok := program.Statements[0].(*FunctionStmt) |
| 99 | + if !ok { |
| 100 | + t.Fatalf("expected function statement, got %T", program.Statements[0]) |
| 101 | + } |
| 102 | + payloadType := fn.Params[0].Type |
| 103 | + if payloadType == nil || payloadType.Kind != TypeShape { |
| 104 | + t.Fatalf("expected shape payload type, got %#v", payloadType) |
| 105 | + } |
| 106 | + if field, ok := payloadType.Shape["enum"]; !ok || field.Kind != TypeString { |
| 107 | + t.Fatalf("expected enum string field, got %#v", field) |
| 108 | + } |
| 109 | + nestedType, ok := payloadType.Shape["nested"] |
| 110 | + if !ok || nestedType.Kind != TypeShape { |
| 111 | + t.Fatalf("expected nested shape field, got %#v", nestedType) |
| 112 | + } |
| 113 | + if field, ok := nestedType.Shape["enum"]; !ok || field.Kind != TypeInt { |
| 114 | + t.Fatalf("expected nested enum int field, got %#v", field) |
| 115 | + } |
| 116 | +} |
| 117 | + |
85 | 118 | func TestParserTypeSyntaxTypedBlockParameters(t *testing.T) { |
86 | 119 | source := `def run(values) |
87 | 120 | values.map do |value: int | string, label: string?| |
|
0 commit comments