Added sane option defaults when running valgrind

This commit is contained in:
Snaipe 2015-09-26 00:22:21 +02:00
parent 8db5def5e3
commit 2b9f14041c
6 changed files with 6677 additions and 12 deletions

View file

@ -20,6 +20,7 @@ include_directories(
/usr/local/include/
dependencies/libcsptr/include/
dependencies/dyncall/dyncall/
dependencies/valgrind/include/
)
if (MSVC)

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,4 @@
# List of source files which contain translatable strings.
src/log/normal.c
src/string/i18n.c
src/core/runner.c

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: criterion 2.0.0\n"
"Report-Msgid-Bugs-To: franklinmathieu+criterion@gmail.com\n"
"POT-Creation-Date: 2015-09-16 21:18+0200\n"
"POT-Creation-Date: 2015-09-26 00:02+0200\n"
"PO-Revision-Date: 2015-04-03 17:58+0200\n"
"Last-Translator: <franklinmathieu@gmail.com>\n"
"Language-Team: French\n"
@ -174,3 +174,25 @@ msgstr "L'instruction `%1$s` a levé une instance de l'exception `%2$s`."
#, c-format
msgid "The statement `%1$s` did not throw an instance of the `%2$s` exception."
msgstr "L'instruction `%1$s` n'a pas levé d'instance de l'exception `%2$s`."
#: src/core/runner.c:54
#, c-format
msgid ""
"%1$sWarning! Criterion has detected that it is running under valgrind, but "
"the no_early_exit option is explicitely disabled. Reports will not be "
"accurate!%2$s\n"
msgstr ""
"%1$sAttention! Criterion a détecté qu'il a été lancé avec valgrind, mais "
"l'option no_early_exit est explicitement désactivée. Les rapports d'erreur "
"ne seront pas précis!%2$s\n"
#: src/core/runner.c:58
#, c-format
msgid ""
"%1$sWarning! Criterion has detected that it is running under valgrind, but "
"the number of jobs have been explicitely set. Reports might appear confusing!"
"%2$s\n"
msgstr ""
"%1$sAttention! Criterion a détecté qu'il a été lancé avec valgrind, mais "
"le nombre de tâches est explicitement défini. Les rapports d'erreur "
"risquent d'être déroutants!%2$s\n"

View file

@ -21,9 +21,11 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#define CRITERION_LOGGING_COLORS
#include <stdlib.h>
#include <stdio.h>
#include <csptr/smalloc.h>
#include <valgrind/valgrind.h>
#include "criterion/criterion.h"
#include "criterion/options.h"
#include "criterion/ordered-set.h"
@ -46,6 +48,27 @@
#include "string/extmatch.h"
#endif
typedef const char *const msg_t;
#ifdef ENABLE_NLS
static msg_t msg_valgrind_early_exit = N_("%1$sWarning! Criterion has detected "
"that it is running under valgrind, but the no_early_exit option is "
"explicitely disabled. Reports will not be accurate!%2$s\n");
static msg_t msg_valgrind_jobs = N_("%1$sWarning! Criterion has detected "
"that it is running under valgrind, but the number of jobs have been "
"explicitely set. Reports might appear confusing!%2$s\n");
#else
static msg_t msg_valgrind_early_exit = "%sWarning! Criterion has detected "
"that it is running under valgrind, but the no_early_exit option is "
"explicitely disabled. Reports will not be accurate!%s\n";
static msg_t msg_valgrind_jobs = "%sWarning! Criterion has detected "
"that it is running under valgrind, but the number of jobs have been "
"explicitely set. Reports might appear confusing!%s\n";
#endif
#ifdef _MSC_VER
struct criterion_test *SECTION_START_(cr_tst);
struct criterion_suite *SECTION_START_(cr_sts);
@ -312,6 +335,11 @@ void disable_unmatching(struct criterion_test_set *set) {
struct criterion_test_set *criterion_initialize(void) {
init_i18n();
if (RUNNING_ON_VALGRIND) {
criterion_options.no_early_exit = 1;
criterion_options.jobs = 1;
}
if (resume_child()) // (windows only) resume from the fork
exit(0);
@ -386,6 +414,15 @@ static int criterion_run_all_tests_impl(struct criterion_test_set *set) {
report(PRE_ALL, set);
log(pre_all, set);
if (RUNNING_ON_VALGRIND) {
if (!criterion_options.no_early_exit)
criterion_pimportant(CRITERION_PREFIX_DASHES,
_(msg_valgrind_early_exit), FG_BOLD, RESET);
if (criterion_options.jobs != 1)
criterion_pimportant(CRITERION_PREFIX_DASHES,
_(msg_valgrind_jobs), FG_BOLD, RESET);
}
fflush(NULL); // flush everything before forking
g_worker_pipe = stdpipe();

View file

@ -144,24 +144,41 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) {
{0, 0, 0, 0 }
};
bool use_ascii = !strcmp("1", DEF(getenv("CRITERION_USE_ASCII"), "0"))
|| !strcmp("dumb", DEF(getenv("TERM"), "dumb"));
setlocale(LC_ALL, "");
#if ENABLE_NLS
textdomain (PACKAGE "-test");
#endif
char *env_always_succeed = getenv("CRITERION_ALWAYS_SUCCEED");
char *env_no_early_exit = getenv("CRITERION_NO_EARLY_EXIT");
char *env_fail_fast = getenv("CRITERION_FAIL_FAST");
char *env_use_ascii = getenv("CRITERION_USE_ASCII");
char *env_jobs = getenv("CRITERION_JOBS");
char *env_logging_threshold = getenv("CRITERION_VERBOSITY_LEVEL");
char *env_short_filename = getenv("CRITERION_SHORT_FILENAME");
bool is_term_dumb = !strcmp("dumb", DEF(getenv("TERM"), "dumb"));
struct criterion_options *opt = &criterion_options;
opt->always_succeed = !strcmp("1", DEF(getenv("CRITERION_ALWAYS_SUCCEED"), "0"));
opt->no_early_exit = !strcmp("1", DEF(getenv("CRITERION_NO_EARLY_EXIT") , "0"));
opt->fail_fast = !strcmp("1", DEF(getenv("CRITERION_FAIL_FAST") , "0"));
opt->use_ascii = use_ascii;
opt->jobs = atou(DEF(getenv("CRITERION_JOBS"), "0"));
opt->logging_threshold = atou(DEF(getenv("CRITERION_VERBOSITY_LEVEL"), "2"));
opt->short_filename = !strcmp("1", DEF(getenv("CRITERION_SHORT_FILENAME"), "0"));
if (env_always_succeed)
opt->always_succeed = !strcmp("1", env_always_succeed);
if (env_no_early_exit)
opt->no_early_exit = !strcmp("1", env_no_early_exit);
if (env_fail_fast)
opt->fail_fast = !strcmp("1", env_fail_fast);
if (env_use_ascii)
opt->use_ascii = !strcmp("1", env_use_ascii) || is_term_dumb;
if (env_jobs)
opt->jobs = atou(env_jobs);
if (env_logging_threshold)
opt->logging_threshold = atou(env_logging_threshold);
if (env_short_filename)
opt->short_filename = !strcmp("1", env_short_filename);
#ifdef HAVE_PCRE
opt->pattern = getenv("CRITERION_TEST_PATTERN");
char *env_pattern = getenv("CRITERION_TEST_PATTERN");
if (env_pattern)
opt->pattern = env_pattern;
#endif
bool use_tap = !strcmp("1", DEF(getenv("CRITERION_ENABLE_TAP"), "0"));