• 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/reader/wgsl/parser_impl_test_helper.h"
16 
17 namespace tint {
18 namespace reader {
19 namespace wgsl {
20 namespace {
21 
TEST_F(ParserImplTest,ArgumentExpressionList_Parses)22 TEST_F(ParserImplTest, ArgumentExpressionList_Parses) {
23   auto p = parser("(a)");
24   auto e = p->expect_argument_expression_list("argument list");
25   ASSERT_FALSE(p->has_error()) << p->error();
26   ASSERT_FALSE(e.errored);
27 
28   ASSERT_EQ(e.value.size(), 1u);
29   ASSERT_TRUE(e.value[0]->Is<ast::IdentifierExpression>());
30 }
31 
TEST_F(ParserImplTest,ArgumentExpressionList_ParsesEmptyList)32 TEST_F(ParserImplTest, ArgumentExpressionList_ParsesEmptyList) {
33   auto p = parser("()");
34   auto e = p->expect_argument_expression_list("argument list");
35   ASSERT_FALSE(p->has_error()) << p->error();
36   ASSERT_FALSE(e.errored);
37 
38   ASSERT_EQ(e.value.size(), 0u);
39 }
40 
TEST_F(ParserImplTest,ArgumentExpressionList_ParsesMultiple)41 TEST_F(ParserImplTest, ArgumentExpressionList_ParsesMultiple) {
42   auto p = parser("(a, -33, 1+2)");
43   auto e = p->expect_argument_expression_list("argument list");
44   ASSERT_FALSE(p->has_error()) << p->error();
45   ASSERT_FALSE(e.errored);
46 
47   ASSERT_EQ(e.value.size(), 3u);
48   ASSERT_TRUE(e.value[0]->Is<ast::IdentifierExpression>());
49   ASSERT_TRUE(e.value[1]->Is<ast::LiteralExpression>());
50   ASSERT_TRUE(e.value[2]->Is<ast::BinaryExpression>());
51 }
52 
TEST_F(ParserImplTest,ArgumentExpressionList_TrailingComma)53 TEST_F(ParserImplTest, ArgumentExpressionList_TrailingComma) {
54   auto p = parser("(a, 42,)");
55   auto e = p->expect_argument_expression_list("argument list");
56   ASSERT_FALSE(p->has_error()) << p->error();
57   ASSERT_FALSE(e.errored);
58 
59   ASSERT_EQ(e.value.size(), 2u);
60   ASSERT_TRUE(e.value[0]->Is<ast::IdentifierExpression>());
61   ASSERT_TRUE(e.value[1]->Is<ast::LiteralExpression>());
62 }
63 
TEST_F(ParserImplTest,ArgumentExpressionList_HandlesMissingLeftParen)64 TEST_F(ParserImplTest, ArgumentExpressionList_HandlesMissingLeftParen) {
65   auto p = parser("a)");
66   auto e = p->expect_argument_expression_list("argument list");
67   ASSERT_TRUE(p->has_error());
68   ASSERT_TRUE(e.errored);
69   EXPECT_EQ(p->error(), "1:1: expected '(' for argument list");
70 }
71 
TEST_F(ParserImplTest,ArgumentExpressionList_HandlesMissingRightParen)72 TEST_F(ParserImplTest, ArgumentExpressionList_HandlesMissingRightParen) {
73   auto p = parser("(a");
74   auto e = p->expect_argument_expression_list("argument list");
75   ASSERT_TRUE(p->has_error());
76   ASSERT_TRUE(e.errored);
77   EXPECT_EQ(p->error(), "1:3: expected ')' for argument list");
78 }
79 
TEST_F(ParserImplTest,ArgumentExpressionList_HandlesMissingExpression_0)80 TEST_F(ParserImplTest, ArgumentExpressionList_HandlesMissingExpression_0) {
81   auto p = parser("(,)");
82   auto e = p->expect_argument_expression_list("argument list");
83   ASSERT_TRUE(p->has_error());
84   ASSERT_TRUE(e.errored);
85   EXPECT_EQ(p->error(), "1:2: expected ')' for argument list");
86 }
87 
TEST_F(ParserImplTest,ArgumentExpressionList_HandlesMissingExpression_1)88 TEST_F(ParserImplTest, ArgumentExpressionList_HandlesMissingExpression_1) {
89   auto p = parser("(a, ,)");
90   auto e = p->expect_argument_expression_list("argument list");
91   ASSERT_TRUE(p->has_error());
92   ASSERT_TRUE(e.errored);
93   EXPECT_EQ(p->error(), "1:5: expected ')' for argument list");
94 }
95 
TEST_F(ParserImplTest,ArgumentExpressionList_HandlesInvalidExpression)96 TEST_F(ParserImplTest, ArgumentExpressionList_HandlesInvalidExpression) {
97   auto p = parser("(if(a) {})");
98   auto e = p->expect_argument_expression_list("argument list");
99   ASSERT_TRUE(p->has_error());
100   ASSERT_TRUE(e.errored);
101   EXPECT_EQ(p->error(), "1:2: expected ')' for argument list");
102 }
103 
104 }  // namespace
105 }  // namespace wgsl
106 }  // namespace reader
107 }  // namespace tint
108