diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e4f471878d..8b89ac31f8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -203,6 +203,7 @@ set(TINT_TEST_SRCS ast/call_expression_test.cc ast/case_statement_test.cc ast/cast_expression_test.cc + ast/const_initializer_expression_test.cc ast/entry_point_test.cc ast/import_test.cc ast/int_literal_test.cc diff --git a/src/ast/const_initializer_expression.cc b/src/ast/const_initializer_expression.cc index 11f18808b2..101bb75c5c 100644 --- a/src/ast/const_initializer_expression.cc +++ b/src/ast/const_initializer_expression.cc @@ -17,6 +17,9 @@ namespace tint { namespace ast { +ConstInitializerExpression::ConstInitializerExpression() + : InitializerExpression() {} + ConstInitializerExpression::ConstInitializerExpression( std::unique_ptr literal) : InitializerExpression(), literal_(std::move(literal)) {} diff --git a/src/ast/const_initializer_expression.h b/src/ast/const_initializer_expression.h index 31e2d440a7..46af8f45cc 100644 --- a/src/ast/const_initializer_expression.h +++ b/src/ast/const_initializer_expression.h @@ -27,6 +27,8 @@ namespace ast { /// A constant initializer class ConstInitializerExpression : public InitializerExpression { public: + /// Constructor + ConstInitializerExpression(); /// Constructor /// @param literal the const literal explicit ConstInitializerExpression(std::unique_ptr literal); diff --git a/src/ast/const_initializer_expression_test.cc b/src/ast/const_initializer_expression_test.cc new file mode 100644 index 0000000000..9098a0cb16 --- /dev/null +++ b/src/ast/const_initializer_expression_test.cc @@ -0,0 +1,61 @@ +// Copyright 2020 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "src/ast/const_initializer_expression.h" + +#include "gtest/gtest.h" +#include "src/ast/bool_literal.h" + +namespace tint { +namespace ast { + +using ConstInitializerExpressionTest = testing::Test; + +TEST_F(ConstInitializerExpressionTest, Creation) { + auto b = std::make_unique(true); + auto b_ptr = b.get(); + ConstInitializerExpression c(std::move(b)); + EXPECT_EQ(c.literal(), b_ptr); +} + +TEST_F(ConstInitializerExpressionTest, Creation_WithSource) { + auto b = std::make_unique(true); + ConstInitializerExpression c(Source{20, 2}, std::move(b)); + auto src = c.source(); + EXPECT_EQ(src.line, 20); + EXPECT_EQ(src.column, 2); +} + +TEST_F(ConstInitializerExpressionTest, IsValid) { + auto b = std::make_unique(true); + ConstInitializerExpression c(std::move(b)); + EXPECT_TRUE(c.IsValid()); +} + +TEST_F(ConstInitializerExpressionTest, IsValid_MissingLiteral) { + ConstInitializerExpression c; + EXPECT_FALSE(c.IsValid()); +} + +TEST_F(ConstInitializerExpressionTest, ToStr) { + auto b = std::make_unique(true); + ConstInitializerExpression c(std::move(b)); + std::ostringstream out; + c.to_str(out, 2); + EXPECT_EQ(out.str(), R"( ConstInitializer{true} +)"); +} + +} // namespace ast +} // namespace tint