diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2016-12-27 16:46:08 +0900 |
---|---|---|
committer | Jiyoung Yun <jy910.yun@samsung.com> | 2016-12-27 16:46:08 +0900 |
commit | db20f3f1bb8595633a7e16c8900fd401a453a6b5 (patch) | |
tree | e5435159cd1bf0519276363a6fe1663d1721bed3 /src/pal/tests/palsuite/c_runtime/fgets/test1/test1.cpp | |
parent | 4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (diff) | |
download | coreclr-db20f3f1bb8595633a7e16c8900fd401a453a6b5.tar.gz coreclr-db20f3f1bb8595633a7e16c8900fd401a453a6b5.tar.bz2 coreclr-db20f3f1bb8595633a7e16c8900fd401a453a6b5.zip |
Imported Upstream version 1.0.0.9127upstream/1.0.0.9127
Diffstat (limited to 'src/pal/tests/palsuite/c_runtime/fgets/test1/test1.cpp')
-rw-r--r-- | src/pal/tests/palsuite/c_runtime/fgets/test1/test1.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/c_runtime/fgets/test1/test1.cpp b/src/pal/tests/palsuite/c_runtime/fgets/test1/test1.cpp new file mode 100644 index 0000000000..5e0e62dece --- /dev/null +++ b/src/pal/tests/palsuite/c_runtime/fgets/test1/test1.cpp @@ -0,0 +1,102 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +/*============================================================================ +** +** Source: test1.c +** +** Purpose: Writes a simple file and calls fgets() to get a string shorter +** than the first line of the file. Verifies that the correct +** string is returned. +** +** +**==========================================================================*/ + +#include <palsuite.h> + +int __cdecl main(int argc, char **argv) +{ + const char outBuf1[] = "This is a test.\n"; + const char outBuf2[] = "This is too."; + char inBuf[sizeof(outBuf1) + sizeof(outBuf2)]; + const char filename[] = "testfile.tmp"; + const int offset = 5; /* value chosen arbitrarily */ + int actualLen; + int expectedLen; + FILE * fp; + + if (PAL_Initialize(argc, argv)) + { + return FAIL; + } + + + /*write the file that we will use to test */ + fp = fopen(filename, "w"); + if (fp == NULL) + { + Fail("Unable to open file for write.\n"); + } + + fwrite(outBuf1, sizeof(outBuf1[0]), sizeof(outBuf1), fp); + fwrite(outBuf2, sizeof(outBuf2[0]), sizeof(outBuf2), fp); + + if (fclose(fp) != 0) + { + Fail("Error closing a file opened for write.\n"); + } + + + /*now read back the entire first string*/ + fp = fopen(filename, "r"); + if (fp == NULL) + { + Fail("Unable to open file for read.\n"); + } + + /*note: +1 because strlen() returns the length of a string _not_ + including the NULL, while fgets() returns a string of specified + maximum length _including_ the NULL.*/ + if (fgets(inBuf, strlen(outBuf1) - offset + 1, fp) != inBuf) + { + Fail("Error reading from file using fgets.\n"); + } + + + expectedLen = strlen(outBuf1) - offset; + actualLen = strlen(inBuf); + + if (actualLen < expectedLen) + { + Fail("fgets() was asked to read a one-line string and given the " + "length of the string as a parameter. The string it has " + "read is too short.\n"); + } + if (actualLen > expectedLen) + { + Fail("fgets() was asked to read a one-line string and given the " + "length of the string as a parameter. The string it has " + "read is too long.\n"); + } + if (memcmp(inBuf, outBuf1, actualLen) != 0) + { + /*We didn't read back exactly outBuf1*/ + Fail("fgets() was asked to read a one-line string, and given the " + "length of the string as an parameter. It has returned a " + "string of the correct length, but the contents are not " + "correct.\n"); + } + + if (fclose(fp) != 0) + { + Fail("Error closing file after using fgets().\n"); + } + + + PAL_Terminate(); + return PASS; + +} + + |