1 // Copyright 2021 The Tint Authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "src/ast/fallthrough_statement.h"
16 #include "src/writer/glsl/test_helper.h"
17
18 namespace tint {
19 namespace writer {
20 namespace glsl {
21 namespace {
22
23 using GlslGeneratorImplTest_Case = TestHelper;
24
TEST_F(GlslGeneratorImplTest_Case,Emit_Case)25 TEST_F(GlslGeneratorImplTest_Case, Emit_Case) {
26 auto* s = Switch(1, Case(Expr(5), Block(create<ast::BreakStatement>())),
27 DefaultCase());
28 WrapInFunction(s);
29
30 GeneratorImpl& gen = Build();
31
32 gen.increment_indent();
33
34 ASSERT_TRUE(gen.EmitCase(s->body[0])) << gen.error();
35 EXPECT_EQ(gen.result(), R"( case 5: {
36 break;
37 }
38 )");
39 }
40
TEST_F(GlslGeneratorImplTest_Case,Emit_Case_BreaksByDefault)41 TEST_F(GlslGeneratorImplTest_Case, Emit_Case_BreaksByDefault) {
42 auto* s = Switch(1, Case(Expr(5), Block()), DefaultCase());
43 WrapInFunction(s);
44
45 GeneratorImpl& gen = Build();
46
47 gen.increment_indent();
48
49 ASSERT_TRUE(gen.EmitCase(s->body[0])) << gen.error();
50 EXPECT_EQ(gen.result(), R"( case 5: {
51 break;
52 }
53 )");
54 }
55
TEST_F(GlslGeneratorImplTest_Case,Emit_Case_WithFallthrough)56 TEST_F(GlslGeneratorImplTest_Case, Emit_Case_WithFallthrough) {
57 auto* s = Switch(1, Case(Expr(5), Block(create<ast::FallthroughStatement>())),
58 DefaultCase());
59 WrapInFunction(s);
60
61 GeneratorImpl& gen = Build();
62
63 gen.increment_indent();
64
65 ASSERT_TRUE(gen.EmitCase(s->body[0])) << gen.error();
66 EXPECT_EQ(gen.result(), R"( case 5: {
67 /* fallthrough */
68 }
69 )");
70 }
71
TEST_F(GlslGeneratorImplTest_Case,Emit_Case_MultipleSelectors)72 TEST_F(GlslGeneratorImplTest_Case, Emit_Case_MultipleSelectors) {
73 auto* s =
74 Switch(1, Case({Expr(5), Expr(6)}, Block(create<ast::BreakStatement>())),
75 DefaultCase());
76 WrapInFunction(s);
77
78 GeneratorImpl& gen = Build();
79
80 gen.increment_indent();
81
82 ASSERT_TRUE(gen.EmitCase(s->body[0])) << gen.error();
83 EXPECT_EQ(gen.result(), R"( case 5:
84 case 6: {
85 break;
86 }
87 )");
88 }
89
TEST_F(GlslGeneratorImplTest_Case,Emit_Case_Default)90 TEST_F(GlslGeneratorImplTest_Case, Emit_Case_Default) {
91 auto* s = Switch(1, DefaultCase(Block(create<ast::BreakStatement>())));
92 WrapInFunction(s);
93
94 GeneratorImpl& gen = Build();
95
96 gen.increment_indent();
97
98 ASSERT_TRUE(gen.EmitCase(s->body[0])) << gen.error();
99 EXPECT_EQ(gen.result(), R"( default: {
100 break;
101 }
102 )");
103 }
104
105 } // namespace
106 } // namespace glsl
107 } // namespace writer
108 } // namespace tint
109