00001 /**
00002 * @copyright
00003 * ====================================================================
00004 * Copyright (c) 2000-2004 CollabNet. All rights reserved.
00005 *
00006 * This software is licensed as described in the file COPYING, which
00007 * you should have received as part of this distribution. The terms
00008 * are also available at http://subversion.tigris.org/license-1.html.
00009 * If newer versions of this license are posted there, you may use a
00010 * newer version instead, at your option.
00011 *
00012 * This software consists of voluntary contributions made by many
00013 * individuals. For exact contribution history, see the revision
00014 * history and logs, available at http://subversion.tigris.org/.
00015 * ====================================================================
00016 * @endcopyright
00017 *
00018 * @file svn_test.h
00019 * @brief public interfaces for test programs
00020 */
00021
00022 #ifndef SVN_TEST_H
00023 #define SVN_TEST_H
00024
00025 #include <apr_pools.h>
00026 #include "svn_delta.h"
00027 #include "svn_path.h"
00028 #include "svn_types.h"
00029 #include "svn_error.h"
00030 #include "svn_string.h"
00031
00032
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif /* __cplusplus */
00036
00037
00038 /** Prototype for test driver functions. */
00039 typedef svn_error_t* (*svn_test_driver_t) (const char **msg,
00040 svn_boolean_t msg_only,
00041 apr_pool_t *pool);
00042
00043 /** Each test gets a test descriptor, holding the function and other associated
00044 * data. */
00045 struct svn_test_descriptor_t
00046 {
00047 /** A pointer to the test driver function. */
00048 svn_test_driver_t func;
00049
00050 /** Is the test marked XFAIL? */
00051 int xfail;
00052 };
00053
00054 /** All Subversion test programs include an array of @c svn_test_descriptor_t's
00055 * (all of our sub-tests) that begins and ends with a @c SVN_TEST_NULL entry.
00056 */
00057 extern struct svn_test_descriptor_t test_funcs[];
00058
00059 /** A null initializer for the test descriptor. */
00060 #define SVN_TEST_NULL {NULL, 0}
00061
00062 /** Initializer for PASS tests */
00063 #define SVN_TEST_PASS(func) {func, 0}
00064
00065 /** Initializer for XFAIL tests */
00066 #define SVN_TEST_XFAIL(func) {func, 1}
00067
00068
00069 /** Return a pseudo-random number based on @a seed, and modify @a seed.
00070 *
00071 * This is a "good" pseudo-random number generator, intended to replace
00072 * all those "bad" @c rand() implementations out there.
00073 */
00074 apr_uint32_t svn_test_rand (apr_uint32_t *seed);
00075
00076
00077 /** Add @a path to the test cleanup list.
00078 */
00079 void svn_test_add_dir_cleanup (const char *path);
00080
00081
00082
00083 /** Set @a *editor and @a *edit_baton to an editor that prints its
00084 * arguments to @a out_stream. The edit starts at @a path, that is,
00085 * @a path will be prepended to the appropriate paths in the output.
00086 * Allocate the editor in @a pool.
00087 *
00088 * @a editor_name is a name for the editor, a string that will be
00089 * prepended to the editor output as shown below. @a editor_name may
00090 * be the empty string, but it may not be null.
00091 *
00092 * @a verbose is a flag for specifying whether or not your want all the
00093 * nitty gritty details displayed. When @a verbose is @c FALSE, each
00094 * editor function will print only a one-line summary.
00095 *
00096 * @a indentation is the number of spaces to indent by at each level; use
00097 * 0 for no indentation. The indent level is always the same for a
00098 * given call (i.e, stack frame).
00099 *
00100 * SOME EXAMPLES
00101 *
00102 * With an indentation of 3, editor name of "COMMIT-TEST" and with
00103 * verbose = @c TRUE
00104 *
00105 *<pre> [COMMIT-TEST] open_root (wc)
00106 * base_revision: 1</pre>
00107 *<pre> [COMMIT-TEST] open_directory (wc/A)
00108 * parent: wc
00109 * base_revision: 1</pre>
00110 *<pre> [COMMIT-TEST] delete_entry (wc/A/B)</pre>
00111 *<pre> [COMMIT-TEST] open_file (wc/A/mu)
00112 * parent: wc/A
00113 * base_revision: 1</pre>
00114 *<pre> [COMMIT-TEST] change_file_prop (wc/A/mu)
00115 * name: foo
00116 * value: bar</pre>
00117 *<pre> [COMMIT-TEST] close_file (wc/A/mu)</pre>
00118 *<pre> [COMMIT-TEST] close_directory (wc/A)</pre>
00119 *<pre> [COMMIT-TEST] add_file (wc/zeta)
00120 * parent: wc
00121 * copyfrom_path:
00122 * copyfrom_revision: 0</pre>
00123 *<pre> [COMMIT-TEST] open_file (wc/iota)
00124 * parent: wc
00125 * base_revision: 1</pre>
00126 *<pre> [COMMIT-TEST] close_directory (wc)</pre>
00127 *<pre> [COMMIT-TEST] apply_textdelta (wc/iota)</pre>
00128 *<pre> [COMMIT-TEST] window_handler (2 ops)
00129 * (1) new text: length 11
00130 * (2) source text: offset 0, length 0</pre>
00131 *<pre> [COMMIT-TEST] window_handler (EOT)</pre>
00132 *<pre> [COMMIT-TEST] close_file (wc/iota)</pre>
00133 *<pre> [COMMIT-TEST] apply_textdelta (wc/zeta)</pre>
00134 *<pre> [COMMIT-TEST] window_handler (1 ops)
00135 * (1) new text: length 11</pre>
00136 *<pre> [COMMIT-TEST] window_handler (EOT)</pre>
00137 *<pre> [COMMIT-TEST] close_file (wc/zeta)</pre>
00138 *<pre> [COMMIT-TEST] close_edit</pre>
00139 *
00140 * The same example as above, but with verbose = @c FALSE
00141 *
00142 *<pre> [COMMIT-TEST] open_root (wc)
00143 * [COMMIT-TEST] open_directory (wc/A)
00144 * [COMMIT-TEST] delete_entry (wc/A/B)
00145 * [COMMIT-TEST] open_file (wc/A/mu)
00146 * [COMMIT-TEST] change_file_prop (wc/A/mu)
00147 * [COMMIT-TEST] close_file (wc/A/mu)
00148 * [COMMIT-TEST] close_directory (wc/A)
00149 * [COMMIT-TEST] add_file (wc/zeta)
00150 * [COMMIT-TEST] open_file (wc/iota)
00151 * [COMMIT-TEST] close_directory (wc)
00152 * [COMMIT-TEST] apply_textdelta (wc/iota)
00153 * [COMMIT-TEST] close_file (wc/iota)
00154 * [COMMIT-TEST] apply_textdelta (wc/zeta)
00155 * [COMMIT-TEST] close_file (wc/zeta)
00156 * [COMMIT-TEST] close_edit</pre>
00157 *
00158 * This is implemented in tests/libsvn_test_editor.la
00159 */
00160 svn_error_t *svn_test_get_editor (const svn_delta_editor_t **editor,
00161 void **edit_baton,
00162 const char *editor_name,
00163 svn_stream_t *out_stream,
00164 int indentation,
00165 svn_boolean_t verbose,
00166 const char *path,
00167 apr_pool_t *pool);
00168
00169 #ifdef __cplusplus
00170 }
00171 #endif /* __cplusplus */
00172
00173 #endif /* SVN_TEST_H */
1.2.14 written by Dimitri van Heesch,
© 1997-2002