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