/* * 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(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