summaryrefslogtreecommitdiff
path: root/infrastructure/buildenv-testmain-template.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'infrastructure/buildenv-testmain-template.cpp')
-rw-r--r--infrastructure/buildenv-testmain-template.cpp197
1 files changed, 197 insertions, 0 deletions
diff --git a/infrastructure/buildenv-testmain-template.cpp b/infrastructure/buildenv-testmain-template.cpp
new file mode 100644
index 00000000..252a9f0f
--- /dev/null
+++ b/infrastructure/buildenv-testmain-template.cpp
@@ -0,0 +1,197 @@
+// distribution boxbackup-0.10 (svn version: 494)
+//
+// Copyright (c) 2003 - 2006
+// Ben Summers and contributors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+// 3. All use of this software and associated advertising materials must
+// display the following acknowledgment:
+// This product includes software developed by Ben Summers.
+// 4. The names of the Authors may not be used to endorse or promote
+// products derived from this software without specific prior written
+// permission.
+//
+// [Where legally impermissible the Authors do not disclaim liability for
+// direct physical injury or death caused solely by defects in the software
+// unless it is modified by a third party.]
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT,
+// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+//
+//
+//
+// AUTOMATICALLY GENERATED FILE
+// do not edit
+//
+
+
+// --------------------------------------------------------------------------
+//
+// File
+// Name: testmain.template.h
+// Purpose: Template file for running tests
+// Created: 2003/07/08
+//
+// --------------------------------------------------------------------------
+
+#include "Box.h"
+
+#include "stdio.h"
+#include <exception>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#ifdef WIN32
+ #include "emu.h"
+#else
+ #include <syslog.h>
+#endif
+
+#include "MemLeakFindOn.h"
+
+int test(int argc, const char *argv[]);
+
+#ifdef NDEBUG
+ #define MODE_TEXT "release"
+#else
+ #define MODE_TEXT "debug"
+#endif
+
+int failures = 0;
+
+int filedes_open_at_beginning = -1;
+
+#ifdef WIN32
+
+// any way to check for open file descriptors on Win32?
+inline int count_filedes() { return 0; }
+inline bool checkfilesleftopen() { return false; }
+
+#else // !WIN32
+
+int count_filedes()
+{
+ int c = 0;
+
+ // See how many file descriptors there are with values < 256
+ for(int d = 0; d < 256; ++d)
+ {
+ if(::fcntl(d, F_GETFD) != -1)
+ {
+ // File descriptor obviously exists
+ ++c;
+ }
+ }
+
+ return c;
+}
+
+bool checkfilesleftopen()
+{
+ if(filedes_open_at_beginning == -1)
+ {
+ // Not used correctly, pretend that there were things left open so this gets invesitgated
+ return true;
+ }
+
+ // make sure syslog log file is closed, if it was opened
+ ::closelog();
+
+ // Count the file descriptors open
+ return filedes_open_at_beginning != count_filedes();
+}
+
+#endif
+
+int main(int argc, const char *argv[])
+{
+ // Start memory leak testing
+ MEMLEAKFINDER_START
+
+ // If there is more than one argument, then the test is doing something advanced, so leave it alone
+ bool fulltestmode = (argc == 1);
+
+ if(fulltestmode)
+ {
+ // Count open file descriptors for a very crude "files left open" test
+ filedes_open_at_beginning = count_filedes();
+
+ // banner
+ printf("Running test TEST_NAME in " MODE_TEXT " mode...\n");
+ }
+ try
+ {
+ int returncode = test(argc, argv);
+
+ // check for memory leaks, if enabled
+ #ifdef BOX_MEMORY_LEAK_TESTING
+ if(memleakfinder_numleaks() != 0)
+ {
+ failures++;
+ printf("FAILURE: Memory leaks detected\n");
+ printf("==== MEMORY LEAKS =================================\n");
+ memleakfinder_reportleaks();
+ printf("===================================================\n");
+ }
+ #endif
+
+ if(fulltestmode)
+ {
+ bool filesleftopen = checkfilesleftopen();
+ if(filesleftopen)
+ {
+ failures++;
+ printf("IMPLICIT TEST FAILED: Something left files open\n");
+ }
+ if(failures > 0)
+ {
+ printf("FAILED: %d tests failed\n", failures);
+ }
+ else
+ {
+ printf("PASSED\n");
+ }
+ }
+
+ return returncode;
+ }
+ catch(std::exception &e)
+ {
+ printf("FAILED: Exception caught: %s\n", e.what());
+ return 1;
+ }
+ catch(...)
+ {
+ printf("FAILED: Unknown exception caught\n");
+ return 1;
+ }
+ if(fulltestmode)
+ {
+ if(checkfilesleftopen())
+ {
+ printf("WARNING: Files were left open\n");
+ }
+ }
+}
+