• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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