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 <sarahmashay@google.com>
diff --git a/src/ast/struct_member.cc b/src/ast/struct_member.cc
index 7642ec2..2a95131 100644
--- a/src/ast/struct_member.cc
+++ b/src/ast/struct_member.cc
@@ -36,11 +36,13 @@
 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 9451d99..cbe4ef9 100644
--- a/src/ast/struct_member_test.cc
+++ b/src/ast/struct_member_test.cc
@@ -69,6 +69,16 @@
   EXPECT_FALSE(st.IsValid());
 }
 
+TEST_F(StructMemberTest, IsValid_Null_Decoration) {
+  type::I32Type i32;
+  std::vector<std::unique_ptr<StructMemberDecoration>> decorations;
+  decorations.emplace_back(std::make_unique<StructMemberOffsetDecoration>(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<std::unique_ptr<StructMemberDecoration>> decorations;
@@ -76,16 +86,16 @@
 
   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