diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index 47995d1..ae98f19 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -43,10 +43,18 @@
 namespace tint {
 namespace inspector {
 
-Inspector::Inspector(ast::Module& module)
-    : module_(module), namer_(std::make_unique<UnsafeNamer>(&module)) {}
+Inspector::Inspector(ast::Module& module, Namer* namer)
+    : module_(module), namer_(namer), namer_is_owned_(false) {}
 
-Inspector::~Inspector() = default;
+Inspector::Inspector(ast::Module& module)
+    : module_(module),
+      namer_(new UnsafeNamer(&module)),
+      namer_is_owned_(true) {}
+
+Inspector::~Inspector() {
+  if (namer_is_owned_)
+    delete namer_;
+}
 
 std::vector<EntryPoint> Inspector::GetEntryPoints() {
   std::vector<EntryPoint> result;
diff --git a/src/inspector/inspector.h b/src/inspector/inspector.h
index ea82e1b..4a17b8d 100644
--- a/src/inspector/inspector.h
+++ b/src/inspector/inspector.h
@@ -73,6 +73,10 @@
  public:
   /// Constructor
   /// @param module Shader module to extract information from.
+  /// @param namer the namer to use with the inspector
+  Inspector(ast::Module& module, Namer* namer);
+  /// Constructor
+  /// @param module Shader module to extract information from.
   explicit Inspector(ast::Module& module);
   ~Inspector();
 
@@ -129,7 +133,8 @@
 
  private:
   const ast::Module& module_;
-  std::unique_ptr<Namer> namer_;
+  Namer* namer_ = nullptr;
+  bool namer_is_owned_ = false;
   std::string error_;
 
   /// @param name name of the entry point to find
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc
index 4de2319..e9357b4 100644
--- a/src/inspector/inspector_test.cc
+++ b/src/inspector/inspector_test.cc
@@ -61,6 +61,7 @@
 #include "src/ast/variable_decoration.h"
 #include "src/ast/workgroup_decoration.h"
 #include "src/type_determiner.h"
+#include "src/writer/test_namer.h"
 #include "tint/tint.h"
 
 namespace tint {
@@ -71,7 +72,8 @@
  public:
   InspectorHelper()
       : td_(std::make_unique<TypeDeterminer>(mod)),
-        inspector_(std::make_unique<Inspector>(*mod)),
+        namer_(mod),
+        inspector_(std::make_unique<Inspector>(*mod, &namer_)),
         sampler_type_(ast::type::SamplerKind::kSampler),
         comparison_sampler_type_(ast::type::SamplerKind::kComparisonSampler) {}
 
@@ -639,6 +641,7 @@
 
  private:
   std::unique_ptr<TypeDeterminer> td_;
+  writer::TestNamer namer_;
   std::unique_ptr<Inspector> inspector_;
 
   ast::type::Sampler sampler_type_;
@@ -720,14 +723,12 @@
              });
   mod->AddFunction(foo);
 
-  // TODO(dsinclair): Update to run the namer transform when available.
-
   auto result = inspector()->GetEntryPoints();
   ASSERT_FALSE(inspector()->has_error()) << inspector()->error();
 
   ASSERT_EQ(1u, result.size());
   EXPECT_EQ("foo", result[0].name);
-  EXPECT_EQ("foo", result[0].remapped_name);
+  EXPECT_EQ("test_foo", result[0].remapped_name);
   EXPECT_EQ(ast::PipelineStage::kVertex, result[0].stage);
 }
 
@@ -744,17 +745,15 @@
              });
   mod->AddFunction(bar);
 
-  // TODO(dsinclair): Update to run the namer transform when available.
-
   auto result = inspector()->GetEntryPoints();
   ASSERT_FALSE(inspector()->has_error()) << inspector()->error();
 
   ASSERT_EQ(2u, result.size());
   EXPECT_EQ("foo", result[0].name);
-  EXPECT_EQ("foo", result[0].remapped_name);
+  EXPECT_EQ("test_foo", result[0].remapped_name);
   EXPECT_EQ(ast::PipelineStage::kVertex, result[0].stage);
   EXPECT_EQ("bar", result[1].name);
