blob: 7ab9a9f6ba046e924d08c95d02d83dc415e55f14 [file] [log] [blame]
/*
* Copyright (C) 2022 The Android Open Source Project
*
* 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.
*/
#define LOG_TAG "mediautils_fixedstring_tests"
#include <mediautils/FixedString.h>
#include <gtest/gtest.h>
#include <utils/Log.h>
using namespace android::mediautils;
TEST(mediautils_fixedstring_tests, ctor) {
FixedString<8> s0("abcde");
ASSERT_FALSE(s0.empty());
ASSERT_EQ(8U, s0.capacity());
ASSERT_EQ(5U, s0.size());
ASSERT_EQ(3U, s0.remaining());
ASSERT_EQ(0, strcmp(s0.c_str(), "abcde"));
ASSERT_EQ(0, strcmp(s0.data(), "abcde"));
// overflow
FixedString<8> s1("abcdefghijk");
ASSERT_EQ(8U, s1.size());
ASSERT_TRUE(s1.full());
ASSERT_EQ(0U, s1.remaining());
ASSERT_EQ(0, strcmp(s1.c_str(), "abcdefgh"));
// overflow
FixedString<8> s2(std::string("abcdefghijk"));
ASSERT_TRUE(s2.full());
ASSERT_EQ(8U, s2.size());
ASSERT_EQ(0, strcmp(s2.c_str(), "abcdefgh"));
// complex
ASSERT_EQ(s1, s2);
ASSERT_EQ(FixedString<12>().append(s1), s2);
ASSERT_NE(s1, "bcd");
// string and stringview
ASSERT_EQ(s1.asString(), s1.asStringView());
FixedString30 s3;
s3 = std::string("abcd");
ASSERT_EQ(s3, "abcd");
s3.clear();
ASSERT_EQ(s3, "");
ASSERT_NE(s3, "abcd");
ASSERT_EQ(0U, s3.size());
}
TEST(mediautils_fixedstring_tests, append) {
FixedString<8> s0;
ASSERT_EQ(0U, s0.size());
ASSERT_EQ(0, strcmp(s0.c_str(), ""));
ASSERT_TRUE(s0.empty());
ASSERT_FALSE(s0.full());
s0.append("abc");
ASSERT_EQ(3U, s0.size());
ASSERT_EQ(0, strcmp(s0.c_str(), "abc"));
s0.append(std::string("d"));
ASSERT_EQ(4U, s0.size());
ASSERT_EQ(0, strcmp(s0.c_str(), "abcd"));
// overflow
s0.append("efghijk");
ASSERT_EQ(8U, s0.size());
ASSERT_EQ(0, strcmp(s0.c_str(), "abcdefgh"));
ASSERT_TRUE(s0.full());
// concatenated
ASSERT_EQ(FixedString62("abcd"),
FixedString<8>("ab").append("c").append(FixedString<8>("d")));
ASSERT_EQ(FixedString<12>("a").append(FixedString<12>("b")), "ab");
}
TEST(mediautils_fixedstring_tests, plus_equals) {
FixedString<8> s0;
ASSERT_EQ(0U, s0.size());
ASSERT_EQ(0, strcmp(s0.c_str(), ""));
s0 += "abc";
s0 += "def";
ASSERT_EQ(s0, "abcdef");
}
TEST(mediautils_fixedstring_tests, stream_operator) {
FixedString<8> s0('a');
s0 << 'b' << "c" << "d" << '\n';
ASSERT_EQ(s0, "abcd\n");
}
TEST(mediautils_fixedstring_tests, examples) {
FixedString30 s1(std::string("a"));
s1 << "bc" << 'd' << '\n';
s1 += "hello";
ASSERT_EQ(s1, "abcd\nhello");
FixedString30 s2;
for (const auto &c : s1.asStringView()) {
s2.append(c);
};
ASSERT_EQ(s1, s2);
FixedString30 s3(std::move(s1));
}
// Ensure type alias works fine as well.
using FixedString1024 = FixedString<1024>;
TEST(mediautils_fixedstring_tests, copy) {
FixedString1024 s0("abc");
FixedString62 s1(s0);
ASSERT_EQ(3U, s1.size());
ASSERT_EQ(0, strcmp(s1.c_str(), "abc"));
ASSERT_EQ(s0, s1);
FixedString<1024> s2(s1);
ASSERT_EQ(3U, s2.size());
ASSERT_EQ(0, strcmp(s2.c_str(), "abc"));
ASSERT_EQ(s2, "abc");
ASSERT_NE(s2, "def");
ASSERT_EQ(s2, std::string("abc"));
ASSERT_NE(s2, std::string("def"));
ASSERT_EQ(s1, s2);
ASSERT_EQ(s0, s2);
ASSERT_EQ(s2, FixedString62(FixedString1024("abc")));
}