1 // Copyright 2020 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/struct_block_decoration.h"
16 #include "src/reader/wgsl/parser_impl_test_helper.h"
17
18 namespace tint {
19 namespace reader {
20 namespace wgsl {
21 namespace {
22
TEST_F(ParserImplTest,DecorationDecl_Parses)23 TEST_F(ParserImplTest, DecorationDecl_Parses) {
24 auto p = parser("[[block]]");
25 auto decos = p->decoration_list();
26 EXPECT_FALSE(p->has_error());
27 EXPECT_FALSE(decos.errored);
28 EXPECT_TRUE(decos.matched);
29 ASSERT_EQ(decos.value.size(), 1u);
30 auto* struct_deco = decos.value[0]->As<ast::Decoration>();
31 EXPECT_TRUE(struct_deco->Is<ast::StructBlockDecoration>());
32 }
33
TEST_F(ParserImplTest,DecorationDecl_MissingAttrRight)34 TEST_F(ParserImplTest, DecorationDecl_MissingAttrRight) {
35 auto p = parser("[[block");
36 auto decos = p->decoration_list();
37 EXPECT_TRUE(p->has_error());
38 EXPECT_TRUE(decos.errored);
39 EXPECT_FALSE(decos.matched);
40 EXPECT_TRUE(decos.value.empty());
41 EXPECT_EQ(p->error(), "1:8: expected ']]' for decoration list");
42 }
43
TEST_F(ParserImplTest,DecorationDecl_InvalidDecoration)44 TEST_F(ParserImplTest, DecorationDecl_InvalidDecoration) {
45 auto p = parser("[[invalid]]");
46 auto decos = p->decoration_list();
47 EXPECT_TRUE(p->has_error());
48 EXPECT_TRUE(decos.errored);
49 EXPECT_FALSE(decos.matched);
50 EXPECT_TRUE(decos.value.empty());
51 }
52
53 } // namespace
54 } // namespace wgsl
55 } // namespace reader
56 } // namespace tint
57