-  EXPECT_EQ("bar", result[1].remapped_name);
+  EXPECT_EQ("test_bar", result[1].remapped_name);
   EXPECT_EQ(ast::PipelineStage::kCompute, result[1].stage);
 }
 
@@ -776,17 +775,15 @@
       });
   mod->AddFunction(bar);
 
-  // TODO(dsinclair): Update to run the namer transform when available.
-
   auto result = inspector()->GetEntryPoints();
   EXPECT_FALSE(inspector()->has_error());
 
   ASSERT_EQ(2u, result.size());
   EXPECT_EQ("foo", result[0].name);
-  EXPECT_EQ("foo", result[0].remapped_name);
+  EXPECT_EQ("test_foo", result[0].remapped_name);
   EXPECT_EQ(ast::PipelineStage::kVertex, result[0].stage);
   EXPECT_EQ("bar", result[1].name);
-  EXPECT_EQ("bar", result[1].remapped_name);
+  EXPECT_EQ("test_bar", result[1].remapped_name);
   EXPECT_EQ(ast::PipelineStage::kFragment, result[1].stage);
 }
 
@@ -865,9 +862,9 @@
   ASSERT_EQ(1u, result.size());
 
   ASSERT_EQ(1u, result[0].input_variables.size());
-  EXPECT_EQ("in_var", result[0].input_variables[0]);
+  EXPECT_EQ("test_in_var", result[0].input_variables[0]);
   ASSERT_EQ(1u, result[0].output_variables.size());
