test: Add Build() method for tests using ast::Builder

This separates out the usage of the built module from the construction of the module.

Previously, we'd happily interleave generator testing with module construction statements. Once the AST / Program is made immutable, this will no longer be possible.

Bug: tint:390
Change-Id: Ib4538228e93ca816f5bb796d024f021116609213
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/38360
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/writer/msl/generator_impl_test.cc b/src/writer/msl/generator_impl_test.cc
index 69de899..42c1514 100644
--- a/src/writer/msl/generator_impl_test.cc
+++ b/src/writer/msl/generator_impl_test.cc
@@ -55,6 +55,8 @@
            });
   mod->AddFunction(func);
 
+  GeneratorImpl& gen = Build();
+
   ASSERT_TRUE(gen.Generate()) << gen.error();
   EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
 
@@ -66,17 +68,24 @@
 }
 
 TEST_F(MslGeneratorImplTest, InputStructName) {
+  GeneratorImpl& gen = Build();
+
   ASSERT_EQ(gen.generate_name("func_main_in"), "func_main_in");
 }
 
 TEST_F(MslGeneratorImplTest, InputStructName_ConflictWithExisting) {
+  GeneratorImpl& gen = Build();
+
   gen.namer_for_testing()->NameFor("func_main_out");
   ASSERT_EQ(gen.generate_name("func_main_out"), "func_main_out_0");
 }
 
 TEST_F(MslGeneratorImplTest, NameConflictWith_InputStructName) {
+  auto* ident = Expr("func_main_in");
+  GeneratorImpl& gen = Build();
+
   ASSERT_EQ(gen.generate_name("func_main_in"), "func_main_in");
-  ASSERT_TRUE(gen.EmitIdentifier(Expr("func_main_in")));
+  ASSERT_TRUE(gen.EmitIdentifier(ident));
   EXPECT_EQ(gen.result(), "func_main_in_0");
 }
 
@@ -92,6 +101,8 @@
 TEST_P(MslBuiltinConversionTest, Emit) {
   auto params = GetParam();
 
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(gen.builtin_to_attribute(params.builtin),
             std::string(params.attribute_name));
 }
@@ -113,31 +124,45 @@
 
 TEST_F(MslGeneratorImplTest, calculate_alignment_size_alias) {
   auto* alias = ty.alias("a", ty.f32);
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(4u, gen.calculate_alignment_size(alias));
 }
 
 TEST_F(MslGeneratorImplTest, calculate_alignment_size_array) {
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(4u * 4u, gen.calculate_alignment_size(ty.array<f32, 4>()));
 }
 
 TEST_F(MslGeneratorImplTest, calculate_alignment_size_bool) {
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(1u, gen.calculate_alignment_size(ty.bool_));
 }
 
 TEST_F(MslGeneratorImplTest, calculate_alignment_size_f32) {
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(4u, gen.calculate_alignment_size(ty.f32));
 }
 
 TEST_F(MslGeneratorImplTest, calculate_alignment_size_i32) {
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(4u, gen.calculate_alignment_size(ty.i32));
 }
 
 TEST_F(MslGeneratorImplTest, calculate_alignment_size_matrix) {
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(4u * 3u * 2u, gen.calculate_alignment_size(ty.mat3x2<f32>()));
 }
 
 TEST_F(MslGeneratorImplTest, calculate_alignment_size_pointer) {
   type::Pointer ptr(ty.bool_, ast::StorageClass::kPrivate);
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(0u, gen.calculate_alignment_size(&ptr));
 }
 
@@ -149,6 +174,9 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("S", str);
+
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(132u, gen.calculate_alignment_size(s));
 }
 
@@ -168,10 +196,15 @@
       ast::StructDecorationList{});
 
   auto* outer_s = ty.struct_("Outer", outer_str);
+
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(80u, gen.calculate_alignment_size(outer_s));
 }
 
 TEST_F(MslGeneratorImplTest, calculate_alignment_size_u32) {
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(4u, gen.calculate_alignment_size(ty.u32));
 }
 
@@ -188,6 +221,8 @@
   auto param = GetParam();
 
   type::Vector vec(ty.bool_, param.elements);
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
 }
 INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
@@ -201,6 +236,9 @@
   auto param = GetParam();
 
   type::Vector vec(ty.i32, param.elements);
+
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
 }
 INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
@@ -214,6 +252,8 @@
   auto param = GetParam();
 
   type::Vector vec(ty.u32, param.elements);
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
 }
 INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
@@ -227,6 +267,8 @@
   auto param = GetParam();
 
   type::Vector vec(ty.f32, param.elements);
+  GeneratorImpl& gen = Build();
+
   EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
 }
 INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,