diff options
author | Dominick Allen <djallen@librehumanitas.org> | 2025-01-02 15:11:51 -0600 |
---|---|---|
committer | Dominick Allen <djallen@librehumanitas.org> | 2025-01-02 15:11:51 -0600 |
commit | 87071200872c2450c947047350132aee493033c1 (patch) | |
tree | 49109532d9bbd148b4e59043120037684093be33 /test/test_csv.cpp | |
parent | 16379362c02a2472f00fac49cad62788547c9519 (diff) |
Get basic CSV parser operating.
Diffstat (limited to 'test/test_csv.cpp')
-rw-r--r-- | test/test_csv.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/test/test_csv.cpp b/test/test_csv.cpp new file mode 100644 index 0000000..6923f6f --- /dev/null +++ b/test/test_csv.cpp @@ -0,0 +1,74 @@ +/* + * libfud + * Copyright 2024 Dominick Allen + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "fud_csv.hpp" +#include "fud_print.hpp" + +#include "gtest/gtest.h" + +namespace fud { + +const StringView happyCsvFilename{u8"fud-happy-test.csv"}; + +const StringView happyData{ + u8"foo,bar,baz\n" + u8"1,Unquoted Text,\"Quoted Text with embedded \"\" quote and embedded newline \n" + u8"see\"\n,,\"Prior two fields are empty\"\n"}; + +auto writeHappyCsv() -> FudStatus +{ + auto fileResult{RegularFile::create( + happyCsvFilename, + FileAccessMode::Write, + OpenFlags{OpenFlagEnum::Truncate}, + PermUserRwGroupRead, + false, + NullOpt)}; + if (fileResult.isError()) { + debugPrint(u8"Error opening file: {}\n", FudStatusToString(fileResult.getError())); + return fileResult.takeError(); + } + auto file{fileResult.takeOkay()}; + + auto writeResult = file.write(reinterpret_cast<const std::byte*>(happyData.data()), happyData.length()); + if (writeResult.status != FudStatus::Success) { + return writeResult.status; + } + + if (writeResult.bytesDrained != happyData.length()) { + return FudStatus::Failure; + } + + return FudStatus::Success; +} + +TEST(FudCsv, ParseCsvFromFilename) +{ + Csv csv{Csv::makeDefault()}; + + ASSERT_EQ(writeHappyCsv(), FudStatus::Success); + + debugPrint(u8"Wrote happy data:\n-----\n{}\n-----\n", happyData); + + auto parseStatus = Csv::parseFromFilename(csv, NullOpt, happyCsvFilename); + if (parseStatus != FudStatus::Success) { + debugPrint(u8"Error parsing file: {}\n", FudStatusToString(parseStatus)); + } + ASSERT_EQ(parseStatus, FudStatus::Success); +} + +} // namespace fud |