add_test(test_strings ${EXECUTABLE_OUTPUT_PATH}/test_strings)
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_test(test_path ${EXECUTABLE_OUTPUT_PATH}/test_path)
target_link_libraries(test_path ${TEST_LIBS})
skipeol( istream& in )
{
char c = '\0';
- // skip to end of line.
+ // make sure we detect LF, CR and CR/LF
while ( in.get(c) ) {
- if ( (c == '\n') || (c == '\r') ) {
- break;
- }
+ if (c == '\n')
+ break;
+ else if (c == '\r') {
+ if (in.peek() == '\n')
+ in.get(c);
+ break;
+ }
}
-
return in;
}
--- /dev/null
+#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;
+}