summaryrefslogtreecommitdiffstats
path: root/src/fmt/test/util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/fmt/test/util.cc')
-rw-r--r--src/fmt/test/util.cc50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/fmt/test/util.cc b/src/fmt/test/util.cc
new file mode 100644
index 000000000..d08dcbdcb
--- /dev/null
+++ b/src/fmt/test/util.cc
@@ -0,0 +1,50 @@
+// Formatting library for C++ - test utilities
+//
+// Copyright (c) 2012 - present, Victor Zverovich
+// All rights reserved.
+//
+// For the license information refer to format.h.
+
+#include "util.h"
+
+#include <cstring>
+
+void increment(char* s) {
+ for (int i = static_cast<int>(std::strlen(s)) - 1; i >= 0; --i) {
+ if (s[i] != '9') {
+ ++s[i];
+ break;
+ }
+ s[i] = '0';
+ }
+}
+
+std::string get_system_error(int error_code) {
+#if defined(__MINGW32__) || !defined(_WIN32)
+ return strerror(error_code);
+#else
+ enum { BUFFER_SIZE = 200 };
+ char buffer[BUFFER_SIZE];
+ if (strerror_s(buffer, BUFFER_SIZE, error_code))
+ throw std::exception("strerror_s failed");
+ return buffer;
+#endif
+}
+
+const char* const FILE_CONTENT = "Don't panic!";
+
+fmt::buffered_file open_buffered_file(FILE** fp) {
+#if FMT_USE_FCNTL
+ fmt::file read_end, write_end;
+ fmt::file::pipe(read_end, write_end);
+ write_end.write(FILE_CONTENT, std::strlen(FILE_CONTENT));
+ write_end.close();
+ fmt::buffered_file f = read_end.fdopen("r");
+ if (fp) *fp = f.get();
+#else
+ fmt::buffered_file f("test-file", "w");
+ fputs(FILE_CONTENT, f.get());
+ if (fp) *fp = f.get();
+#endif
+ return f;
+}