[libcxx] r302382 - Fix Windows test failures caused by identical temp file names.

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Sun May 7 14:41:59 PDT 2017


Author: ericwf
Date: Sun May  7 16:41:58 2017
New Revision: 302382

URL: http://llvm.org/viewvc/llvm-project?rev=302382&view=rev
Log:
Fix Windows test failures caused by identical temp file names.

This patch fixes test failures that occur on Windows because
the tests attempt to generate two distinct temp file names but
get the same name both time.

The fix for this is to create the first temp file before requesting
a second temporary file name. This ensures that the second name
will be unique.

Modified:
    libcxx/trunk/test/std/input.output/file.streams/fstreams/fstream.assign/member_swap.pass.cpp
    libcxx/trunk/test/std/input.output/file.streams/fstreams/fstream.assign/nonmember_swap.pass.cpp
    libcxx/trunk/test/std/input.output/file.streams/fstreams/ofstream.assign/member_swap.pass.cpp
    libcxx/trunk/test/std/input.output/file.streams/fstreams/ofstream.assign/nonmember_swap.pass.cpp

Modified: libcxx/trunk/test/std/input.output/file.streams/fstreams/fstream.assign/member_swap.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/input.output/file.streams/fstreams/fstream.assign/member_swap.pass.cpp?rev=302382&r1=302381&r2=302382&view=diff
==============================================================================
--- libcxx/trunk/test/std/input.output/file.streams/fstreams/fstream.assign/member_swap.pass.cpp (original)
+++ libcxx/trunk/test/std/input.output/file.streams/fstreams/fstream.assign/member_swap.pass.cpp Sun May  7 16:41:58 2017
@@ -15,13 +15,33 @@
 // void swap(basic_fstream& rhs);
 
 #include <fstream>
+#include <utility>
 #include <cassert>
 #include "platform_support.h"
 
