| Index: third_party/WebKit/Source/core/editing/iterators/TextIteratorTest.cpp | 
| diff --git a/third_party/WebKit/Source/core/editing/iterators/TextIteratorTest.cpp b/third_party/WebKit/Source/core/editing/iterators/TextIteratorTest.cpp | 
| index 06fb00eace6155c7c367d0c63ab47652b175c63a..182fd399c9619398867e86015bf78d83a52851ad 100644 | 
| --- a/third_party/WebKit/Source/core/editing/iterators/TextIteratorTest.cpp | 
| +++ b/third_party/WebKit/Source/core/editing/iterators/TextIteratorTest.cpp | 
| @@ -777,6 +777,30 @@ TEST_F(TextIteratorTest, StartInMultiCharFirstLetterWithCollapsedSpace) { | 
| EXPECT_EQ("A) xyz", String(buffer.Data())); | 
| } | 
|  | 
| +TEST_F(TextIteratorTest, StartAndEndInMultiCharFirstLetterWithCollapsedSpace) { | 
| +  SetBodyContent( | 
| +      "<style>div:first-letter {color:red;}</style><div>  (A)  xyz</div>"); | 
| + | 
| +  Element* div = GetDocument().QuerySelector("div"); | 
| +  Node* text = div->firstChild(); | 
| +  Position start(text, 3); | 
| +  Position end(text, 4); | 
| +  TextIterator iter(start, end); | 
| +  ForwardsTextBuffer buffer; | 
| + | 
| +  EXPECT_FALSE(iter.AtEnd()); | 
| +  EXPECT_EQ(1, iter.length()); | 
| +  EXPECT_EQ(1, iter.CopyTextTo(&buffer, 0)) << "Should emit 'A'."; | 
| +  EXPECT_EQ(text, iter.CurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 3), iter.StartPositionInCurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 4), iter.EndPositionInCurrentContainer()); | 
| + | 
| +  iter.Advance(); | 
| +  EXPECT_TRUE(iter.AtEnd()); | 
| + | 
| +  EXPECT_EQ("A", String(buffer.Data())); | 
| +} | 
| + | 
| TEST_F(TextIteratorTest, StartAtRemainingText) { | 
| SetBodyContent("<style>div:first-letter {color:red;}</style><div>Axyz</div>"); | 
|  | 
| @@ -800,4 +824,114 @@ TEST_F(TextIteratorTest, StartAtRemainingText) { | 
| EXPECT_EQ("xyz", String(buffer.Data())); | 
| } | 
|  | 
| +TEST_F(TextIteratorTest, StartAtFirstLetterInPre) { | 
| +  SetBodyContent("<style>pre:first-letter {color:red;}</style><pre>Axyz</pre>"); | 
| + | 
| +  Element* pre = GetDocument().QuerySelector("pre"); | 
| +  Node* text = pre->firstChild(); | 
| +  Position start(text, 0); | 
| +  Position end(text, 4); | 
| +  TextIterator iter(start, end); | 
| +  ForwardsTextBuffer buffer; | 
| + | 
| +  EXPECT_FALSE(iter.AtEnd()); | 
| +  EXPECT_EQ(1, iter.length()); | 
| +  EXPECT_EQ(1, iter.CopyTextTo(&buffer, 0)) << "Should emit 'A'."; | 
| +  EXPECT_EQ(text, iter.CurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 0), iter.StartPositionInCurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 1), iter.EndPositionInCurrentContainer()); | 
| + | 
| +  iter.Advance(); | 
| +  EXPECT_FALSE(iter.AtEnd()); | 
| +  EXPECT_EQ(3, iter.length()); | 
| +  EXPECT_EQ(3, iter.CopyTextTo(&buffer, 0)) << "Should emit 'xyz'."; | 
| +  EXPECT_EQ(text, iter.CurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 1), iter.StartPositionInCurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 4), iter.EndPositionInCurrentContainer()); | 
| + | 
| +  iter.Advance(); | 
| +  EXPECT_TRUE(iter.AtEnd()); | 
| + | 
| +  EXPECT_EQ("Axyz", String(buffer.Data())); | 
| +} | 
| + | 
| +TEST_F(TextIteratorTest, StartInMultiCharFirstLetterInPre) { | 
| +  SetBodyContent( | 
| +      "<style>pre:first-letter {color:red;}</style><pre>(A)xyz</pre>"); | 
| + | 
| +  Element* pre = GetDocument().QuerySelector("pre"); | 
| +  Node* text = pre->firstChild(); | 
| +  Position start(text, 1); | 
| +  Position end(text, 6); | 
| +  TextIterator iter(start, end); | 
| +  ForwardsTextBuffer buffer; | 
| + | 
| +  EXPECT_FALSE(iter.AtEnd()); | 
| +  EXPECT_EQ(2, iter.length()); | 
| +  EXPECT_EQ(2, iter.CopyTextTo(&buffer, 0)) << "Should emit 'A)'."; | 
| +  EXPECT_EQ(text, iter.CurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 1), iter.StartPositionInCurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 3), iter.EndPositionInCurrentContainer()); | 
| + | 
| +  iter.Advance(); | 
| +  EXPECT_FALSE(iter.AtEnd()); | 
| +  EXPECT_EQ(3, iter.length()); | 
| +  EXPECT_EQ(3, iter.CopyTextTo(&buffer, 0)) << "Should emit 'xyz'."; | 
| +  EXPECT_EQ(text, iter.CurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 3), iter.StartPositionInCurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 6), iter.EndPositionInCurrentContainer()); | 
| + | 
| +  iter.Advance(); | 
| +  EXPECT_TRUE(iter.AtEnd()); | 
| + | 
| +  EXPECT_EQ("A)xyz", String(buffer.Data())); | 
| +} | 
| + | 
| +TEST_F(TextIteratorTest, StartAndEndInMultiCharFirstLetterInPre) { | 
| +  SetBodyContent( | 
| +      "<style>pre:first-letter {color:red;}</style><pre>(A)xyz</pre>"); | 
| + | 
| +  Element* pre = GetDocument().QuerySelector("pre"); | 
| +  Node* text = pre->firstChild(); | 
| +  Position start(text, 1); | 
| +  Position end(text, 2); | 
| +  TextIterator iter(start, end); | 
| +  ForwardsTextBuffer buffer; | 
| + | 
| +  EXPECT_FALSE(iter.AtEnd()); | 
| +  EXPECT_EQ(1, iter.length()); | 
| +  EXPECT_EQ(1, iter.CopyTextTo(&buffer, 0)) << "Should emit 'A'."; | 
| +  EXPECT_EQ(text, iter.CurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 1), iter.StartPositionInCurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 2), iter.EndPositionInCurrentContainer()); | 
| + | 
| +  iter.Advance(); | 
| +  EXPECT_TRUE(iter.AtEnd()); | 
| + | 
| +  EXPECT_EQ("A", String(buffer.Data())); | 
| +} | 
| + | 
| +TEST_F(TextIteratorTest, StartAtRemainingTextInPre) { | 
| +  SetBodyContent("<style>pre:first-letter {color:red;}</style><pre>Axyz</pre>"); | 
| + | 
| +  Element* pre = GetDocument().QuerySelector("pre"); | 
| +  Node* text = pre->firstChild(); | 
| +  Position start(text, 1); | 
| +  Position end(text, 4); | 
| +  TextIterator iter(start, end); | 
| +  ForwardsTextBuffer buffer; | 
| + | 
| +  EXPECT_FALSE(iter.AtEnd()); | 
| +  EXPECT_EQ(3, iter.length()); | 
| +  EXPECT_EQ(3, iter.CopyTextTo(&buffer, 0)) << "Should emit 'xyz'."; | 
| +  EXPECT_EQ(text, iter.CurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 1), iter.StartPositionInCurrentContainer()); | 
| +  EXPECT_EQ(Position(text, 4), iter.EndPositionInCurrentContainer()); | 
| + | 
| +  iter.Advance(); | 
| +  EXPECT_TRUE(iter.AtEnd()); | 
| + | 
| +  EXPECT_EQ("xyz", String(buffer.Data())); | 
| +} | 
| + | 
| }  // namespace blink | 
|  |