ART: Fix assembler_test to use ScratchFile

This removes a warning about tmpnam usage.

Also add an assertion to ScratchFile about ANDROID_DATA being set,
which it relies on for the temp directory.

Change-Id: I1202f92e48e61492f0ed3ac36ff44fde34dbb0e1
diff --git a/compiler/utils/assembler_test.h b/compiler/utils/assembler_test.h
index ce1c4de..1b050cf 100644
--- a/compiler/utils/assembler_test.h
+++ b/compiler/utils/assembler_test.h
@@ -19,7 +19,7 @@
 
 #include "assembler.h"
 
-#include "gtest/gtest.h"
+#include "common_runtime_test.h"  // For ScratchFile
 
 #include <cstdio>
 #include <cstdlib>
@@ -30,6 +30,10 @@
 
 namespace art {
 
+// Use a glocal static variable to keep the same name for all test data. Else we'll just spam the
+// temp directory.
+static std::string tmpnam_;
+
 template<typename Ass, typename Reg, typename Imm>
 class AssemblerTest : public testing::Test {
  public:
@@ -203,6 +207,10 @@
   void SetUp() OVERRIDE {
     assembler_.reset(new Ass());
 
+    // Fake a runtime test for ScratchFile
+    std::string android_data;
+    CommonRuntimeTest::SetEnvironmentVariables(android_data);
+
     SetUpHelpers();
   }
 
@@ -667,7 +675,8 @@
   // Use a consistent tmpnam, so store it.
   std::string GetTmpnam() {
     if (tmpnam_.length() == 0) {
-      tmpnam_ = std::string(tmpnam(nullptr));
+      ScratchFile tmp;
+      tmpnam_ = tmp.GetFilename() + "asm";
     }
     return tmpnam_;
   }
@@ -677,7 +686,6 @@
   std::string resolved_assembler_cmd_;
   std::string resolved_objdump_cmd_;
   std::string resolved_disassemble_cmd_;
-  std::string tmpnam_;
 
   static constexpr size_t OBJDUMP_SECTION_LINE_MIN_TOKENS = 6;
 };
diff --git a/runtime/common_runtime_test.h b/runtime/common_runtime_test.h
index 723e32c..79d3690 100644
--- a/runtime/common_runtime_test.h
+++ b/runtime/common_runtime_test.h
@@ -57,6 +57,9 @@
 class ScratchFile {
  public:
   ScratchFile() {
+    // ANDROID_DATA needs to be set
+    CHECK_NE(static_cast<char*>(nullptr), getenv("ANDROID_DATA")) <<
+        "Are you subclassing RuntimeTest?";
     filename_ = getenv("ANDROID_DATA");
     filename_ += "/TmpFile-XXXXXX";
     int fd = mkstemp(&filename_[0]);