blob: 9ba9da4419af46a514e8b8d4469e814e4cded669 [file] [log] [blame]
// 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/CompositionMarkerListImpl.h"
#include "core/editing/EditingTestBase.h"
#include "core/editing/markers/CompositionMarker.h"
namespace blink {
class CompositionMarkerListImplTest : public EditingTestBase {
protected:
CompositionMarkerListImplTest()
: marker_list_(new CompositionMarkerListImpl()) {}
DocumentMarker* CreateMarker(unsigned start_offset, unsigned end_offset) {
return new CompositionMarker(start_offset, end_offset, Color::kBlack,
StyleableMarker::Thickness::kThin,
Color::kBlack);
}
Persistent<CompositionMarkerListImpl> marker_list_;
};
namespace {
bool compare_markers(const Member<DocumentMarker>& marker1,
const Member<DocumentMarker>& marker2) {
if (marker1->StartOffset() != marker2->StartOffset())
return marker1->StartOffset() < marker2->StartOffset();
return marker1->EndOffset() < marker2->EndOffset();
}
} // namespace
TEST_F(CompositionMarkerListImplTest, AddOverlapping) {
// Add some overlapping markers in an arbitrary order and verify that the
// list stores them properly
marker_list_->Add(CreateMarker(40, 50));
marker_list_->Add(CreateMarker(10, 40));
marker_list_->Add(CreateMarker(20, 50));
marker_list_->Add(CreateMarker(10, 30));
marker_list_->Add(CreateMarker(10, 50));
marker_list_->Add(CreateMarker(30, 50));
marker_list_->Add(CreateMarker(30, 40));
marker_list_->Add(CreateMarker(10, 20));
marker_list_->Add(CreateMarker(20, 40));
marker_list_->Add(CreateMarker(20, 30));
DocumentMarkerVector markers = marker_list_->GetMarkers();
std::sort(markers.begin(), markers.end(), compare_markers);
EXPECT_EQ(10u, markers.size());
EXPECT_EQ(10u, markers[0]->StartOffset());
EXPECT_EQ(20u, markers[0]->EndOffset());
EXPECT_EQ(10u, markers[1]->StartOffset());
EXPECT_EQ(30u, markers[1]->EndOffset());
EXPECT_EQ(10u, markers[2]->StartOffset());
EXPECT_EQ(40u, markers[2]->EndOffset());
EXPECT_EQ(10u, markers[3]->StartOffset());
EXPECT_EQ(50u, markers[3]->EndOffset());
EXPECT_EQ(20u, markers[4]->StartOffset());
EXPECT_EQ(30u, markers[4]->EndOffset());
EXPECT_EQ(20u, markers[5]->StartOffset());
EXPECT_EQ(40u, markers[5]->EndOffset());
EXPECT_EQ(20u, markers[6]->StartOffset());
EXPECT_EQ(50u, markers[6]->EndOffset());
EXPECT_EQ(30u, markers[7]->StartOffset());
EXPECT_EQ(40u, markers[7]->EndOffset());
EXPECT_EQ(30u, markers[8]->StartOffset());
EXPECT_EQ(50u, markers[8]->EndOffset());
EXPECT_EQ(40u, markers[9]->StartOffset());
EXPECT_EQ(50u, markers[9]->EndOffset());
}
} // namespace blink