ORCA-C/Tests/Spec.Conform/SPC17.6.0.1.CC

243 lines
6.1 KiB
C++

/* Special Conformance Test 17.6.0.1: Verification of fgetc, getc, getchar, */
/* and ungetc with standard input */
/* */
/* The first action of the test is to verify that standard input is working. */
/* The tester will be prompted for a string three times (once each for fgetc,*/
/* getc, and getchar); this string will then be echoed to standard out and to*/
/* standard error out. The tester needs to verify that the output string is */
/* correct. */
/* */
/* The test will then redirect standard input to a temporary file created on */
/* the work prefix. The tester needs to verify that the characters sent to */
/* standard output and standard error output are the lower case alphabetic */
/* characters. */
/* */
/* Finally, standard input is reset to the keyboard. The tester will be */
/* prompted for a new string to be entered from the keyboard. The tester */
/* needs to verify that the string is correctly echoed to the screen. */
#include <stdlib.h>
#include <stdio.h>
int main (void)
{
int i, j;
char s [255], ch;
FILE *f1, *saveStdin;
/* This part of the test that standard input and standard output are working */
printf ("Please enter a string\n"); /* test fgetc with standard in */
j = 0;
while ((i = fgetc (stdin)) != '\n')
{
if (i == EOF)
goto Fail3;
s [j++] = i;
}
s [j] = '\0';
printf ("The string entered is:\n");
i = fputs (s, stdout);
if (i)
goto Fail4;
printf ("\n");
i = fputs (s, stderr);
if (i)
goto Fail5;
printf ("\n");
printf ("Please enter a string\n"); /* test getc with standard in */
j = 0;
while ((i = getc (stdin)) != '\n')
{
if (i == EOF)
goto Fail3;
s [j++] = i;
}
s [j] = '\0';
printf ("The string entered is:\n");
i = fputs (s, stdout);
if (i)
goto Fail4;
printf ("\n");
i = fputs (s, stderr);
if (i)
goto Fail5;
printf ("\n");
printf ("Please enter a string\n"); /* test getchar */
j = 0;
while ( (i = getchar ()) != '\n' )
{
if (i == EOF)
goto Fail3;
s [j++] = i;
}
s [j] = '\0';
printf ("The string entered is:\n");
i = fputs (s, stdout);
if (i)
goto Fail4;
printf ("\n");
i = fputs (s, stderr);
if (i)
goto Fail5;
printf ("\n");
/* Now test fgetc, getc, and getchar by redirecting standard input. */
f1 = fopen ("3/tmp", "w"); /* create new file */
if (f1 == NULL)
goto Fail;
for (ch = 'a', i = 0; i < 26; i++)
{
j = fputc (ch, f1);
if ( (char) j != ch )
goto Fail2;
ch++;
}
j = fputc ('\n', f1);
if (j != '\n')
goto Fail2;
saveStdin = stdin;
stdin = freopen ("3/tmp", "r", f1); /* reassign standard in */
if (stdin == NULL)
goto Fail1;
j = 0; /* read file with fgetc */
while ( (i = fgetc (stdin)) != EOF) {
putchar(i);
s [j++] = i;
}
s [j] = '\0';
if (! feof (stdin) )
goto Fail3;
printf ("The string read from the temp file is:\n");
i = fputs (s, stdout);
if (i)
goto Fail4;
i = fputs (s, stderr);
if (i)
goto Fail5;
rewind (stdin); /* read file with getc */
j = 0;
while ( (i = getc (stdin)) != EOF)
s [j++] = i;
s [j] = '\0';
if (! feof (stdin) )
goto Fail3;
printf ("The string read from the temp file is:\n");
i = fputs (s, stdout);
if (i)
goto Fail4;
i = fputs (s, stderr);
if (i)
goto Fail5;
rewind (stdin); /* read file with getchar */
j = 0;
while ( (i = getchar ()) != EOF)
s [j++] = i;
s [j] = '\0';
if (! feof (stdin) )
goto Fail3;
printf ("The string read from the temp file is:\n");
i = fputs (s, stdout);
if (i)
goto Fail4;
i = fputs (s, stderr);
if (i)
goto Fail5;
/* Now reset standard input and ensure it's ok. */
stdin = saveStdin; /* reassign standard in */
printf ("Please enter a string\n"); /* read standard in with fgetc */
j = 0;
while ((i = fgetc (stdin)) != '\n')
{
if (i == EOF)
goto Fail3;
s [j++] = i;
}
s [j] = '\0';
printf ("The string entered is:\n");
i = fputs (s, stdout);
if (i)
goto Fail4;
printf ("\n");
i = fputs (s, stderr);
if (i)
goto Fail5;
printf ("\n");
printf ("Please enter a string\n"); /* read standard in with getc */
j = 0;
while ((i = getc (stdin)) != '\n')
{
if (i == EOF)
goto Fail3;
s [j++] = i;
}
s [j] = '\0';
printf ("The string entered is:\n");
i = fputs (s, stdout);
if (i)
goto Fail4;
printf ("\n");
i = fputs (s, stderr);
if (i)
goto Fail5;
printf ("\n");
printf ("Please enter a string\n"); /* read standard in with getchar */
j = 0;
while ( (i = getchar ()) != '\n' )
{
if (i == EOF)
goto Fail3;
s [j++] = i;
}
s [j] = '\0';
printf ("The string entered is:\n");
i = fputs (s, stdout);
if (i)
goto Fail4;
printf ("\n");
i = fputs (s, stderr);
if (i)
goto Fail5;
printf ("\n");
return 0;
Fail:
perror ("File open failure in Special Conformance Test 17.6.0.1 ");
exit (0);
Fail1:
printf ("Error when reopening stream\n");
exit (0);
Fail2:
printf ("Error when writing file\n");
exit (0);
Fail3:
printf ("Error when reading from standard in\n");
exit (0);
Fail4:
printf ("Error when writing to standard out\n");
exit (0);
Fail5:
printf ("Error when writing to standard error out\n");
exit (0);
}