aboutsummaryrefslogtreecommitdiff
path: root/icing/util/character-iterator_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'icing/util/character-iterator_test.cc')
-rw-r--r--icing/util/character-iterator_test.cc266
1 files changed, 0 insertions, 266 deletions
diff --git a/icing/util/character-iterator_test.cc b/icing/util/character-iterator_test.cc
deleted file mode 100644
index 195a47b..0000000
--- a/icing/util/character-iterator_test.cc
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright (C) 2019 Google LLC
-//
-// 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 "icing/util/character-iterator.h"
-
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include "icing/testing/icu-i18n-test-utils.h"
-
-namespace icing {
-namespace lib {
-
-using ::testing::Eq;
-using ::testing::IsFalse;
-using ::testing::IsTrue;
-
-TEST(CharacterIteratorTest, BasicUtf8) {
- constexpr std::string_view kText = "¿Dónde está la biblioteca?";
- CharacterIterator iterator(kText);
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("¿"));
-
- EXPECT_THAT(iterator.AdvanceToUtf8(4), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("ó"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/3, /*utf16_index=*/2,
- /*utf32_index=*/2)));
-
- EXPECT_THAT(iterator.AdvanceToUtf8(18), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("b"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/18, /*utf16_index=*/15,
- /*utf32_index=*/15)));
-
- EXPECT_THAT(iterator.AdvanceToUtf8(28), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("?"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/28, /*utf16_index=*/25,
- /*utf32_index=*/25)));
-
- EXPECT_THAT(iterator.AdvanceToUtf8(29), IsTrue());
- EXPECT_THAT(iterator.GetCurrentChar(), Eq(0));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/29, /*utf16_index=*/26,
- /*utf32_index=*/26)));
-
- EXPECT_THAT(iterator.RewindToUtf8(28), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("?"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/28, /*utf16_index=*/25,
- /*utf32_index=*/25)));
-
- EXPECT_THAT(iterator.RewindToUtf8(18), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("b"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/18, /*utf16_index=*/15,
- /*utf32_index=*/15)));
-
- EXPECT_THAT(iterator.RewindToUtf8(4), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("ó"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/3, /*utf16_index=*/2,
- /*utf32_index=*/2)));
-
- EXPECT_THAT(iterator.RewindToUtf8(0), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("¿"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/0, /*utf16_index=*/0,
- /*utf32_index=*/0)));
-}
-
-TEST(CharacterIteratorTest, BasicUtf16) {
- constexpr std::string_view kText = "¿Dónde está la biblioteca?";
- CharacterIterator iterator(kText);
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("¿"));
-
- EXPECT_THAT(iterator.AdvanceToUtf16(2), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("ó"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/3, /*utf16_index=*/2,
- /*utf32_index=*/2)));
-
- EXPECT_THAT(iterator.AdvanceToUtf16(15), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("b"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/18, /*utf16_index=*/15,
- /*utf32_index=*/15)));
-
- EXPECT_THAT(iterator.AdvanceToUtf16(25), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("?"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/28, /*utf16_index=*/25,
- /*utf32_index=*/25)));
-
- EXPECT_THAT(iterator.AdvanceToUtf16(26), IsTrue());
- EXPECT_THAT(iterator.GetCurrentChar(), Eq(0));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/29, /*utf16_index=*/26,
- /*utf32_index=*/26)));
-
- EXPECT_THAT(iterator.RewindToUtf16(25), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("?"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/28, /*utf16_index=*/25,
- /*utf32_index=*/25)));
-
- EXPECT_THAT(iterator.RewindToUtf16(15), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("b"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/18, /*utf16_index=*/15,
- /*utf32_index=*/15)));
-
- EXPECT_THAT(iterator.RewindToUtf16(2), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("ó"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/3, /*utf16_index=*/2,
- /*utf32_index=*/2)));
-
- EXPECT_THAT(iterator.RewindToUtf8(0), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("¿"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/0, /*utf16_index=*/0,
- /*utf32_index=*/0)));
-}
-
-TEST(CharacterIteratorTest, BasicUtf32) {
- constexpr std::string_view kText = "¿Dónde está la biblioteca?";
- CharacterIterator iterator(kText);
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("¿"));
-
- EXPECT_THAT(iterator.AdvanceToUtf32(2), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("ó"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/3, /*utf16_index=*/2,
- /*utf32_index=*/2)));
-
- EXPECT_THAT(iterator.AdvanceToUtf32(15), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("b"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/18, /*utf16_index=*/15,
- /*utf32_index=*/15)));
-
- EXPECT_THAT(iterator.AdvanceToUtf32(25), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("?"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/28, /*utf16_index=*/25,
- /*utf32_index=*/25)));
-
- EXPECT_THAT(iterator.AdvanceToUtf32(26), IsTrue());
- EXPECT_THAT(iterator.GetCurrentChar(), Eq(0));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/29, /*utf16_index=*/26,
- /*utf32_index=*/26)));
-
- EXPECT_THAT(iterator.RewindToUtf32(25), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("?"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/28, /*utf16_index=*/25,
- /*utf32_index=*/25)));
-
- EXPECT_THAT(iterator.RewindToUtf32(15), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("b"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/18, /*utf16_index=*/15,
- /*utf32_index=*/15)));
-
- EXPECT_THAT(iterator.RewindToUtf32(2), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("ó"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/3, /*utf16_index=*/2,
- /*utf32_index=*/2)));
-
- EXPECT_THAT(iterator.RewindToUtf32(0), IsTrue());
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("¿"));
- EXPECT_THAT(iterator,
- Eq(CharacterIterator(kText, /*utf8_index=*/0, /*utf16_index=*/0,
- /*utf32_index=*/0)));
-}
-
-TEST(CharacterIteratorTest, InvalidUtf) {
- // "\255" is an invalid sequence.
- constexpr std::string_view kText = "foo \255 bar";
- CharacterIterator iterator(kText);
-
- // Try to advance to the 'b' in 'bar'. This will fail and leave us pointed at
- // the invalid sequence '\255'. Get CurrentChar() should return an invalid
- // character.
- EXPECT_THAT(iterator.AdvanceToUtf8(6), IsFalse());
- EXPECT_THAT(iterator.GetCurrentChar(), Eq(i18n_utils::kInvalidUChar32));
- CharacterIterator exp_iterator(kText, /*utf8_index=*/4, /*utf16_index=*/4,
- /*utf32_index=*/4);
- EXPECT_THAT(iterator, Eq(exp_iterator));
-
- EXPECT_THAT(iterator.AdvanceToUtf16(6), IsFalse());
- EXPECT_THAT(iterator.GetCurrentChar(), Eq(i18n_utils::kInvalidUChar32));
- EXPECT_THAT(iterator, Eq(exp_iterator));
-
- EXPECT_THAT(iterator.AdvanceToUtf32(6), IsFalse());
- EXPECT_THAT(iterator.GetCurrentChar(), Eq(i18n_utils::kInvalidUChar32));
- EXPECT_THAT(iterator, Eq(exp_iterator));
-
- // Create the iterator with it pointing at the 'b' in 'bar'.
- iterator = CharacterIterator(kText, /*utf8_index=*/6, /*utf16_index=*/6,
- /*utf32_index=*/6);
- EXPECT_THAT(UCharToString(iterator.GetCurrentChar()), Eq("b"));
-
- // Try to advance to the last 'o' in 'foo'. This will fail and leave us
- // pointed at the ' ' before the invalid sequence '\255'.
- exp_iterator = CharacterIterator(kText, /*utf8_index=*/5, /*utf16_index=*/5,
- /*utf32_index=*/5);
- EXPECT_THAT(iterator.RewindToUtf8(2), IsFalse());
- EXPECT_THAT(iterator.GetCurrentChar(), Eq(' '));
- EXPECT_THAT(iterator, Eq(exp_iterator));
-
- EXPECT_THAT(iterator.RewindToUtf16(2), IsFalse());
- EXPECT_THAT(iterator.GetCurrentChar(), Eq(' '));
- EXPECT_THAT(iterator, Eq(exp_iterator));
-
- EXPECT_THAT(iterator.RewindToUtf32(2), IsFalse());
- EXPECT_THAT(iterator.GetCurrentChar(), Eq(' '));
- EXPECT_THAT(iterator, Eq(exp_iterator));
-}
-
-TEST(CharacterIteratorTest, MoveToUtfNegativeIndex) {
- constexpr std::string_view kText = "¿Dónde está la biblioteca?";
-
- CharacterIterator iterator_utf8(kText, /*utf8_index=*/-1, /*utf16_index=*/0,
- /*utf32_index=*/0);
- // We should be able to successfully move when the index is negative.
- EXPECT_THAT(iterator_utf8.MoveToUtf8(0), IsTrue());
- // The character cache should be reset and contain the first character when
- // resetting to index 0.
- EXPECT_THAT(UCharToString(iterator_utf8.GetCurrentChar()), Eq("¿"));
- EXPECT_THAT(iterator_utf8.utf8_index(), Eq(0));
- EXPECT_THAT(iterator_utf8.utf16_index(), Eq(0));
- EXPECT_THAT(iterator_utf8.utf32_index(), Eq(0));
-
- CharacterIterator iterator_utf16(kText, /*utf8_index=*/0, /*utf16_index=*/-1,
- /*utf32_index=*/0);
- EXPECT_THAT(iterator_utf16.MoveToUtf16(1), IsTrue());
- EXPECT_THAT(iterator_utf16.GetCurrentChar(), Eq('D'));
- EXPECT_THAT(iterator_utf16.utf8_index(), Eq(2));
- EXPECT_THAT(iterator_utf16.utf16_index(), Eq(1));
- EXPECT_THAT(iterator_utf16.utf32_index(), Eq(1));
-
- CharacterIterator iterator_utf32(kText, /*utf8_index=*/0, /*utf16_index=*/0,
- /*utf32_index=*/-1);
- EXPECT_THAT(iterator_utf32.MoveToUtf32(2), IsTrue());
- EXPECT_THAT(UCharToString(iterator_utf32.GetCurrentChar()), Eq("ó"));
- EXPECT_THAT(iterator_utf32.utf8_index(), Eq(3));
- EXPECT_THAT(iterator_utf32.utf16_index(), Eq(2));
- EXPECT_THAT(iterator_utf32.utf32_index(), Eq(2));
-}
-
-} // namespace lib
-} // namespace icing