From 097c3a544d02caefe2e4d812405c97300abbb0b3 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Tue, 17 Mar 2020 03:53:06 +0000 Subject: [PATCH] Add more StructMember tests. This Cl adds more IsValid tests to the StructMember AST node. Bug: tint:11 Change-Id: I7fec6fb5e96f025735fd444c74f97d4ded8b3ae6 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/16671 Reviewed-by: Sarah Mashayekhi --- src/ast/struct_member.cc | 8 +++++--- src/ast/struct_member_test.cc | 18 ++++++++++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/ast/struct_member.cc b/src/ast/struct_member.cc index 7642ec2447..2a95131917 100644 --- a/src/ast/struct_member.cc +++ b/src/ast/struct_member.cc @@ -36,11 +36,13 @@ StructMember::StructMember( StructMember::~StructMember() = default; bool StructMember::IsValid() const { - if (name_.empty()) { + if (name_.empty() || type_ == nullptr) { return false; } - if (type_ == nullptr) { - return false; + for (const auto& deco : decorations_) { + if (deco == nullptr) { + return false; + } } return true; } diff --git a/src/ast/struct_member_test.cc b/src/ast/struct_member_test.cc index 9451d9991d..cbe4ef9d44 100644 --- a/src/ast/struct_member_test.cc +++ b/src/ast/struct_member_test.cc @@ -69,6 +69,16 @@ TEST_F(StructMemberTest, IsValid_NullType) { EXPECT_FALSE(st.IsValid()); } +TEST_F(StructMemberTest, IsValid_Null_Decoration) { + type::I32Type i32; + std::vector> decorations; + decorations.emplace_back(std::make_unique(4)); + decorations.push_back(nullptr); + + StructMember st{"a", &i32, std::move(decorations)}; + EXPECT_FALSE(st.IsValid()); +} + TEST_F(StructMemberTest, ToStr) { type::I32Type i32; std::vector> decorations; @@ -76,16 +86,16 @@ TEST_F(StructMemberTest, ToStr) { StructMember st{"a", &i32, std::move(decorations)}; std::ostringstream out; - st.to_str(out, 0); - EXPECT_EQ(out.str(), "StructMember{[[ offset 4 ]] a: __i32}\n"); + st.to_str(out, 2); + EXPECT_EQ(out.str(), " StructMember{[[ offset 4 ]] a: __i32}\n"); } TEST_F(StructMemberTest, ToStrNoDecorations) { type::I32Type i32; StructMember st{"a", &i32, {}}; std::ostringstream out; - st.to_str(out, 0); - EXPECT_EQ(out.str(), "StructMember{a: __i32}\n"); + st.to_str(out, 2); + EXPECT_EQ(out.str(), " StructMember{a: __i32}\n"); } } // namespace ast