Skip to content

Commit

Permalink
Testsuite adjustments from OCamlPro#109
Browse files Browse the repository at this point in the history
  • Loading branch information
ddeclerck committed Sep 20, 2024
1 parent 015735d commit 1f8026e
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 29 deletions.
5 changes: 5 additions & 0 deletions cobc/ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,11 @@
* codegen.c: handle profiling code generation under the
cb_flag_prof guard

2024-03-15 Fabrice Le Fessant <[email protected]>

* error.c (print_error_prefix): add cobc_slashify to replace backslashes
by slashes, only if COB_IS_RUNNING_IN_TESTMODE is set.

2024-02-19 Boris Eng <[email protected]>

* parser.y (screen_value_clause): replaced basic literals by literals
Expand Down
8 changes: 6 additions & 2 deletions cobc/cobc.c
Original file line number Diff line number Diff line change
Expand Up @@ -9431,10 +9431,14 @@ main (int argc, char **argv)
struct cb_text_list *l;
fprintf (cb_depend_file, "%s: \\\n", cb_depend_target);
for (l = cb_depend_list; l; l = l->next) {
fprintf (cb_depend_file, " %s%s\n", l->text, l->next ? " \\" : "\n");
char *filename = cobc_slashify (l->text);
fprintf (cb_depend_file, " %s%s\n", filename, l->next ? " \\" : "\n");
cobc_free (filename);
}
for (l = cb_depend_list; l; l = l->next) {
fprintf (cb_depend_file, "%s:\n", l->text);
char *filename = cobc_slashify (l->text);
fprintf (cb_depend_file, "%s:\n", filename);
cobc_free (filename);
}
fclose (cb_depend_file);
}
Expand Down
2 changes: 2 additions & 0 deletions cobc/cobc.h
Original file line number Diff line number Diff line change
Expand Up @@ -669,6 +669,8 @@ DECLNORET extern void cobc_terminate_exit (const char *, const char *) COB_A_NO

extern void cobc_set_listing_header_code (void);

extern char * cobc_slashify (const char *);

/* reserved.c */
extern struct reserved_word_list *cobc_user_res_list;

Expand Down
32 changes: 32 additions & 0 deletions cobc/error.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,42 @@ size_t cb_msg_style;

DECLNORET static void cobc_too_many_errors (void) COB_A_NORETURN;

static int is_test = -1;

/* Returns a copy of the argument with backslashes replaced by slashes
in filenames, only if COB_IS_RUNNING_IN_TESTMODE. This mode simplifies
the test of outputs, as they will be similar on Unix and Windows.
*/
char *
cobc_slashify (const char *src)
{
if (is_test < 0)
is_test = !!getenv ("COB_IS_RUNNING_IN_TESTMODE");

if (is_test){
int i;
int len = strlen (src);
char *dst = cobc_malloc (len+1);
for (i=0; i<len; i++){
char c = src[i];
if ( c == '\\' )
dst[i] = '/';
else
dst[i] = c;
}
dst[i] = 0;
return dst;
} else
return cobc_strdup (src);
}

