• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/reader/wgsl/parser_impl_test_helper.h"
16 
17 namespace tint {
18 namespace reader {
19 namespace wgsl {
20 namespace {
21 
22 using ParserImplReservedKeywordTest = ParserImplTestWithParam<std::string>;
TEST_P(ParserImplReservedKeywordTest,Function)23 TEST_P(ParserImplReservedKeywordTest, Function) {
24   auto name = GetParam();
25   auto p = parser("fn " + name + "() {}");
26   EXPECT_FALSE(p->Parse());
27   EXPECT_TRUE(p->has_error());
28   EXPECT_EQ(p->error(), "1:4: '" + name + "' is a reserved keyword");
29 }
TEST_P(ParserImplReservedKeywordTest,ModuleLet)30 TEST_P(ParserImplReservedKeywordTest, ModuleLet) {
31   auto name = GetParam();
32   auto p = parser("let " + name + " : i32 = 1;");
33   EXPECT_FALSE(p->Parse());
34   EXPECT_TRUE(p->has_error());
35   EXPECT_EQ(p->error(), "1:5: '" + name + "' is a reserved keyword");
36 }
TEST_P(ParserImplReservedKeywordTest,ModuleVar)37 TEST_P(ParserImplReservedKeywordTest, ModuleVar) {
38   auto name = GetParam();
39   auto p = parser("var " + name + " : i32 = 1;");
40   EXPECT_FALSE(p->Parse());
41   EXPECT_TRUE(p->has_error());
42   EXPECT_EQ(p->error(), "1:5: '" + name + "' is a reserved keyword");
43 }
TEST_P(ParserImplReservedKeywordTest,FunctionLet)44 TEST_P(ParserImplReservedKeywordTest, FunctionLet) {
45   auto name = GetParam();
46   auto p = parser("fn f() { let " + name + " : i32 = 1; }");
47   EXPECT_FALSE(p->Parse());
48   EXPECT_TRUE(p->has_error());
49   EXPECT_EQ(p->error(), "1:14: '" + name + "' is a reserved keyword");
50 }
TEST_P(ParserImplReservedKeywordTest,FunctionVar)51 TEST_P(ParserImplReservedKeywordTest, FunctionVar) {
52   auto name = GetParam();
53   auto p = parser("fn f() { var " + name + " : i32 = 1; }");
54   EXPECT_FALSE(p->Parse());
55   EXPECT_TRUE(p->has_error());
56   EXPECT_EQ(p->error(), "1:14: '" + name + "' is a reserved keyword");
57 }
TEST_P(ParserImplReservedKeywordTest,FunctionParam)58 TEST_P(ParserImplReservedKeywordTest, FunctionParam) {
59   auto name = GetParam();
60   auto p = parser("fn f(" + name + " : i32) {}");
61   EXPECT_FALSE(p->Parse());
62   EXPECT_TRUE(p->has_error());
63   EXPECT_EQ(p->error(), "1:6: '" + name + "' is a reserved keyword");
64 }
TEST_P(ParserImplReservedKeywordTest,Struct)65 TEST_P(ParserImplReservedKeywordTest, Struct) {
66   auto name = GetParam();
67   auto p = parser("struct " + name + " {};");
68   EXPECT_FALSE(p->Parse());
69   EXPECT_TRUE(p->has_error());
70   EXPECT_EQ(p->error(), "1:8: '" + name + "' is a reserved keyword");
71 }
TEST_P(ParserImplReservedKeywordTest,StructMember)72 TEST_P(ParserImplReservedKeywordTest, StructMember) {
73   auto name = GetParam();
74   auto p = parser("struct S { " + name + " : i32; };");
75   EXPECT_FALSE(p->Parse());
76   EXPECT_TRUE(p->has_error());
77   EXPECT_EQ(p->error(), "1:12: '" + name + "' is a reserved keyword");
78 }
TEST_P(ParserImplReservedKeywordTest,Alias)79 TEST_P(ParserImplReservedKeywordTest, Alias) {
80   auto name = GetParam();
81   auto p = parser("type " + name + " = i32;");
82   EXPECT_FALSE(p->Parse());
83   EXPECT_TRUE(p->has_error());
84   EXPECT_EQ(p->error(), "1:6: '" + name + "' is a reserved keyword");
85 }
86 INSTANTIATE_TEST_SUITE_P(ParserImplReservedKeywordTest,
87                          ParserImplReservedKeywordTest,
88                          testing::Values("asm",
89                                          "bf16",
90                                          "const",
91                                          "do",
92                                          "enum",
93                                          "f16",
94                                          "f64",
95                                          "handle",
96                                          "i8",
97                                          "i16",
98                                          "i64",
99                                          "mat",
100                                          "premerge",
101                                          "regardless",
102                                          "typedef",
103                                          "u8",
104                                          "u16",
105                                          "u64",
106                                          "unless",
107                                          "using",
108                                          "vec",
109                                          "void",
110                                          "while"));
111 
112 }  // namespace
113 }  // namespace wgsl
114 }  // namespace reader
115 }  // namespace tint
116