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.

llvm-svn: 302382
This commit is contained in:
Eric Fiselier 2017-05-07 21:41:58 +00:00
parent 07c955c6ed
commit ea9dc4ae60
4 changed files with 89 additions and 8 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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());

View File

@ -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());