static void
print_error_prefix (const char *file, int line, const char *prefix)
{
if (file) {
char *absfile = NULL ;
char *tmpfile = cobc_slashify (file);
file = tmpfile;
if (cb_diagnostics_absolute_paths
&& strcmp (file, COB_DASH) != 0
&& file[0] != '/'
Expand Down Expand Up @@ -100,6 +131,7 @@ print_error_prefix (const char *file, int line, const char *prefix)
fprintf (stderr, "%s:%d: ", file, line);
}
if (absfile) cobc_free (absfile);
cobc_free (tmpfile);
}
if (prefix) {
fprintf (stderr, "%s", prefix);
Expand Down
4 changes: 2 additions & 2 deletions cobc/pplex.l
Original file line number Diff line number Diff line change
Expand Up @@ -1299,7 +1299,7 @@ ppopen_get_file (const char *name)
ppin = fopen (name, "rb");
#endif
if (!ppin) {
cb_error ("%s: %s", name, cb_get_strerror ());
cb_error ("%s: %s", cobc_slashify (name), cb_get_strerror ());
/* Note: postpone error exit as we need the saved buffers later on */
return 0;
}
Expand Down Expand Up @@ -1728,7 +1728,7 @@ ppcopy (const char *name, const char *lib, struct cb_replace_list *replace_list)
/* ensure to have errno from name as specified, not from another file */
(void)access (plexbuff1, R_OK);
/* pass file error as we have no more places to check */
cb_error ("%s: %s", plexbuff1, cb_get_strerror ());
cb_error ("%s: %s", cobc_slashify (plexbuff1), cb_get_strerror ());
}

/* On COPY, open error restore old file */
Expand Down
64 changes: 39 additions & 25 deletions tests/testsuite.src/used_binaries.at
Original file line number Diff line number Diff line change
Expand Up @@ -396,13 +396,28 @@ AT_DATA([prog.cob], [
EXIT PROGRAM.
])

AT_CHECK([TMPDIR="" TMP="notthere" TEMP="" $COMPILE prog.cob], [0], [],
[libcob: warning: Temporary directory TMP is invalid, adjust TMPDIR!
AT_CHECK([TMPDIR="" TMP="notthere" TEMP="" $COMPILE prog.cob 2> compiler.output], [0], [],
[],[
# On Windows, we get a failure from gcc, so the binary is not created, the stderr is mixed and exit code is 1.
AT_CHECK([grep libcob: compiler.output], [0], [libcob: warning: Temporary directory TMP is invalid, adjust TMPDIR!
])
AT_CHECK([$COBCRUN_DIRECT ./prog], [0], [OK], [])
AT_CHECK([TMPDIR="" TMP="" TEMP="./prog.cob" $COMPILE prog.cob], [0], [],
[libcob: warning: Temporary directory TEMP is invalid, adjust TMPDIR!
],
[
AT_CHECK([cat compiler.output], [0], [libcob: warning: Temporary directory TMP is invalid, adjust TMPDIR!
])
AT_CHECK([$COBCRUN_DIRECT ./prog], [0], [OK], [])
])

AT_CHECK([TMPDIR="" TMP="" TEMP="./prog.cob" $COMPILE prog.cob 2> compiler.output], [0], [],
[],[
AT_CHECK([grep libcob: compiler.output], [0], [libcob: warning: Temporary directory TEMP is invalid, adjust TMPDIR!
])
],
[
AT_CHECK([cat compiler.output], [0], [libcob: warning: Temporary directory TEMP is invalid, adjust TMPDIR!
])
])

# TMPDIR is only checked when actually needed which is currently only the case
# for SORT
#AT_CHECK([TMPDIR="./prog.cob" $COBCRUN_DIRECT ./prog], [0], [OK],
Expand Down Expand Up @@ -1081,15 +1096,16 @@ AT_CHECK([$COBC -fdiagnostics-plain-output -fdiagnostics-show-caret -Wno-others
]])

AT_CHECK([$COMPILE -fdiagnostics-absolute-paths -Wall prog.cob 2> compiler.output], [1])
AT_CAPTURE_FILE([compiler.output])

AT_CHECK([echo "$PWD/prog.cob:7: error: CRUD.CPY: No such file or directory" > expected.output])
AT_CHECK([echo "$PWD/prog.cob:6: warning: numeric value is expected" >> expected.output])
AT_CHECK([echo "$PWD/prog.cob:14: warning: ignoring redundant ." >> expected.output])
AT_CAPTURE_FILE([expected.output])

# note: -fdiagnostics-absolute-paths will show the realpath,
# so for MSYS/MSVC builds that will be x:\something\prog.cob, not the output of PWD,
# but the _return_path function from atlocal may adjust that
AT_CHECK([cat compiler.output | tr '\\' '/' | $SED "s|$(_return_path "$(pwd)")|DIR|"], [0],
[DIR/prog.cob:7: error: CRUD.CPY: No such file or directory
DIR/prog.cob:6: warning: numeric value is expected
DIR/prog.cob:14: warning: ignoring redundant .
], [], [echo set: $SED "s|$(_return_path "$(pwd)")|DIR|"])
AT_CHECK([[cat compiler.output | tr '[:upper:]' '[:lower:]' | tr -d ':/\\' > compiler.output2]])
AT_CHECK([[cat expected.output | tr '[:upper:]' '[:lower:]' | tr -d ':/\\' > expected.output2]])
AT_CHECK([diff compiler.output2 expected.output2])

AT_CLEANUP

Expand All @@ -1099,13 +1115,13 @@ AT_SETUP([check include header file])

AT_DATA([filec.h], [
/* COB_EXT_IMPORT will be defined by libcob.h up-front */
COB_EXT_IMPORT void f (char *, long);
COB_EXT_IMPORT void rename (const char *, const char*);
])
AT_DATA([prog.cob], [
IDENTIFICATION DIVISION.
PROGRAM-ID. prog.
PROCEDURE DIVISION.
CALL "f" USING "Hello".
CALL "rename" USING "Hello".
])

# dynamic call - program seems correct
Expand All @@ -1119,10 +1135,8 @@ AT_DATA([prog2.cob], [
IDENTIFICATION DIVISION.
PROGRAM-ID. prog.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 long USAGE BINARY-C-LONG.
PROCEDURE DIVISION.
CALL "f" USING "Hello" BY VALUE long RETURNING NOTHING.
CALL "rename" USING "Hello" "Hello2" RETURNING NOTHING.
])

# note: we likely need to build an import library for some environments
Expand Down Expand Up @@ -1153,22 +1167,22 @@ AT_CHECK([$COMPILE_MODULE -I . --include "filec.h" -fstatic-call prog2.cob -o pr
# * putting RETURNING NOTHING is not supported
# * putting RETURNING OMITTED is ok, but triggers a warning (see stderr)

AT_DATA([f.copy], [
AT_DATA([rename.copy], [
IDENTIFICATION DIVISION.
PROGRAM-ID. f PROTOTYPE.
PROGRAM-ID. rename PROTOTYPE.
DATA DIVISION.
LINKAGE SECTION.
01 a PIC X(20).
01 b BINARY-C-LONG.
PROCEDURE DIVISION USING a BY VALUE b RETURNING OMITTED.
END PROGRAM f.
01 b PIC X(20).
PROCEDURE DIVISION USING a b RETURNING OMITTED.
END PROGRAM rename.
])

AT_CHECK([$COMPILE_MODULE -Wno-unfinished --copy "f.copy" -fstatic-call prog2.cob -o prog2c], [0], [],
AT_CHECK([$COMPILE_MODULE -Wno-unfinished --copy "rename.copy" -fstatic-call prog2.cob -o prog2c], [0], [],
[prog2.cob:8: warning: unexpected RETURNING item
], [
# Previous test "failed" --> retry with import library
AT_CHECK([$COMPILE_MODULE -Wno-unfinished --copy "f.copy" -fstatic-call -L. -lfilec prog2.cob -o prog2c], [0], ignore, ignore)]
AT_CHECK([$COMPILE_MODULE -Wno-unfinished --copy "rename.copy" -fstatic-call -L. -lfilec prog2.cob -o prog2c], [0], ignore, ignore)]
)

AT_CLEANUP

0 comments on commit 1f8026e

Please sign in to comment.