Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1561)

Unified Diff: third_party/WebKit/Source/core/editing/markers/SpellCheckMarkerListTest.cpp

Issue 2770413003: Add SpellCheckMarkerList in preparation for DocumentMarkerController refactor (Closed)
Patch Set: Add DCHECK that markers being inserted are of correct type Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/editing/markers/SpellCheckMarkerListTest.cpp
diff --git a/third_party/WebKit/Source/core/editing/markers/SpellCheckMarkerListTest.cpp b/third_party/WebKit/Source/core/editing/markers/SpellCheckMarkerListTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7e9b8391204d4101e20bf8bfeddeb16b53aad1b1
--- /dev/null
+++ b/third_party/WebKit/Source/core/editing/markers/SpellCheckMarkerListTest.cpp
@@ -0,0 +1,157 @@
+// 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/SpellCheckMarkerList.h"
+
+#include "core/dom/Document.h"
+#include "core/testing/DummyPageHolder.h"
+#include "platform/heap/Handle.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace blink {
+
+class SpellCheckMarkerListTest : public ::testing::Test {
+ protected:
+ SpellCheckMarkerListTest()
+ : m_markerList(new SpellCheckMarkerList(DocumentMarker::Spelling)),
+ m_dummyPageHolder(DummyPageHolder::create(IntSize(800, 600))) {}
+
+ Document& document() const { return m_dummyPageHolder->document(); }
+
+ DocumentMarker* createMarker(unsigned startOffset, unsigned endOffset) {
+ return new DocumentMarker(DocumentMarker::Spelling, startOffset, endOffset,
+ emptyString);
+ }
+
+ Text* createTextNode(const char* textContents) {
+ return document().createTextNode(String::fromUTF8(textContents));
+ }
+
+ Persistent<SpellCheckMarkerList> m_markerList;
+
+ private:
+ std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
+};
+
+TEST_F(SpellCheckMarkerListTest, PushBackSorting) {
+ // Insert some markers in an arbitrary order and verify that the list stays
+ // sorted
+ m_markerList->push_back(createMarker(80, 85));
+ m_markerList->push_back(createMarker(40, 45));
+ m_markerList->push_back(createMarker(10, 15));
+ m_markerList->push_back(createMarker(0, 5));
+ m_markerList->push_back(createMarker(70, 75));
+ m_markerList->push_back(createMarker(90, 95));
+ m_markerList->push_back(createMarker(60, 65));
+ m_markerList->push_back(createMarker(50, 55));
+ m_markerList->push_back(createMarker(30, 35));
+ m_markerList->push_back(createMarker(20, 25));
+
+ EXPECT_EQ(10u, m_markerList->size());
+
+ EXPECT_EQ(0u, m_markerList->at(0)->startOffset());
+ EXPECT_EQ(5u, m_markerList->at(0)->endOffset());
+
+ EXPECT_EQ(10u, m_markerList->at(1)->startOffset());
+ EXPECT_EQ(15u, m_markerList->at(1)->endOffset());
+
+ EXPECT_EQ(20u, m_markerList->at(2)->startOffset());
+ EXPECT_EQ(25u, m_markerList->at(2)->endOffset());
+
+ EXPECT_EQ(30u, m_markerList->at(3)->startOffset());
+ EXPECT_EQ(35u, m_markerList->at(3)->endOffset());
+
+ EXPECT_EQ(40u, m_markerList->at(4)->startOffset());
+ EXPECT_EQ(45u, m_markerList->at(4)->endOffset());
+
+ EXPECT_EQ(50u, m_markerList->at(5)->startOffset());
+ EXPECT_EQ(55u, m_markerList->at(5)->endOffset());
+
+ EXPECT_EQ(60u, m_markerList->at(6)->startOffset());
+ EXPECT_EQ(65u, m_markerList->at(6)->endOffset());
+
+ EXPECT_EQ(70u, m_markerList->at(7)->startOffset());
+ EXPECT_EQ(75u, m_markerList->at(7)->endOffset());
+
+ EXPECT_EQ(80u, m_markerList->at(8)->startOffset());
+ EXPECT_EQ(85u, m_markerList->at(8)->endOffset());
+
+ EXPECT_EQ(90u, m_markerList->at(9)->startOffset());
+ EXPECT_EQ(95u, m_markerList->at(9)->endOffset());
+}
+
+TEST_F(SpellCheckMarkerListTest, PushBackMerging) {
Xiaocheng 2017/03/25 18:55:52 Could you split the test case into four independen
+ // Test inserting into empty list
+ m_markerList->push_back(createMarker(5, 10));
+ EXPECT_EQ(1u, m_markerList->size());
+
+ EXPECT_EQ(5u, m_markerList->at(0)->startOffset());
+ EXPECT_EQ(10u, m_markerList->at(0)->endOffset());
+
+ // Test non-merging insert into non-empty list
+ m_markerList->push_back(createMarker(15, 20));
+ EXPECT_EQ(2u, m_markerList->size());
+
+ EXPECT_EQ(5u, m_markerList->at(0)->startOffset());
+ EXPECT_EQ(10u, m_markerList->at(0)->endOffset());
+
+ EXPECT_EQ(15u, m_markerList->at(1)->startOffset());
+ EXPECT_EQ(20u, m_markerList->at(1)->endOffset());
+
+ // Test inserting a marker that should be merged with a later marker
+ m_markerList->push_back(createMarker(0, 5));
+ EXPECT_EQ(2u, m_markerList->size());
+
+ EXPECT_EQ(0u, m_markerList->at(0)->startOffset());
+ EXPECT_EQ(10u, m_markerList->at(0)->endOffset());
+
+ EXPECT_EQ(15u, m_markerList->at(1)->startOffset());
+ EXPECT_EQ(20u, m_markerList->at(1)->endOffset());
+
+ // Test inserting a marker that should be merged with an earlier marker
+ m_markerList->push_back(createMarker(20, 25));
+ EXPECT_EQ(2u, m_markerList->size());
+
+ EXPECT_EQ(0u, m_markerList->at(0)->startOffset());
+ EXPECT_EQ(10u, m_markerList->at(0)->endOffset());
+
+ EXPECT_EQ(15u, m_markerList->at(1)->startOffset());
+ EXPECT_EQ(25u, m_markerList->at(1)->endOffset());
+
+ // Test inserting a marker that should be merged with both an earlier and a
+ // later marker
+ m_markerList->push_back(createMarker(10, 15));
+ EXPECT_EQ(1u, m_markerList->size());
+
+ EXPECT_EQ(0u, m_markerList->at(0)->startOffset());
+ EXPECT_EQ(25u, m_markerList->at(0)->endOffset());
+}
+
+TEST_F(SpellCheckMarkerListTest, RemoveMarkersForWords) {
+ Text* node = createTextNode("wor word words word2");
+
+ // wor
+ m_markerList->push_back(createMarker(0, 3));
+
+ // word
+ m_markerList->push_back(createMarker(4, 8));
+
+ // words
+ m_markerList->push_back(createMarker(9, 14));
+
+ // word2
+ m_markerList->push_back(createMarker(15, 20));
+
+ m_markerList->removeMarkersForWords(*node, {"word", "word2"});
+
+ EXPECT_EQ(2u, m_markerList->size());
+
+ EXPECT_EQ(0u, m_markerList->at(0)->startOffset());
+ EXPECT_EQ(3u, m_markerList->at(0)->endOffset());
+
+ EXPECT_EQ(9u, m_markerList->at(1)->startOffset());
+ EXPECT_EQ(14u, m_markerList->at(1)->endOffset());
+}
+
+} // namespace

Powered by Google App Engine
This is Rietveld 408576698