-  EXPECT_EQ("out_var", result[0].output_variables[0]);
+  EXPECT_EQ("test_out_var", result[0].output_variables[0]);
 }
 
 TEST_F(InspectorGetEntryPointTest, FunctionInOutVariables) {
@@ -892,9 +889,9 @@
   ASSERT_EQ(1u, result.size());
 
   ASSERT_EQ(1u, result[0].input_variables.size());
-  EXPECT_EQ("in_var", result[0].input_variables[0]);
+  EXPECT_EQ("test_in_var", result[0].input_variables[0]);
   ASSERT_EQ(1u, result[0].output_variables.size());
-  EXPECT_EQ("out_var", result[0].output_variables[0]);
+  EXPECT_EQ("test_out_var", result[0].output_variables[0]);
 }
 
 TEST_F(InspectorGetEntryPointTest, RepeatedInOutVariables) {
@@ -919,9 +916,9 @@
   ASSERT_EQ(1u, result.size());
 
   ASSERT_EQ(1u, result[0].input_variables.size());
-  EXPECT_EQ("in_var", result[0].input_variables[0]);
+  EXPECT_EQ("test_in_var", result[0].input_variables[0]);
   ASSERT_EQ(1u, result[0].output_variables.size());
-  EXPECT_EQ("out_var", result[0].output_variables[0]);
+  EXPECT_EQ("test_out_var", result[0].output_variables[0]);
 }
 
 TEST_F(InspectorGetEntryPointTest, EntryPointMultipleInOutVariables) {
@@ -942,11 +939,11 @@
   ASSERT_EQ(1u, result.size());
 
   ASSERT_EQ(2u, result[0].input_variables.size());
-  EXPECT_TRUE(ContainsString(result[0].input_variables, "in_var"));
-  EXPECT_TRUE(ContainsString(result[0].input_variables, "in2_var"));
+  EXPECT_TRUE(ContainsString(result[0].input_variables, "test_in_var"));
+  EXPECT_TRUE(ContainsString(result[0].input_variables, "test_in2_var"));
   ASSERT_EQ(2u, result[0].output_variables.size());
-  EXPECT_TRUE(ContainsString(result[0].output_variables, "out_var"));
-  EXPECT_TRUE(ContainsString(result[0].output_variables, "out2_var"));
+  EXPECT_TRUE(ContainsString(result[0].output_variables, "test_out_var"));
+  EXPECT_TRUE(ContainsString(result[0].output_variables, "test_out2_var"));
 }
 
 TEST_F(InspectorGetEntryPointTest, FunctionMultipleInOutVariables) {
@@ -971,11 +968,11 @@
   ASSERT_EQ(1u, result.size());
 
   ASSERT_EQ(2u, result[0].input_variables.size());
-  EXPECT_TRUE(ContainsString(result[0].input_variables, "in_var"));
-  EXPECT_TRUE(ContainsString(result[0].input_variables, "in2_var"));
+  EXPECT_TRUE(ContainsString(result[0].input_variables, "test_in_var"));
+  EXPECT_TRUE(ContainsString(result[0].input_variables, "test_in2_var"));
   ASSERT_EQ(2u, result[0].output_variables.size());
-  EXPECT_TRUE(ContainsString(result[0].output_variables, "out_var"));
-  EXPECT_TRUE(ContainsString(result[0].output_variables, "out2_var"));
+  EXPECT_TRUE(ContainsString(result[0].output_variables, "test_out_var"));
+  EXPECT_TRUE(ContainsString(result[0].output_variables, "test_out2_var"));
 }
 
 TEST_F(InspectorGetEntryPointTest, MultipleEntryPointsInOutVariables) {
@@ -997,26 +994,24 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  // TODO(dsinclair): Update to run the namer transform when available.
-
   auto result = inspector()->GetEntryPoints();
   ASSERT_FALSE(inspector()->has_error()) << inspector()->error();
 
   ASSERT_EQ(2u, result.size());
 
   ASSERT_EQ("foo", result[0].name);
-  ASSERT_EQ("foo", result[0].remapped_name);
+  ASSERT_EQ("test_foo", result[0].remapped_name);
   ASSERT_EQ(1u, result[0].input_variables.size());
-  EXPECT_EQ("in_var", result[0].input_variables[0]);
+  EXPECT_EQ("test_in_var", result[0].input_variables[0]);
   ASSERT_EQ(1u, result[0].output_variables.size());
-  EXPECT_EQ("out2_var", result[0].output_variables[0]);
+  EXPECT_EQ("test_out2_var", result[0].output_variables[0]);
 
   ASSERT_EQ("bar", result[1].name);
-  ASSERT_EQ("bar", result[1].remapped_name);
+  ASSERT_EQ("test_bar", result[1].remapped_name);
   ASSERT_EQ(1u, result[1].input_variables.size());
-  EXPECT_EQ("in2_var", result[1].input_variables[0]);
+  EXPECT_EQ("test_in2_var", result[1].input_variables[0]);
   ASSERT_EQ(1u, result[1].output_variables.size());
-  EXPECT_EQ("out_var", result[1].output_variables[0]);
+  EXPECT_EQ("test_out_var", result[1].output_variables[0]);
 }
 
 TEST_F(InspectorGetEntryPointTest, MultipleEntryPointsSharedInOutVariables) {
@@ -1042,42 +1037,36 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  // TODO(dsinclair): Update to run the namer transform when available.
-
   auto result = inspector()->GetEntryPoints();
   ASSERT_FALSE(inspector()->has_error()) << inspector()->error();
 
   ASSERT_EQ(2u, result.size());
 
   ASSERT_EQ("foo", result[0].name);
-  ASSERT_EQ("foo", result[0].remapped_name);
+  ASSERT_EQ("test_foo", result[0].remapped_name);
   EXPECT_EQ(2u, result[0].input_variables.size());
-  EXPECT_TRUE(ContainsString(result[0].input_variables, "in_var"));
-  EXPECT_TRUE(ContainsString(result[0].input_variables, "in2_var"));
+  EXPECT_TRUE(ContainsString(result[0].input_variables, "test_in_var"));
+  EXPECT_TRUE(ContainsString(result[0].input_variables, "test_in2_var"));
   EXPECT_EQ(2u, result[0].output_variables.size());
-  EXPECT_TRUE(ContainsString(result[0].output_variables, "out_var"));
-  EXPECT_TRUE(ContainsString(result[0].output_variables, "out2_var"));
+  EXPECT_TRUE(ContainsString(result[0].output_variables, "test_out_var"));
+  EXPECT_TRUE(ContainsString(result[0].output_variables, "test_out2_var"));
 
   ASSERT_EQ("bar", result[1].name);
-  ASSERT_EQ("bar", result[1].remapped_name);
+  ASSERT_EQ("test_bar", result[1].remapped_name);
   EXPECT_EQ(1u, result[1].input_variables.size());
-  EXPECT_EQ("in2_var", result[1].input_variables[0]);
+  EXPECT_EQ("test_in2_var", result[1].input_variables[0]);
   EXPECT_EQ(1u, result[1].output_variables.size());
-  EXPECT_EQ("out2_var", result[1].output_variables[0]);
+  EXPECT_EQ("test_out2_var", result[1].output_variables[0]);
 }
 
