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:
parent
71b308914e
commit
4ecfc45373
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user