26GTEST_TEST(testFileParsing, defaultParsingOfATSVFileGivesAVectorOfStrings)
30 fs::path fileName {
"test.tsv"};
32 if (!fs::is_regular_file(fileName))
35 DryChem::FileParser parser {fileName};
37 auto rows = parser.parseDataFile(DryChem::AsRows());
38 std::vector<std::string> expectedRows {
"1\t2\t3",
"4\t5\t6",
"7\t8\t9",
"10\t11\t12"};
40 auto columns = parser.parseDataFile(DryChem::AsColumns());
41 std::vector<std::string> expectedColumns {
"1\t4\t7\t10",
"2\t5\t8\t11",
"3\t6\t9\t12"};
43 ASSERT_EQ(rows, expectedRows);
44 ASSERT_EQ(columns, expectedColumns);
47GTEST_TEST(testFileParsing, defaultParsingOfACSVFileGivesAVectorOfStrings)
51 fs::path fileName {
"test.csv"};
53 if (!fs::is_regular_file(fileName))
56 DryChem::FileParser parser {fileName};
58 auto rows = parser.parseDataFile(DryChem::AsRows());
59 std::vector<std::string> expectedRows {
"1,2,3",
"4,5,6",
"7,8,9",
"10,11,12"};
61 std::string csvDelimiter {
","};
63 auto columns = parser.parseDataFile(DryChem::AsColumns(), csvDelimiter);
64 std::vector<std::string> expectedColumns {
"1,4,7,10",
"2,5,8,11",
"3,6,9,12"};
66 ASSERT_EQ(rows, expectedRows);
67 ASSERT_EQ(columns, expectedColumns);
70GTEST_TEST(testFileParsing, weCanDefineOurOwnNonDefaultParserUsingALambdaExpression)
74 fs::path fileName {
"test.csv"};
76 if (!fs::is_regular_file(fileName))
79 DryChem::FileParser parser {fileName};
81 std::vector<std::string> rows;
84 [&rows](
const std::string& fileContents)
86 DryChem::Tokenizer tok {fileContents,
"\n"};
90 auto expectedRows = parser.parseDataFile(DryChem::AsRows());
92 ASSERT_EQ(rows, expectedRows);
95GTEST_TEST(testFileParsing, onceAFileIsParsedOnceAllSubsequentTimesUseCaches)
99 fs::path fileName {
"test.tsv"};
101 if (!fs::is_regular_file(fileName))
104 DryChem::FileParser parser {fileName};
107 auto [columns1, timeFor1stColumns]
108 = DryChem::timeAndInvoke(&DryChem::FileParser::parseDataFile<DryChem::AsColumns>, parser, DryChem::AsColumns());
111 auto [rows1, timeFor1stRows]
112 = DryChem::timeAndInvoke(&DryChem::FileParser::parseDataFile<DryChem::AsRows>, parser, DryChem::AsRows());
115 auto [columns2, timeFor2ndColumns]
116 = DryChem::timeAndInvoke(&DryChem::FileParser::parseDataFile<DryChem::AsColumns>, parser, DryChem::AsColumns());
119 auto [rows2, timeFor2ndRows]
120 = DryChem::timeAndInvoke(&DryChem::FileParser::parseDataFile<DryChem::AsRows>, parser, DryChem::AsRows());
122 ASSERT_EQ(rows1, rows2);
123 ASSERT_EQ(columns1, columns2);
125 ASSERT_TRUE(timeFor1stRows >= timeFor2ndRows && timeFor1stColumns > timeFor2ndColumns);
128GTEST_TEST(testFileParsing, returningTheFileNameAllowsUsToUtilizeTheFileSystemLibrary)
132 fs::path fileName {
"test.tsv"};
134 if (!fs::is_regular_file(fileName))
137 DryChem::FileParser parser {fileName};
139 ASSERT_TRUE(fs::is_regular_file(parser.getFileName()));
141 ASSERT_EQ(
"test", parser.getFileName().stem());
142 ASSERT_EQ(
".tsv", parser.getFileName().extension());
145GTEST_TEST(testFileParsing, tryingToParseANonExistentFileResultsInFatalException)
147 std::stringstream deathRegex;
149 deathRegex <<
"Common-Utilities Fatal Error: ";
151#if GTEST_USES_POSIX_RE
152 deathRegex <<
"[(]fileParser.hpp: *[0-9]*[)]\n\t";
153#elif GTEST_USES_SIMPLE_RE
154 deathRegex <<
"\\(fileParser.hpp: \\d*\\)\n\t";
157 deathRegex <<
"Could not find the requested file.\n";
163 DryChem::FileParser parser {fs::path {
"SomeNonExistentFile.txt"}};
164 auto rows = parser.parseDataFile(DryChem::AsRows());
166 catch (
const DryChem::FileNotFound& except)
168 except.handleErrorWithMessage();
GTEST_TEST(testFileParsing, defaultParsingOfATSVFileGivesAVectorOfStrings)
Definition testFileParsing.hpp:26