sgstream: detect two directly following CR/LF EOL correctly in skipeol,
supply a testcase for this.
This commit is contained in:
parent
d90abdcb44
commit
a4ae7b2059
@ -47,6 +47,10 @@ add_executable(test_strings strutils_test.cxx )
|
|||||||
add_test(test_strings ${EXECUTABLE_OUTPUT_PATH}/test_strings)
|
add_test(test_strings ${EXECUTABLE_OUTPUT_PATH}/test_strings)
|
||||||
target_link_libraries(test_strings ${TEST_LIBS})
|
target_link_libraries(test_strings ${TEST_LIBS})
|
||||||
|
|
||||||
|
add_executable(test_streams sgstream_test.cxx )
|
||||||
|
add_test(test_streams ${EXECUTABLE_OUTPUT_PATH}/test_streams)
|
||||||
|
target_link_libraries(test_streams ${TEST_LIBS})
|
||||||
|
|
||||||
add_executable(test_path path_test.cxx )
|
add_executable(test_path path_test.cxx )
|
||||||
add_test(test_path ${EXECUTABLE_OUTPUT_PATH}/test_path)
|
add_test(test_path ${EXECUTABLE_OUTPUT_PATH}/test_path)
|
||||||
target_link_libraries(test_path ${TEST_LIBS})
|
target_link_libraries(test_path ${TEST_LIBS})
|
||||||
|
@ -102,14 +102,17 @@ istream&
|
|||||||
skipeol( istream& in )
|
skipeol( istream& in )
|
||||||
{
|
{
|
||||||
char c = '\0';
|
char c = '\0';
|
||||||
// skip to end of line.
|
|
||||||
|
|
||||||
|
// make sure we detect LF, CR and CR/LF
|
||||||
while ( in.get(c) ) {
|
while ( in.get(c) ) {
|
||||||
if ( (c == '\n') || (c == '\r') ) {
|
if (c == '\n')
|
||||||
break;
|
break;
|
||||||
}
|
else if (c == '\r') {
|
||||||
|
if (in.peek() == '\n')
|
||||||
|
in.get(c);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
51
simgear/misc/sgstream_test.cxx
Normal file
51
simgear/misc/sgstream_test.cxx
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
#include <cstdlib> // for EXIT_FAILURE
|
||||||
|
|
||||||
|
using std::ofstream;
|
||||||
|
using std::cout;
|
||||||
|
using std::endl;
|
||||||
|
|
||||||
|
#include <simgear/misc/sgstream.hxx>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
const char* fileName = "testfile";
|
||||||
|
{
|
||||||
|
ofstream f;
|
||||||
|
f.open(fileName, std::ios::binary | std::ios::trunc | std::ios::out);
|
||||||
|
f.write("first line ends with line-feed\n"
|
||||||
|
"second line ends with just a cr\r"
|
||||||
|
"third line ends with both\r\n"
|
||||||
|
"fourth line as well\r\n"
|
||||||
|
"fifth line is another CR/LF line\r\n"
|
||||||
|
"end of test\r\n", 1024);
|
||||||
|
f.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
sg_gzifstream sg(fileName);
|
||||||
|
std::string stuff;
|
||||||
|
sg >> skipeol;
|
||||||
|
sg >> stuff;
|
||||||
|
if (stuff != "second") return EXIT_FAILURE;
|
||||||
|
cout << "Detection of LF works." << endl;
|
||||||
|
|
||||||
|
sg >> skipeol;
|
||||||
|
sg >> stuff;
|
||||||
|
if (stuff != "third") return EXIT_FAILURE;
|
||||||
|
cout << "Detection of CR works." << endl;
|
||||||
|
|
||||||
|
sg >> skipeol;
|
||||||
|
sg >> stuff;
|
||||||
|
if (stuff != "fourth") return EXIT_FAILURE;
|
||||||
|
cout << "Detection of CR/LF works." << endl;
|
||||||
|
|
||||||
|
sg >> skipeol;
|
||||||
|
sg >> skipeol;
|
||||||
|
sg >> stuff;
|
||||||
|
if (stuff != "end") return EXIT_FAILURE;
|
||||||
|
cout << "Detection of 2 following CR/LF lines works." << endl;
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user