Shorten the generated test file names.

Also place the generated files in their own directories.

Change-Id: I51c1acf15810ec199d17cc2d6e63adebdc0fc3c9
diff --git a/api/GenerateHeaderFiles.cpp b/api/GenerateHeaderFiles.cpp
index 4b2ecc7..7475d6b 100644
--- a/api/GenerateHeaderFiles.cpp
+++ b/api/GenerateHeaderFiles.cpp
@@ -304,12 +304,12 @@
     }
 }
 
-static bool writeHeaderFile(const SpecFile& specFile) {
+static bool writeHeaderFile(const string& directory, const SpecFile& specFile) {
     const string headerFileName = specFile.getHeaderFileName();
 
     // We generate one header file for each spec file.
     GeneratedFile file;
-    if (!file.start(headerFileName)) {
+    if (!file.start(directory, headerFileName)) {
         return false;
     }
 
@@ -349,10 +349,10 @@
     return true;
 }
 
-bool GenerateHeaderFiles() {
+bool GenerateHeaderFiles(const string& directory) {
     bool success = true;
     for (auto specFile : systemSpecification.getSpecFiles()) {
-        if (!writeHeaderFile(*specFile)) {
+        if (!writeHeaderFile(directory, *specFile)) {
             success = false;
         }
     }
diff --git a/api/GenerateHtmlDocumentation.cpp b/api/GenerateHtmlDocumentation.cpp
index a7782c8..359d785 100644
--- a/api/GenerateHtmlDocumentation.cpp
+++ b/api/GenerateHtmlDocumentation.cpp
@@ -422,9 +422,9 @@
     return success;
 }
 
-static bool generateOverview() {
+static bool generateOverview(const string& directory) {
     GeneratedFile file;
-    if (!file.start("index.html")) {
+    if (!file.start(directory, "index.html")) {
         return false;
     }
     bool success = true;
@@ -444,9 +444,9 @@
     return success;
 }
 
-static bool generateAlphabeticalIndex() {
+static bool generateAlphabeticalIndex(const string& directory) {
     GeneratedFile file;
-    if (!file.start("alpha_index.html")) {
+    if (!file.start(directory, "alpha_index.html")) {
         return false;
     }
     writeHtmlHeader(&file);
@@ -598,10 +598,10 @@
     return true;
 }
 
-static bool writeDetailedDocumentationFile(const SpecFile& specFile) {
+static bool writeDetailedDocumentationFile(const string& directory, const SpecFile& specFile) {
     GeneratedFile file;
     const string htmlFileName = stringReplace(specFile.getSpecFileName(), ".spec", ".html");
-    if (!file.start(htmlFileName)) {
+    if (!file.start(directory, htmlFileName)) {
         return false;
     }
     bool success = true;
@@ -661,10 +661,10 @@
     return success;
 }
 
-bool generateHtmlDocumentation() {
-    bool success = generateOverview() && generateAlphabeticalIndex();
+bool generateHtmlDocumentation(const string& directory) {
+    bool success = generateOverview(directory) && generateAlphabeticalIndex(directory);
     for (auto specFile : systemSpecification.getSpecFiles()) {
-        if (!writeDetailedDocumentationFile(*specFile)) {
+        if (!writeDetailedDocumentationFile(directory, *specFile)) {
             success = false;
         }
     }
diff --git a/api/GenerateTestFiles.cpp b/api/GenerateTestFiles.cpp
index 7cf1099..f70c444 100644
--- a/api/GenerateTestFiles.cpp
+++ b/api/GenerateTestFiles.cpp
@@ -894,10 +894,10 @@
 }
 
 // Open the mJavaFile and writes the header.
-static bool startJavaFile(GeneratedFile* file, const Function& function, const string& testName,
-                          const string& relaxedTestName) {
+static bool startJavaFile(GeneratedFile* file, const Function& function, const string& directory,
+                          const string& testName, const string& relaxedTestName) {
     const string fileName = testName + ".java";
-    if (!file->start(fileName)) {
+    if (!file->start(directory, fileName)) {
         return false;
     }
     file->writeNotices();
@@ -942,9 +942,10 @@
 }
 
 // Open the script file and write its header.
-static bool startRsFile(GeneratedFile* file, const Function& function, const string& testName) {
+static bool startRsFile(GeneratedFile* file, const Function& function, const string& directory,
+                        const string& testName) {
     string fileName = testName + ".rs";
-    if (!file->start(fileName)) {
+    if (!file->start(directory, fileName)) {
         return false;
     }
     file->writeNotices();
@@ -955,12 +956,12 @@
 }
 
 // Write the entire *Relaxed.rs test file, as it only depends on the name.
-static bool writeRelaxedRsFile(const Function& function, const string& testName,
-                               const string& relaxedTestName) {
+static bool writeRelaxedRsFile(const Function& function, const string& directory,
+                               const string& testName, const string& relaxedTestName) {
     string name = relaxedTestName + ".rs";
 
     GeneratedFile file;
-    if (!file.start(name)) {
+    if (!file.start(directory, name)) {
         return false;
     }
     file.writeNotices();
@@ -974,26 +975,27 @@
 /* Write the .java and the two .rs test files.  versionOfTestFiles is used to restrict which API
  * to test.
  */
-static bool writeTestFilesForFunction(const Function& function, int versionOfTestFiles) {
+static bool writeTestFilesForFunction(const Function& function, const string& directory,
+                                      int versionOfTestFiles) {
     // Avoid creating empty files if we're not testing this function.
     if (!needTestFiles(function, versionOfTestFiles)) {
         return true;
     }
 
-    const string testName = "GeneratedTest" + function.getCapitalizedName();
+    const string testName = "Test" + function.getCapitalizedName();
     const string relaxedTestName = testName + "Relaxed";
 
-    if (!writeRelaxedRsFile(function, testName, relaxedTestName)) {
+    if (!writeRelaxedRsFile(function, directory, testName, relaxedTestName)) {
         return false;
     }
 
     GeneratedFile rsFile;    // The Renderscript test file we're generating.
     GeneratedFile javaFile;  // The Jave test file we're generating.
-    if (!startRsFile(&rsFile, function, testName)) {
+    if (!startRsFile(&rsFile, function, directory, testName)) {
         return false;
     }
 
-    if (!startJavaFile(&javaFile, function, testName, relaxedTestName)) {
+    if (!startJavaFile(&javaFile, function, directory, testName, relaxedTestName)) {
         return false;
     }
 
@@ -1026,11 +1028,11 @@
     return true;
 }
 
-bool GenerateTestFiles(int versionOfTestFiles) {
+bool GenerateTestFiles(const string& directory, int versionOfTestFiles) {
     bool success = true;
     for (auto specFile : systemSpecification.getSpecFiles()) {
         for (auto f : specFile->getFunctionsMap()) {
-            if (!writeTestFilesForFunction(*f.second, versionOfTestFiles)) {
+            if (!writeTestFilesForFunction(*f.second, directory, versionOfTestFiles)) {
                 success = false;
             }
         }
diff --git a/api/Generator.h b/api/Generator.h
index 21ce5f9..95534b3 100644
--- a/api/Generator.h
+++ b/api/Generator.h
@@ -18,12 +18,12 @@
 #define ANDROID_RS_API_GENERATOR_GENERATOR_H
 
 // Generates the RenderScript header files.  The implementation is in GenerateHeaderFiles.cpp.
-bool GenerateHeaderFiles();
+bool GenerateHeaderFiles(const std::string& directory);
 
 // Generates the Java and RenderScript test files.  The implementation is in GenerateTestFiles.cpp.
-bool GenerateTestFiles(int versionOfTestFiles);
+bool GenerateTestFiles(const std::string& directory, int versionOfTestFiles);
 
 // Generates all HTML documentation files.  The implementation is in GenerateHtmlDocumentation.cpp.
-bool generateHtmlDocumentation();
+bool generateHtmlDocumentation(const std::string& director);
 
 #endif  // ANDROID_RS_API_GENERATOR_GENERATOR_H
diff --git a/api/Specification.cpp b/api/Specification.cpp
index 36f406c..a09495e 100644
--- a/api/Specification.cpp
+++ b/api/Specification.cpp
@@ -776,8 +776,8 @@
 }
 
 bool SystemSpecification::generateFiles(int versionOfTestFiles) const {
-    bool success = GenerateHeaderFiles() && generateHtmlDocumentation() &&
-                   GenerateTestFiles(versionOfTestFiles);
+    bool success = GenerateHeaderFiles("scriptc") && generateHtmlDocumentation("html") &&
+                   GenerateTestFiles("test", versionOfTestFiles);
     if (success) {
         cout << "Successfully processed " << mTypes.size() << " types, " << mConstants.size()
              << " constants, and " << mFunctions.size() << " functions.\n";
diff --git a/api/Utilities.cpp b/api/Utilities.cpp
index 80ebb0d..b372b13 100644
--- a/api/Utilities.cpp
+++ b/api/Utilities.cpp
@@ -148,10 +148,11 @@
 }
 
 // Opens the stream.  Reports an error if it can't.
-bool GeneratedFile::start(const string& name) {
-    open(name.c_str(), ios::out | ios::trunc);
+bool GeneratedFile::start(const string& directory, const string& name) {
+    const string path = directory + "/" + name;
+    open(path.c_str(), ios::out | ios::trunc);
     if (!is_open()) {
-        cerr << "Error.  Can't open the output file: " << name << "\n";
+        cerr << "Error.  Can't open the output file: " << path << "\n";
         return false;
     }
     return true;
diff --git a/api/Utilities.h b/api/Utilities.h
index 8b0cd9c..04169dc 100644
--- a/api/Utilities.h
+++ b/api/Utilities.h
@@ -57,7 +57,7 @@
 
 public:
     // Opens the stream.  Reports an error if it can't.
-    bool start(const std::string& name);
+    bool start(const std::string& directory, const std::string& name);
 
     // Write copyright notice & auto-generated warning in Java/C style comments.
     void writeNotices();
diff --git a/api/generate.sh b/api/generate.sh
index 0881690..fd0085d 100755
--- a/api/generate.sh
+++ b/api/generate.sh
@@ -18,12 +18,21 @@
 set -e
 g++ Generator.cpp Specification.cpp GenerateHtmlDocumentation.cpp GenerateHeaderFiles.cpp GenerateTestFiles.cpp Scanner.cpp Utilities.cpp -g -std=c++11 -Wall -o generator
 
+mkdir -p test
+mkdir -p scriptc
+mkdir -p html
+
 ./generator rs_allocation.spec rs_atomic.spec rs_core_math.spec rs_core.spec rs_debug.spec rs_element.spec rs_graphics.spec rs_math.spec rs_matrix.spec rs_mesh.spec rs_object.spec rs_program.spec rs_quaternion.spec rs_sampler.spec rs_time.spec rs_types.spec
 
-rm ../../../cts/tests/tests/renderscript/src/android/renderscript/cts/GeneratedTest*
-mv GeneratedTest* ../../../cts/tests/tests/renderscript/src/android/renderscript/cts/
+rm -f ../../../cts/tests/tests/renderscript/src/android/renderscript/cts/generated/*
+mv test/* ../../../cts/tests/tests/renderscript/src/android/renderscript/cts/generated/
+rmdir test
 
-mv *.rsh ../scriptc
+mv scriptc/*.rsh ../scriptc
+rmdir scriptc
 
-rm *.html # TODO handle the documentation files.
+# TODO handle the documentation files.
+rm html/*
+rmdir html
+
 rm generator