+std::pair<std::string, std::string> get_temp_file_names() {
+  std::pair<std::string, std::string> names;
+  names.first = get_temp_file_name();
+
+  // Create the file so the next call to `get_temp_file_name()` doesn't
+  // return the same file.
+  std::FILE *fd1 = std::fopen(names.first.c_str(), "w");
+
+  names.second = get_temp_file_name();
+  assert(names.first != names.second);
+
+  std::fclose(fd1);
+  std::remove(names.first.c_str());
+
+  return names;
+}
+
 int main()
 {
-    std::string temp1 = get_temp_file_name();
-    std::string temp2 = get_temp_file_name();
+    std::pair<std::string, std::string> temp_files = get_temp_file_names();
+    std::string& temp1 = temp_files.first;
+    std::string& temp2 = temp_files.second;
+    assert(temp1 != temp2);
     {
         std::fstream fs1(temp1.c_str(), std::ios_base::in | std::ios_base::out
                                                   | std::ios_base::trunc);

Modified: libcxx/trunk/test/std/input.output/file.streams/fstreams/fstream.assign/nonmember_swap.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/input.output/file.streams/fstreams/fstream.assign/nonmember_swap.pass.cpp?rev=302382&r1=302381&r2=302382&view=diff
==============================================================================
--- libcxx/trunk/test/std/input.output/file.streams/fstreams/fstream.assign/nonmember_swap.pass.cpp (original)
+++ libcxx/trunk/test/std/input.output/file.streams/fstreams/fstream.assign/nonmember_swap.pass.cpp Sun May  7 16:41:58 2017
@@ -16,13 +16,34 @@
 //   void swap(basic_fstream<charT, traits>& x, basic_fstream<charT, traits>& y);
 
 #include <fstream>
+#include <utility>
 #include <cassert>
 #include "platform_support.h"
 
+
+std::pair<std::string, std::string> get_temp_file_names() {
+  std::pair<std::string, std::string> names;
+  names.first = get_temp_file_name();
+
+  // Create the file so the next call to `get_temp_file_name()` doesn't
+  // return the same file.
+  std::FILE *fd1 = std::fopen(names.first.c_str(), "w");
+
+  names.second = get_temp_file_name();
+  assert(names.first != names.second);
+
+  std::fclose(fd1);
+  std::remove(names.first.c_str());
+
+  return names;
+}
+
 int main()
 {
-    std::string temp1 = get_temp_file_name();
-    std::string temp2 = get_temp_file_name();
+    std::pair<std::string, std::string> temp_files = get_temp_file_names();
+    std::string& temp1 = temp_files.first;
+    std::string& temp2 = temp_files.second;
+    assert(temp1 != temp2);
     {
         std::fstream fs1(temp1.c_str(), std::ios_base::in | std::ios_base::out
                                                   | std::ios_base::trunc);

Modified: libcxx/trunk/test/std/input.output/file.streams/fstreams/ofstream.assign/member_swap.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/input.output/file.streams/fstreams/ofstream.assign/member_swap.pass.cpp?rev=302382&r1=302381&r2=302382&view=diff
==============================================================================
--- libcxx/trunk/test/std/input.output/file.streams/fstreams/ofstream.assign/member_swap.pass.cpp (original)
+++ libcxx/trunk/test/std/input.output/file.streams/fstreams/ofstream.assign/member_swap.pass.cpp Sun May  7 16:41:58 2017
@@ -15,13 +15,33 @@
 // void swap(basic_ofstream& rhs);
 
 #include <fstream>
+#include <utility>
 #include <cassert>
 #include "platform_support.h"
 
+std::pair<std::string, std::string> get_temp_file_names() {
+  std::pair<std::string, std::string> names;
+  names.first = get_temp_file_name();
+
+  // Create the file so the next call to `get_temp_file_name()` doesn't
+  // return the same file.
+  std::FILE *fd1 = std::fopen(names.first.c_str(), "w");
+
+  names.second = get_temp_file_name();
+  assert(names.first != names.second);
+
+  std::fclose(fd1);
+  std::remove(names.first.c_str());
+
+  return names;
+}
+
 int main()
 {
-    std::string temp1 = get_temp_file_name();
-    std::string temp2 = get_temp_file_name();
+    std::pair<std::string, std::string> temp_files = get_temp_file_names();
+    std::string& temp1 = temp_files.first;
+    std::string& temp2 = temp_files.second;
+    assert(temp1 != temp2);
     {
         std::ofstream fs1(temp1.c_str());
         std::ofstream fs2(temp2.c_str());

Modified: libcxx/trunk/test/std/input.output/file.streams/fstreams/ofstream.assign/nonmember_swap.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/input.output/file.streams/fstreams/ofstream.assign/nonmember_swap.pass.cpp?rev=302382&r1=302381&r2=302382&view=diff
==============================================================================
--- libcxx/trunk/test/std/input.output/file.streams/fstreams/ofstream.assign/nonmember_swap.pass.cpp (original)
+++ libcxx/trunk/test/std/input.output/file.streams/fstreams/ofstream.assign/nonmember_swap.pass.cpp Sun May  7 16:41:58 2017
@@ -16,13 +16,33 @@
 //   void swap(basic_ofstream<charT, traits>& x, basic_ofstream<charT, traits>& y);
 
 #include <fstream>
+#include <utility>
 #include <cassert>
 #include "platform_support.h"
 
+std::pair<std::string, std::string> get_temp_file_names() {
+  std::pair<std::string, std::string> names;
+  names.first = get_temp_file_name();
+
+  // Create the file so the next call to `get_temp_file_name()` doesn't
+  // return the same file.
+  std::FILE *fd1 = std::fopen(names.first.c_str(), "w");
+
+  names.second = get_temp_file_name();
+  assert(names.first != names.second);
+
+  std::fclose(fd1);
+  std::remove(names.first.c_str());
+
+  return names;
+}
+
 int main()
 {
-    std::string temp1 = get_temp_file_name();
-    std::string temp2 = get_temp_file_name();
+    std::pair<std::string, std::string> temp_files = get_temp_file_names();
+    std::string& temp1 = temp_files.first;
+    std::string& temp2 = temp_files.second;
+    assert(temp1 != temp2);
     {
         std::ofstream fs1(temp1.c_str());
         std::ofstream fs2(temp2.c_str());




More information about the cfe-commits mailing list