-// TODO(rharrison): Reenable once GetRemappedNameForEntryPoint isn't a pass
-// through
-TEST_F(InspectorGetRemappedNameForEntryPointTest, DISABLED_NoFunctions) {
+TEST_F(InspectorGetRemappedNameForEntryPointTest, NoFunctions) {
   auto result = inspector()->GetRemappedNameForEntryPoint("foo");
   ASSERT_TRUE(inspector()->has_error());
 
   EXPECT_EQ("", result);
 }
 
-// TODO(rharrison): Reenable once GetRemappedNameForEntryPoint isn't a pass
-// through
-TEST_F(InspectorGetRemappedNameForEntryPointTest, DISABLED_NoEntryPoints) {
+TEST_F(InspectorGetRemappedNameForEntryPointTest, NoEntryPoints) {
   mod->AddFunction(MakeEmptyBodyFunction("foo", {}));
 
   auto result = inspector()->GetRemappedNameForEntryPoint("foo");
@@ -1086,35 +1075,26 @@
   EXPECT_EQ("", result);
 }
 
-// TODO(rharrison): Reenable once GetRemappedNameForEntryPoint isn't a pass
-// through
-TEST_F(InspectorGetRemappedNameForEntryPointTest, DISABLED_OneEntryPoint) {
+TEST_F(InspectorGetRemappedNameForEntryPointTest, OneEntryPoint) {
   auto* foo = MakeEmptyBodyFunction(
       "foo", ast::FunctionDecorationList{
                  create<ast::StageDecoration>(ast::PipelineStage::kVertex),
              });
   mod->AddFunction(foo);
 
-  // TODO(dsinclair): Update to run the namer transform when available.
-
   auto result = inspector()->GetRemappedNameForEntryPoint("foo");
   ASSERT_FALSE(inspector()->has_error()) << inspector()->error();
 
-  EXPECT_EQ("foo", result);
+  EXPECT_EQ("test_foo", result);
 }
 
-// TODO(rharrison): Reenable once GetRemappedNameForEntryPoint isn't a pass
-// through
-TEST_F(InspectorGetRemappedNameForEntryPointTest,
-       DISABLED_MultipleEntryPoints) {
+TEST_F(InspectorGetRemappedNameForEntryPointTest, MultipleEntryPoints) {
   auto* foo = MakeEmptyBodyFunction(
       "foo", ast::FunctionDecorationList{
                  create<ast::StageDecoration>(ast::PipelineStage::kVertex),
              });
   mod->AddFunction(foo);
 
-  // TODO(dsinclair): Update to run the namer transform when available.
-
   auto* bar = MakeEmptyBodyFunction(
       "bar", ast::FunctionDecorationList{
                  create<ast::StageDecoration>(ast::PipelineStage::kCompute),
@@ -1124,12 +1104,12 @@
   {
     auto result = inspector()->GetRemappedNameForEntryPoint("foo");
     ASSERT_FALSE(inspector()->has_error()) << inspector()->error();
-    EXPECT_EQ("foo", result);
+    EXPECT_EQ("test_foo", result);
   }
   {
     auto result = inspector()->GetRemappedNameForEntryPoint("bar");
     ASSERT_FALSE(inspector()->has_error()) << inspector()->error();
-    EXPECT_EQ("bar", result);
+    EXPECT_EQ("test_bar", result);
   }
 }
 
