| // Copyright 2017 The Chromium Authors. All rights reserved. Use of |
| // this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "core/editing/markers/SpellCheckMarkerListImpl.h" |
| |
| #include "core/editing/markers/SpellingMarker.h" |
| #include "core/editing/markers/SpellingMarkerListImpl.h" |
| #include "platform/heap/Handle.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace blink { |
| |
| // This test class tests functionality implemented by SpellingMarkerListImpl and |
| // also functionality implemented by its parent class SpellCheckMarkerListImpl. |
| |
| class SpellingMarkerListImplTest : public ::testing::Test { |
| protected: |
| SpellingMarkerListImplTest() : marker_list_(new SpellingMarkerListImpl()) {} |
| |
| DocumentMarker* CreateMarker(unsigned start_offset, unsigned end_offset) { |
| return new SpellingMarker(start_offset, end_offset, g_empty_string); |
| } |
| |
| Persistent<SpellingMarkerListImpl> marker_list_; |
| }; |
| |
| // Test cases for functionality implemented by SpellingMarkerListImpl. |
| |
| TEST_F(SpellingMarkerListImplTest, MarkerType) { |
| EXPECT_EQ(DocumentMarker::kSpelling, marker_list_->MarkerType()); |
| } |
| |
| // Test cases for functionality implemented by SpellCheckMarkerListImpl |
| |
| TEST_F(SpellingMarkerListImplTest, AddSorting) { |
| // Insert some markers in an arbitrary order and verify that the list stays |
| // sorted |
| marker_list_->Add(CreateMarker(80, 85)); |
| marker_list_->Add(CreateMarker(40, 45)); |
| marker_list_->Add(CreateMarker(10, 15)); |
| marker_list_->Add(CreateMarker(0, 5)); |
| marker_list_->Add(CreateMarker(70, 75)); |
| marker_list_->Add(CreateMarker(90, 95)); |
| marker_list_->Add(CreateMarker(60, 65)); |
| marker_list_->Add(CreateMarker(50, 55)); |
| marker_list_->Add(CreateMarker(30, 35)); |
| marker_list_->Add(CreateMarker(20, 25)); |
| |
| EXPECT_EQ(10u, marker_list_->GetMarkers().size()); |
| |
| EXPECT_EQ(0u, marker_list_->GetMarkers()[0]->StartOffset()); |
| EXPECT_EQ(5u, marker_list_->GetMarkers()[0]->EndOffset()); |
| |
| EXPECT_EQ(10u, marker_list_->GetMarkers()[1]->StartOffset()); |
| EXPECT_EQ(15u, marker_list_->GetMarkers()[1]->EndOffset()); |
| |
| EXPECT_EQ(20u, marker_list_->GetMarkers()[2]->StartOffset()); |
| EXPECT_EQ(25u, marker_list_->GetMarkers()[2]->EndOffset()); |
| |
| EXPECT_EQ(30u, marker_list_->GetMarkers()[3]->StartOffset()); |
| EXPECT_EQ(35u, marker_list_->GetMarkers()[3]->EndOffset()); |
| |
| EXPECT_EQ(40u, marker_list_->GetMarkers()[4]->StartOffset()); |
| EXPECT_EQ(45u, marker_list_->GetMarkers()[4]->EndOffset()); |
| |
| EXPECT_EQ(50u, marker_list_->GetMarkers()[5]->StartOffset()); |
| EXPECT_EQ(55u, marker_list_->GetMarkers()[5]->EndOffset()); |
| |
| EXPECT_EQ(60u, marker_list_->GetMarkers()[6]->StartOffset()); |
| EXPECT_EQ(65u, marker_list_->GetMarkers()[6]->EndOffset()); |
| |
| EXPECT_EQ(70u, marker_list_->GetMarkers()[7]->StartOffset()); |
| EXPECT_EQ(75u, marker_list_->GetMarkers()[7]->EndOffset()); |
| |
| EXPECT_EQ(80u, marker_list_->GetMarkers()[8]->StartOffset()); |
| EXPECT_EQ(85u, marker_list_->GetMarkers()[8]->EndOffset()); |
| |
| EXPECT_EQ(90u, marker_list_->GetMarkers()[9]->StartOffset()); |
| EXPECT_EQ(95u, marker_list_->GetMarkers()[9]->EndOffset()); |
| } |
| |
| TEST_F(SpellingMarkerListImplTest, AddIntoEmptyList) { |
| marker_list_->Add(CreateMarker(5, 10)); |
| |
| EXPECT_EQ(1u, marker_list_->GetMarkers().size()); |
| |
| EXPECT_EQ(5u, marker_list_->GetMarkers()[0]->StartOffset()); |
| EXPECT_EQ(10u, marker_list_->GetMarkers()[0]->EndOffset()); |
| } |
| |
| TEST_F(SpellingMarkerListImplTest, AddMarkerNonMerging) { |
| marker_list_->Add(CreateMarker(5, 10)); |
| marker_list_->Add(CreateMarker(15, 20)); |
| |
| EXPECT_EQ(2u, marker_list_->GetMarkers().size()); |
| |
| EXPECT_EQ(5u, marker_list_->GetMarkers()[0]->StartOffset()); |
| EXPECT_EQ(10u, marker_list_->GetMarkers()[0]->EndOffset()); |
| |
| EXPECT_EQ(15u, marker_list_->GetMarkers()[1]->StartOffset()); |
| EXPECT_EQ(20u, marker_list_->GetMarkers()[1]->EndOffset()); |
| } |
| |
| TEST_F(SpellingMarkerListImplTest, AddMarkerMergingLater) { |
| marker_list_->Add(CreateMarker(5, 10)); |
| marker_list_->Add(CreateMarker(0, 5)); |
| |
| EXPECT_EQ(1u, marker_list_->GetMarkers().size()); |
| |
| EXPECT_EQ(0u, marker_list_->GetMarkers()[0]->StartOffset()); |
| EXPECT_EQ(10u, marker_list_->GetMarkers()[0]->EndOffset()); |
| } |
| |
| TEST_F(SpellingMarkerListImplTest, AddMarkerMergingEarlier) { |
| marker_list_->Add(CreateMarker(0, 5)); |
| marker_list_->Add(CreateMarker(5, 10)); |
| |
| EXPECT_EQ(1u, marker_list_->GetMarkers().size()); |
| |
| EXPECT_EQ(0u, marker_list_->GetMarkers()[0]->StartOffset()); |
| EXPECT_EQ(10u, marker_list_->GetMarkers()[0]->EndOffset()); |
| } |
| |
| TEST_F(SpellingMarkerListImplTest, AddMarkerMergingEarlierAndLater) { |
| marker_list_->Add(CreateMarker(0, 5)); |
| marker_list_->Add(CreateMarker(10, 15)); |
| marker_list_->Add(CreateMarker(5, 10)); |
| |
| EXPECT_EQ(1u, marker_list_->GetMarkers().size()); |
| |
| EXPECT_EQ(0u, marker_list_->GetMarkers()[0]->StartOffset()); |
| EXPECT_EQ(15u, marker_list_->GetMarkers()[0]->EndOffset()); |
| } |
| |
| TEST_F(SpellingMarkerListImplTest, RemoveMarkersUnderWords) { |
| // wor |
| marker_list_->Add(CreateMarker(0, 3)); |
| |
| // word |
| marker_list_->Add(CreateMarker(4, 8)); |
| |
| // words |
| marker_list_->Add(CreateMarker(9, 14)); |
| |
| // word2 |
| marker_list_->Add(CreateMarker(15, 20)); |
| |
| marker_list_->RemoveMarkersUnderWords("wor word words word2", |
| {"word", "word2"}); |
| EXPECT_EQ(2u, marker_list_->GetMarkers().size()); |
| |
| EXPECT_EQ(0u, marker_list_->GetMarkers()[0]->StartOffset()); |
| EXPECT_EQ(3u, marker_list_->GetMarkers()[0]->EndOffset()); |
| |
| EXPECT_EQ(9u, marker_list_->GetMarkers()[1]->StartOffset()); |
| EXPECT_EQ(14u, marker_list_->GetMarkers()[1]->EndOffset()); |
| } |
| |
| } // namespace |