selftest: split out named_temp_file from temp_source_file

Split out a new base class for temp_source_file, named_temp_file,
moving the deletion to the base class dtor, so that we can write
out temporary files in other ways in selftests.

gcc/ChangeLog:
	* selftest.c (selftest::named_temp_file::named_temp_file): New
	ctor.
	(selftest::temp_source_file::~temp_source_file): Move to...
	(selftest::named_temp_file::~named_temp_file): ...here.
	(selftest::test_named_temp_file): New function.
	(selftest::selftest_c_tests): Call test_named_temp_file.
	* selftest.h (class named_temp_file): New class.
	(class temp_source_file): Convert to a subclass of named_temp_file.

From-SVN: r239875
This commit is contained in:
David Malcolm 2016-08-31 00:07:38 +00:00 committed by David Malcolm
parent 71b308914e
commit 4ecfc45373
3 changed files with 63 additions and 21 deletions

View File

@ -1,3 +1,14 @@
2016-08-30 David Malcolm <dmalcolm@redhat.com>
* selftest.c (selftest::named_temp_file::named_temp_file): New
ctor.
(selftest::temp_source_file::~temp_source_file): Move to...
(selftest::named_temp_file::~named_temp_file): ...here.
(selftest::test_named_temp_file): New function.
(selftest::selftest_c_tests): Call test_named_temp_file.
* selftest.h (class named_temp_file): New class.
(class temp_source_file): Convert to a subclass of named_temp_file.
2016-08-30 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.c (rs6000_emit_epilogue): Do not emit

View File

@ -120,6 +120,23 @@ selftest::assert_str_contains (const location &loc,
desc_haystack, desc_needle, val_haystack, val_needle);
}
/* Constructor. Generate a name for the file. */
selftest::named_temp_file::named_temp_file (const char *suffix)
{
m_filename = make_temp_file (suffix);
ASSERT_NE (m_filename, NULL);
}
/* Destructor. Delete the tempfile. */
selftest::named_temp_file::~named_temp_file ()
{
unlink (m_filename);
diagnostics_file_cache_forcibly_evict_file (m_filename);
free (m_filename);
}
/* Constructor. Create a tempfile using SUFFIX, and write CONTENT to
it. Abort if anything goes wrong, using LOC as the effective
location in the problem report. */
@ -127,27 +144,16 @@ selftest::assert_str_contains (const location &loc,
selftest::temp_source_file::temp_source_file (const location &loc,
const char *suffix,
const char *content)
: named_temp_file (suffix)
{
m_filename = make_temp_file (suffix);
ASSERT_NE (m_filename, NULL);
FILE *out = fopen (m_filename, "w");
FILE *out = fopen (get_filename (), "w");
if (!out)
::selftest::fail_formatted (loc, "unable to open tempfile: %s",
m_filename);
get_filename ());
fprintf (out, "%s", content);
fclose (out);
}
/* Destructor. Delete the tempfile. */
selftest::temp_source_file::~temp_source_file ()
{
unlink (m_filename);
diagnostics_file_cache_forcibly_evict_file (m_filename);
free (m_filename);
}
/* Selftests for the selftest system itself. */
namespace selftest {
@ -167,12 +173,27 @@ test_assertions ()
ASSERT_STR_CONTAINS ("foo bar baz", "bar");
}
/* Verify named_temp_file. */
static void
test_named_temp_file ()
{
named_temp_file t (".txt");
FILE *f = fopen (t.get_filename (), "w");
if (!f)
selftest::fail_formatted (SELFTEST_LOCATION,
"unable to open %s for writing",
t.get_filename ());
fclose (f);
}
/* Run all of the selftests within this file. */
void
selftest_c_tests ()
{
test_assertions ();
test_named_temp_file ();
}
} // namespace selftest

View File

@ -78,22 +78,32 @@ extern void assert_str_contains (const location &loc,
const char *val_haystack,
const char *val_needle);
/* A class for writing out a temporary sourcefile for use in selftests
of input handling. */
/* A named temporary file for use in selftests.
Usable for writing out files, and as the base class for
temp_source_file.
The file is unlinked in the destructor. */
class temp_source_file
class named_temp_file
{
public:
temp_source_file (const location &loc, const char *suffix,
const char *content);
~temp_source_file ();
named_temp_file (const char *suffix);
~named_temp_file ();
const char *get_filename () const { return m_filename; }
private:
char *m_filename;
};
/* A class for writing out a temporary sourcefile for use in selftests
of input handling. */
class temp_source_file : public named_temp_file
{
public:
temp_source_file (const location &loc, const char *suffix,
const char *content);
};
/* Various selftests involving location-handling require constructing a
line table and one or more line maps within it.