blob: e4128303095acc6eb732eefb7920082fc5258ff3 [file] [log] [blame]
// Copyright 2022 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#include <lib/unittest/unittest.h>
#include <multi-file.h>
#include <string-file.h>
#include <ktl/array.h>
#include <ktl/string_view.h>
#include <ktl/enforce.h>
namespace {
template <size_t N>
bool ExpectEq(const ktl::array<char, N>& value, const char (&expected)[N]) {
BEGIN_TEST;
EXPECT_BYTES_EQ(reinterpret_cast<const uint8_t*>(value.data()),
reinterpret_cast<const uint8_t*>(expected), N);
END_TEST;
}
bool ZeroLengthArray() {
BEGIN_TEST;
constexpr ktl::string_view kInput = "12345";
MultiFile<0> mfile;
EXPECT_EQ(mfile.Write(kInput), static_cast<int>(kInput.size()));
END_TEST;
}
bool Nullptr() {
BEGIN_TEST;
constexpr ktl::string_view kInput = "12345";
MultiFile<1> mfile;
ASSERT_EQ(mfile.files()[0], nullptr);
EXPECT_EQ(mfile.Write(kInput), static_cast<int>(kInput.size()));
END_TEST;
}
bool TwoStrings() {
BEGIN_TEST;
constexpr ktl::string_view kInput = "12345";
ktl::array<char, kInput.size() + 1> output_string_1{}, output_string_2{};
StringFile sfile1(output_string_1);
StringFile sfile2(output_string_2);
MultiFile<2> mfile({&sfile1, &sfile2});
EXPECT_EQ(mfile.Write(kInput), static_cast<int>(kInput.size()));
EXPECT_TRUE(ExpectEq(output_string_1, "12345"));
EXPECT_TRUE(ExpectEq(output_string_2, "12345"));
END_TEST;
}
bool OneStringOneNullptr() {
BEGIN_TEST;
constexpr ktl::string_view kInput = "12345";
ktl::array<char, kInput.size() + 1> output_string{};
StringFile sfile(output_string);
MultiFile<2> mfile({&sfile, nullptr});
EXPECT_EQ(mfile.files()[1], nullptr);
EXPECT_EQ(mfile.Write(kInput), static_cast<int>(kInput.size()));
EXPECT_TRUE(ExpectEq(output_string, "12345"));
END_TEST;
}
bool OneSuccessOneFail() {
BEGIN_TEST;
constexpr ktl::string_view kInput = "12345";
ktl::array<char, kInput.size() + 1> output_string_1{};
StringFile sfile1(output_string_1);
StringFile sfile2(ktl::span<char>{});
MultiFile<2> mfile({&sfile1, &sfile2});
EXPECT_EQ(mfile.Write(kInput), static_cast<int>(kInput.size()));
EXPECT_TRUE(ExpectEq(output_string_1, "12345"));
END_TEST;
}
} // namespace
UNITTEST_START_TESTCASE(multi_file_tests)
UNITTEST("MultiFile::Write - on zero-length array", ZeroLengthArray)
UNITTEST("MultiFile::Write - on nullptr", Nullptr)
UNITTEST("MultiFile::Write - two strings", TwoStrings)
UNITTEST("MultiFile::Write - one string one nullptr", OneStringOneNullptr)
UNITTEST("MultiFile::Write - one success one fail", OneSuccessOneFail)
UNITTEST_END_TESTCASE(multi_file_tests, "multi_file", "MultiFile tests")