diff --git a/tests/Makefile.am b/tests/Makefile.am
index 904c4fa1..ccb64ed6 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -21,6 +21,10 @@ check_PROGRAMS = \
# Test cases to be run by "make check"
TESTS = $(check_PROGRAMS)
+noinst_HEADERS = \
+ common.h \
+ insertion_operators.h
+
gparted_core_OBJECTS = \
$(top_builddir)/src/BCache_Info.$(OBJEXT) \
$(top_builddir)/src/BlockSpecial.$(OBJEXT) \
@@ -72,7 +76,10 @@ test_BlockSpecial_LDADD = \
$(top_builddir)/src/BlockSpecial.$(OBJEXT) \
$(LDADD)
-test_EraseFileSystemSignatures_SOURCES = test_EraseFileSystemSignatures.cc
+test_EraseFileSystemSignatures_SOURCES = \
+ test_EraseFileSystemSignatures.cc \
+ common.cc \
+ insertion_operators.cc
test_EraseFileSystemSignatures_LDADD = \
$(gparted_core_OBJECTS) \
$(GTEST_LIBS) \
@@ -83,12 +90,17 @@ test_PasswordRAMStore_LDADD = \
$(top_builddir)/src/PasswordRAMStore.$(OBJEXT) \
$(LDADD)
-test_PipeCapture_SOURCES = test_PipeCapture.cc
+test_PipeCapture_SOURCES = \
+ test_PipeCapture.cc \
+ common.cc
test_PipeCapture_LDADD = \
$(top_builddir)/src/PipeCapture.$(OBJEXT) \
$(LDADD)
-test_SupportedFileSystems_SOURCES = test_SupportedFileSystems.cc
+test_SupportedFileSystems_SOURCES = \
+ test_SupportedFileSystems.cc \
+ common.cc \
+ insertion_operators.cc
test_SupportedFileSystems_LDADD = \
$(gparted_core_OBJECTS) \
$(GTEST_LIBS) \
diff --git a/tests/common.cc b/tests/common.cc
new file mode 100644
index 00000000..80c3fc87
--- /dev/null
+++ b/tests/common.cc
@@ -0,0 +1,115 @@
+/* Copyright (C) 2023 Mike Fleetwood
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+
+
+#include "common.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+namespace GParted
+{
+
+
+// Format up to BinaryStringChunkSize (16) bytes of binary data ready for printing as:
+// Hex offset ASCII text Hex bytes
+// "0x000000000 \"ABCDEFGHabcdefgh\" 41 42 43 44 45 46 47 48 61 62 63 64 65 66 67 68"
+std::string binary_string_to_print(size_t offset, const char* s, size_t len)
+{
+ std::ostringstream result;
+
+ result << "0x";
+ result.fill('0');
+ result << std::setw(8) << std::hex << std::uppercase << offset << " \"";
+
+ size_t i;
+ for (i = 0; i < BinaryStringChunkSize && i < len; i++)
+ result.put((isprint(s[i])) ? s[i] : '.');
+ result.put('\"');
+
+ if (len > 0)
+ {
+ for (; i < BinaryStringChunkSize; i++)
+ result.put(' ');
+ result.put(' ');
+
+ for (i = 0 ; i < BinaryStringChunkSize && i < len; i++)
+ result << " "
+ << std::setw(2) << std::hex << std::uppercase
+ << (unsigned int)(unsigned char)s[i];
+ }
+
+ return result.str();
+}
+
+
+// Re-execute current executable using xvfb-run so that it provides a virtual X11 display.
+static void exec_using_xvfb_run(int argc, char** argv)
+{
+ // argc+2 = Space for "xvfb-run" command, existing argc strings plus NULL pointer.
+ size_t size = sizeof(char*) * (argc+2);
+ char** new_argv = (char**)malloc(size);
+ if (new_argv == NULL)
+ {
+ fprintf(stderr, "Failed to allocate %lu bytes of memory. errno=%d,%s\n",
+ (unsigned long)size, errno, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+ new_argv[0] = strdup("xvfb-run");
+ if (new_argv[0] == NULL)
+ {
+ fprintf(stderr, "Failed to allocate %lu bytes of memory. errno=%d,%s\n",
+ (unsigned long)strlen(new_argv[0])+1, errno, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+ // Copy argv pointers including final NULL pointer.
+ for (size_t i = 0; i <= (unsigned)argc; i++)
+ new_argv[i+1] = argv[i];
+
+ execvp(new_argv[0], new_argv);
+ fprintf(stderr, "Failed to execute '%s %s ...'. errno=%d,%s\n", new_argv[0], new_argv[1],
+ errno, strerror(errno));
+ exit(EXIT_FAILURE);
+}
+
+
+// Ensure there is an X11 display, providing a virtual one if needed.
+void ensure_x11_display(int argc, char** argv)
+{
+ const char* display = getenv("DISPLAY");
+ if (display == NULL)
+ {
+ printf("DISPLAY environment variable unset. Executing 'xvfb-run %s ...'\n", argv[0]);
+ exec_using_xvfb_run(argc, argv);
+ }
+ printf("DISPLAY=\"%s\"\n", display);
+
+}
+
+
+} //GParted
diff --git a/tests/common.h b/tests/common.h
new file mode 100644
index 00000000..fe23d06d
--- /dev/null
+++ b/tests/common.h
@@ -0,0 +1,43 @@
+/* Copyright (C) 2023 Mike Fleetwood
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+
+/* common
+ *
+ * Common functions used in testing that don't depend on any GParted code so don't require
+ * any GParted objects to need to be linked in order to be used.
+ */
+
+#ifndef GPARTED_TEST_COMMON_H
+#define GPARTED_TEST_COMMON_H
+
+
+#include
+#include
+
+
+namespace GParted
+{
+
+
+const size_t BinaryStringChunkSize = 16;
+
+std::string binary_string_to_print(size_t offset, const char* s, size_t len);
+void ensure_x11_display(int argc, char** argv);
+
+
+} // namespace GParted
+
+#endif /* GPARTED_TEST_COMMON_H */
diff --git a/tests/insertion_operators.cc b/tests/insertion_operators.cc
new file mode 100644
index 00000000..3a39ace7
--- /dev/null
+++ b/tests/insertion_operators.cc
@@ -0,0 +1,120 @@
+/* Copyright (C) 2023 Mike Fleetwood
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+
+
+#include "insertion_operators.h"
+#include "OperationDetail.h"
+
+#include
+#include
+#include
+
+
+namespace GParted
+{
+
+
+// Hacky XML parser which strips italic and bold markup added in
+// OperationDetail::set_description() and reverts just these 5 characters &<>'" encoded by
+// Glib::Markup::escape_text() -> g_markup_escape_text() -> append_escaped_text().
+static Glib::ustring strip_markup(const Glib::ustring& str)
+{
+ size_t len = str.length();
+ size_t i = 0;
+ Glib::ustring ret;
+ ret.reserve(len);
+ while (i < len)
+ {
+ if (str.compare(i, 3, "") == 0)
+ i += 3;
+ else if (str.compare(i, 4, "") == 0)
+ i += 4;
+ else if (str.compare(i, 3, "") == 0)
+ i += 3;
+ else if (str.compare(i, 4, "") == 0)
+ i += 4;
+ else if (str.compare(i, 5, "&") == 0)
+ {
+ ret.push_back('&');
+ i += 5;
+ }
+ else if (str.compare(i, 4, "<") == 0)
+ {
+ ret.push_back('<');
+ i += 4;
+ }
+ else if (str.compare(i, 4, ">") == 0)
+ {
+ ret.push_back('>');
+ i += 4;
+ }
+ else if (str.compare(i, 6, "'") == 0)
+ {
+ ret.push_back('\'');
+ i += 6;
+ }
+ else if (str.compare(i, 6, """) == 0)
+ {
+ ret.push_back('"');
+ i += 6;
+ }
+ else
+ {
+ ret.push_back(str[i]);
+ i++;
+ }
+ }
+ return ret;
+}
+
+
+// Print method for OperationDetailStatus.
+std::ostream& operator<<(std::ostream& out, const OperationDetailStatus od_status)
+{
+ switch (od_status)
+ {
+ case STATUS_NONE: out << "NONE"; break;
+ case STATUS_EXECUTE: out << "EXECUTE"; break;
+ case STATUS_SUCCESS: out << "SUCCESS"; break;
+ case STATUS_ERROR: out << "ERROR"; break;
+ case STATUS_INFO: out << "INFO"; break;
+ case STATUS_WARNING: out << "WARNING"; break;
+ default: break;
+ }
+ return out;
+}
+
+
+// Print method for an OperationDetail object.
+std::ostream& operator<<(std::ostream& out, const OperationDetail& od)
+{
+ out << strip_markup(od.get_description());
+ Glib::ustring elapsed = od.get_elapsed_time();
+ if (! elapsed.empty())
+ out << " " << elapsed;
+ if (od.get_status() != STATUS_NONE)
+ out << " (" << od.get_status() << ")";
+ out << "\n";
+
+ for (size_t i = 0; i < od.get_childs().size(); i++)
+ {
+ out << *od.get_childs()[i];
+ }
+ return out;
+}
+
+
+} //GParted
diff --git a/tests/insertion_operators.h b/tests/insertion_operators.h
new file mode 100644
index 00000000..8c069e3b
--- /dev/null
+++ b/tests/insertion_operators.h
@@ -0,0 +1,42 @@
+/* Copyright (C) 2023 Mike Fleetwood
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+
+/* insertion_operators
+ *
+ * Insertion operators for various GParted object types which print the object to an
+ * output stream.
+ */
+
+#ifndef GPARTED_TEST_INSERTION_OPERATORS_H
+#define GPARTED_TEST_INSERTION_OPERATORS_H
+
+
+#include "OperationDetail.h"
+
+#include
+
+
+namespace GParted
+{
+
+
+std::ostream& operator<<(std::ostream& out, const OperationDetailStatus od_status);
+std::ostream& operator<<(std::ostream& out, const OperationDetail& od);
+
+
+} // namespace GParted
+
+#endif /* GPARTED_TEST_INSERTION_OPERATORS_H */
diff --git a/tests/test_EraseFileSystemSignatures.cc b/tests/test_EraseFileSystemSignatures.cc
index 524de71d..c807baee 100644
--- a/tests/test_EraseFileSystemSignatures.cc
+++ b/tests/test_EraseFileSystemSignatures.cc
@@ -18,19 +18,15 @@
*/
+#include "common.h"
+#include "insertion_operators.h"
#include "GParted_Core.h"
#include "OperationDetail.h"
#include "Partition.h"
#include "Utils.h"
#include "gtest/gtest.h"
-#include
-#include
-#include
-#include
-#include
#include
-#include
#include
#include
#include
@@ -40,7 +36,6 @@
#include
#include
#include
-#include
#include
@@ -48,96 +43,6 @@ namespace GParted
{
-// Hacky XML parser which strips italic and bold markup added in
-// OperationDetail::set_description() and reverts just these 5 characters &<>'" encoded by
-// Glib::Markup::escape_text() -> g_markup_escape_text() -> append_escaped_text().
-Glib::ustring strip_markup(const Glib::ustring& str)
-{
- size_t len = str.length();
- size_t i = 0;
- Glib::ustring ret;
- ret.reserve(len);
- while (i < len)
- {
- if (str.compare(i, 3, "") == 0)
- i += 3;
- else if (str.compare(i, 4, "") == 0)
- i += 4;
- else if (str.compare(i, 3, "") == 0)
- i += 3;
- else if (str.compare(i, 4, "") == 0)
- i += 4;
- else if (str.compare(i, 5, "&") == 0)
- {
- ret.push_back('&');
- i += 5;
- }
- else if (str.compare(i, 4, "<") == 0)
- {
- ret.push_back('<');
- i += 4;
- }
- else if (str.compare(i, 4, ">") == 0)
- {
- ret.push_back('>');
- i += 4;
- }
- else if (str.compare(i, 6, "'") == 0)
- {
- ret.push_back('\'');
- i += 6;
- }
- else if (str.compare(i, 6, """) == 0)
- {
- ret.push_back('"');
- i += 6;
- }
- else
- {
- ret.push_back(str[i]);
- i++;
- }
- }
- return ret;
-}
-
-
-// Print method for OperationDetailStatus.
-std::ostream& operator<<(std::ostream& out, const OperationDetailStatus od_status)
-{
- switch (od_status)
- {
- case STATUS_NONE: out << "NONE"; break;
- case STATUS_EXECUTE: out << "EXECUTE"; break;
- case STATUS_SUCCESS: out << "SUCCESS"; break;
- case STATUS_ERROR: out << "ERROR"; break;
- case STATUS_INFO: out << "INFO"; break;
- case STATUS_WARNING: out << "WARNING"; break;
- default: break;
- }
- return out;
-}
-
-
-// Print method for an OperationDetail object.
-std::ostream& operator<<(std::ostream& out, const OperationDetail& od)
-{
- out << strip_markup(od.get_description());
- Glib::ustring elapsed = od.get_elapsed_time();
- if (! elapsed.empty())
- out << " " << elapsed;
- if (od.get_status() != STATUS_NONE)
- out << " (" << od.get_status() << ")";
- out << "\n";
-
- for (size_t i = 0; i < od.get_childs().size(); i++)
- {
- out << *od.get_childs()[i];
- }
- return out;
-}
-
-
// Explicit test fixture class for common variables and methods used in each test.
// Reference:
// Google Test, Primer, Test Fixtures: Using the Same Data Configuration for Multiple Tests
@@ -226,42 +131,6 @@ const char* first_non_zero_byte(const char* buf, size_t size)
}
-// Number of bytes of binary data to report.
-const size_t BinaryStringChunkSize = 16;
-
-
-// Format up to BinaryStringChunkSize (16) bytes of binary data ready for printing as:
-// Hex offset ASCII text Hex bytes
-// "0x000000000 \"ABCDEFGHabcdefgh\" 41 42 43 44 45 46 47 48 61 62 63 64 65 66 67 68"
-std::string binary_string_to_print(size_t offset, const char* s, size_t len)
-{
- std::ostringstream result;
-
- result << "0x";
- result.fill('0');
- result << std::setw(8) << std::hex << std::uppercase << offset << " \"";
-
- size_t i;
- for (i = 0; i < BinaryStringChunkSize && i < len; i++)
- result.put((isprint(s[i])) ? s[i] : '.');
- result.put('\"');
-
- if (len > 0)
- {
- for (; i < BinaryStringChunkSize; i++)
- result.put(' ');
- result.put(' ');
-
- for (i = 0 ; i < BinaryStringChunkSize && i < len; i++)
- result << " "
- << std::setw(2) << std::hex << std::uppercase
- << (unsigned int)(unsigned char)s[i];
- }
-
- return result.str();
-}
-
-
bool EraseFileSystemSignaturesTest::image_contains_all_zeros()
{
int fd = open(s_image_name, O_RDONLY|O_NONBLOCK);
@@ -329,38 +198,6 @@ TEST_F(EraseFileSystemSignaturesTest, IntelSoftwareRAIDUnaligned)
} // namespace GParted
-// Re-execute current executable using xvfb-run so that it provides a virtual X11 display.
-void exec_using_xvfb_run(int argc, char** argv)
-{
- // argc+2 = Space for "xvfb-run" command, existing argc strings plus NULL pointer.
- size_t size = sizeof(char*) * (argc+2);
- char** new_argv = (char**)malloc(size);
- if (new_argv == NULL)
- {
- fprintf(stderr, "Failed to allocate %lu bytes of memory. errno=%d,%s\n",
- (unsigned long)size, errno, strerror(errno));
- exit(EXIT_FAILURE);
- }
-
- new_argv[0] = strdup("xvfb-run");
- if (new_argv[0] == NULL)
- {
- fprintf(stderr, "Failed to allocate %lu bytes of memory. errno=%d,%s\n",
- (unsigned long)strlen(new_argv[0])+1, errno, strerror(errno));
- exit(EXIT_FAILURE);
- }
-
- // Copy argv pointers including final NULL pointer.
- for (unsigned int i = 0; i <= (unsigned)argc; i++)
- new_argv[i+1] = argv[i];
-
- execvp(new_argv[0], new_argv);
- fprintf(stderr, "Failed to execute '%s %s ...'. errno=%d,%s\n", new_argv[0], new_argv[1],
- errno, strerror(errno));
- exit(EXIT_FAILURE);
-}
-
-
// Custom Google Test main().
// Reference:
// * Google Test, Primer, Writing the main() function
@@ -368,14 +205,7 @@ void exec_using_xvfb_run(int argc, char** argv)
int main(int argc, char** argv)
{
printf("Running main() from %s\n", __FILE__);
-
- const char* display = getenv("DISPLAY");
- if (display == NULL)
- {
- printf("DISPLAY environment variable unset. Executing 'xvfb-run %s ...'\n", argv[0]);
- exec_using_xvfb_run(argc, argv);
- }
- printf("DISPLAY=\"%s\"\n", display);
+ GParted::ensure_x11_display(argc, argv);
// Initialise threading in GParted to successfully use Utils:: and
// FileSystem::execute_command(). Must be before InitGoogleTest().
diff --git a/tests/test_PipeCapture.cc b/tests/test_PipeCapture.cc
index 69273f1f..dafd629c 100644
--- a/tests/test_PipeCapture.cc
+++ b/tests/test_PipeCapture.cc
@@ -22,6 +22,7 @@
* being tested.
*/
+#include "common.h"
#include "PipeCapture.h"
#include "gtest/gtest.h"
@@ -48,39 +49,6 @@ static std::string repeat( const std::string & str, size_t count )
return result;
}
-// Number of bytes of binary data to compare and report.
-const size_t BinaryStringDiffSize = 16;
-
-// Format up to 16 bytes of binary data ready for printing as:
-// Hex offset ASCII text Hex bytes
-// "0x000000000 \"ABCDEFGHabcdefgh\" 41 42 43 44 45 46 47 48 61 62 63 64 65 66 67 68"
-std::string BinaryStringToPrint( size_t offset, const char * s, size_t len )
-{
- std::ostringstream result;
-
- result << "0x";
- result.fill( '0' );
- result << std::setw( 8 ) << std::hex << std::uppercase << offset << " \"";
-
- size_t i;
- for ( i = 0 ; i < BinaryStringDiffSize && i < len ; i ++ )
- result.put( ( isprint( s[i] ) ) ? s[i] : '.' );
- result.put( '\"' );
-
- if ( len > 0 )
- {
- for ( ; i < BinaryStringDiffSize ; i ++ )
- result.put( ' ' );
- result.put( ' ' );
-
- for ( i = 0 ; i < BinaryStringDiffSize && i < len ; i ++ )
- result << " "
- << std::setw( 2 ) << std::hex << std::uppercase
- << (unsigned int)(unsigned char)s[i];
- }
-
- return result.str();
-}
// Helper to construct and return message for equality assertion of C++ strings containing
// binary data used in:
@@ -97,10 +65,10 @@ std::string BinaryStringToPrint( size_t offset, const char * s, size_t len )
size_t len2 = rhs.length();
while ( len1 > 0 || len2 > 0 )
{
- size_t cmp_span = BinaryStringDiffSize;
+ size_t cmp_span = BinaryStringChunkSize;
cmp_span = ( len1 < cmp_span ) ? len1 : cmp_span;
cmp_span = ( len2 < cmp_span ) ? len2 : cmp_span;
- if ( cmp_span < BinaryStringDiffSize && len1 != len2 )
+ if (cmp_span < BinaryStringChunkSize && len1 != len2)
{
diff = true;
break;
@@ -127,9 +95,9 @@ std::string BinaryStringToPrint( size_t offset, const char * s, size_t len )
<< "To be equal to: " << rhs_expr << "\n"
<< " Of length: " << rhs.length() << "\n"
<< "With first binary difference:\n"
- << "< " << BinaryStringToPrint( offset, p1, len1 ) << "\n"
+ << "< " << binary_string_to_print(offset, p1, len1) << "\n"
<< "--\n"
- << "> " << BinaryStringToPrint( offset, p2, len2 );
+ << "> " << binary_string_to_print(offset, p2, len2);
}
}
diff --git a/tests/test_SupportedFileSystems.cc b/tests/test_SupportedFileSystems.cc
index 08cb928a..a5d61b6b 100644
--- a/tests/test_SupportedFileSystems.cc
+++ b/tests/test_SupportedFileSystems.cc
@@ -33,6 +33,8 @@
*/
+#include "common.h"
+#include "insertion_operators.h"
#include "GParted_Core.h"
#include "FileSystem.h"
#include "OperationDetail.h"
@@ -62,60 +64,6 @@ namespace GParted
{
-// Hacky XML parser which strips italic and bold markup added in
-// OperationDetail::set_description() and reverts just these 5 characters &<>'" encoded by
-// Glib::Markup::escape_text() -> g_markup_escape_text() -> append_escaped_text().
-Glib::ustring strip_markup(const Glib::ustring& str)
-{
- size_t len = str.length();
- size_t i = 0;
- Glib::ustring ret;
- ret.reserve(len);
- while (i < len)
- {
- if (str.compare(i, 3, "") == 0)
- i += 3;
- else if (str.compare(i, 4, "") == 0)
- i += 4;
- else if (str.compare(i, 3, "") == 0)
- i += 3;
- else if (str.compare(i, 4, "") == 0)
- i += 4;
- else if (str.compare(i, 5, "&") == 0)
- {
- ret.push_back('&');
- i += 5;
- }
- else if (str.compare(i, 4, "<") == 0)
- {
- ret.push_back('<');
- i += 4;
- }
- else if (str.compare(i, 4, ">") == 0)
- {
- ret.push_back('>');
- i += 4;
- }
- else if (str.compare(i, 6, "'") == 0)
- {
- ret.push_back('\'');
- i += 6;
- }
- else if (str.compare(i, 6, """) == 0)
- {
- ret.push_back('"');
- i += 6;
- }
- else
- {
- ret.push_back(str[i]);
- i++;
- }
- }
- return ret;
-}
-
-
// Print method for the messages in a Partition object.
std::ostream& operator<<(std::ostream& out, const Partition& partition)
{
@@ -127,42 +75,6 @@ std::ostream& operator<<(std::ostream& out, const Partition& partition)
}
-// Print method for OperationDetailStatus.
-std::ostream& operator<<(std::ostream& out, const OperationDetailStatus od_status)
-{
- switch (od_status)
- {
- case STATUS_NONE: out << "NONE"; break;
- case STATUS_EXECUTE: out << "EXECUTE"; break;
- case STATUS_SUCCESS: out << "SUCCESS"; break;
- case STATUS_ERROR: out << "ERROR"; break;
- case STATUS_INFO: out << "INFO"; break;
- case STATUS_WARNING: out << "WARNING"; break;
- default: break;
- }
- return out;
-}
-
-
-// Print method for an OperationDetail object.
-std::ostream& operator<<(std::ostream& out, const OperationDetail& od)
-{
- out << strip_markup(od.get_description());
- Glib::ustring elapsed = od.get_elapsed_time();
- if (! elapsed.empty())
- out << " " << elapsed;
- if (od.get_status() != STATUS_NONE)
- out << " (" << od.get_status() << ")";
- out << "\n";
-
- for (unsigned int i = 0; i < od.get_childs().size(); i++)
- {
- out << *od.get_childs()[i];
- }
- return out;
-}
-
-
// Printable file system type which meets the requirements for a Google Test name.
// Use GParted's file system names except when they contains any non-alphabetic chars.
// Reference:
@@ -724,38 +636,6 @@ INSTANTIATE_TEST_CASE_P(My,
} // namespace GParted
-// Re-execute current executable using xvfb-run so that it provides a virtual X11 display.
-void exec_using_xvfb_run(int argc, char** argv)
-{
- // argc+2 = Space for "xvfb-run" command, existing argc strings plus NULL pointer.
- size_t size = sizeof(char*) * (argc+2);
- char** new_argv = (char**)malloc(size);
- if (new_argv == NULL)
- {
- fprintf(stderr, "Failed to allocate %lu bytes of memory. errno=%d,%s\n",
- (unsigned long)size, errno, strerror(errno));
- exit(EXIT_FAILURE);
- }
-
- new_argv[0] = strdup("xvfb-run");
- if (new_argv[0] == NULL)
- {
- fprintf(stderr, "Failed to allocate %lu bytes of memory. errno=%d,%s\n",
- (unsigned long)strlen(new_argv[0])+1, errno, strerror(errno));
- exit(EXIT_FAILURE);
- }
-
- // Copy argv pointers including final NULL pointer.
- for (unsigned int i = 0; i <= (unsigned)argc; i++)
- new_argv[i+1] = argv[i];
-
- execvp(new_argv[0], new_argv);
- fprintf(stderr, "Failed to execute '%s %s ...'. errno=%d,%s\n", new_argv[0], new_argv[1],
- errno, strerror(errno));
- exit(EXIT_FAILURE);
-}
-
-
// Custom Google Test main().
// Reference:
// * Google Test, Primer, Writing the main() function
@@ -763,14 +643,7 @@ void exec_using_xvfb_run(int argc, char** argv)
int main(int argc, char** argv)
{
printf("Running main() from %s\n", __FILE__);
-
- const char* display = getenv("DISPLAY");
- if (display == NULL)
- {
- printf("DISPLAY environment variable unset. Executing 'xvfb-run %s ...'\n", argv[0]);
- exec_using_xvfb_run(argc, argv);
- }
- printf("DISPLAY=\"%s\"\n", display);
+ GParted::ensure_x11_display(argc, argv);
// Initialise threading in GParted to allow FileSystem interface classes to
// successfully use Utils:: and Filesystem::execute_command(). Must be before