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

Side by Side Diff: ui/gfx/render_text_unittest.cc

Issue 1015533016: Move allow_character_break property to RenderText. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: line width for truncated words Created 5 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 unified diff | Download patch
« no previous file with comments | « ui/gfx/render_text_harfbuzz.cc ('k') | ui/gfx/text_constants.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/gfx/render_text.h" 5 #include "ui/gfx/render_text.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/i18n/break_iterator.h" 10 #include "base/i18n/break_iterator.h"
(...skipping 2072 matching lines...) Expand 10 before | Expand all | Expand 10 after
2083 } 2083 }
2084 2084
2085 // Ensure strings wrap onto multiple lines for a small available width. 2085 // Ensure strings wrap onto multiple lines for a small available width.
2086 TEST_F(RenderTextTest, Multiline_MinWidth) { 2086 TEST_F(RenderTextTest, Multiline_MinWidth) {
2087 const wchar_t* kTestStrings[] = { kWeak, kLtr, kLtrRtl, kLtrRtlLtr, kRtl, 2087 const wchar_t* kTestStrings[] = { kWeak, kLtr, kLtrRtl, kLtrRtlLtr, kRtl,
2088 kRtlLtr, kRtlLtrRtl }; 2088 kRtlLtr, kRtlLtrRtl };
2089 2089
2090 RenderTextHarfBuzz render_text; 2090 RenderTextHarfBuzz render_text;
2091 render_text.SetDisplayRect(Rect(1, 1000)); 2091 render_text.SetDisplayRect(Rect(1, 1000));
2092 render_text.SetMultiline(true); 2092 render_text.SetMultiline(true);
2093 render_text.SetWordWrapBehavior(WRAP_LONG_WORDS);
2093 Canvas canvas; 2094 Canvas canvas;
2094 2095
2095 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { 2096 for (size_t i = 0; i < arraysize(kTestStrings); ++i) {
2096 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); 2097 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i));
2097 render_text.SetText(WideToUTF16(kTestStrings[i])); 2098 render_text.SetText(WideToUTF16(kTestStrings[i]));
2098 render_text.Draw(&canvas); 2099 render_text.Draw(&canvas);
2099 EXPECT_GT(render_text.lines_.size(), 1U); 2100 EXPECT_GT(render_text.lines_.size(), 1U);
2100 } 2101 }
2101 } 2102 }
2102 2103
(...skipping 13 matching lines...) Expand all
2116 { L"\x062A\x0641\x0627\x062D\x05EA\x05E4\x05D5\x05D6\x05D9" 2117 { L"\x062A\x0641\x0627\x062D\x05EA\x05E4\x05D5\x05D6\x05D9"
2117 L"\x05DA\x05DB\x05DD", Range(0, 4), Range(4, 12), false } 2118 L"\x05DA\x05DB\x05DD", Range(0, 4), Range(4, 12), false }
2118 }; 2119 };
2119 2120
2120 RenderTextHarfBuzz render_text; 2121 RenderTextHarfBuzz render_text;
2121 // Specify the fixed width for characters to suppress the possible variations 2122 // Specify the fixed width for characters to suppress the possible variations
2122 // of linebreak results. 2123 // of linebreak results.
2123 render_text.set_glyph_width_for_test(5); 2124 render_text.set_glyph_width_for_test(5);
2124 render_text.SetDisplayRect(Rect(50, 1000)); 2125 render_text.SetDisplayRect(Rect(50, 1000));
2125 render_text.SetMultiline(true); 2126 render_text.SetMultiline(true);
2127 render_text.SetWordWrapBehavior(WRAP_LONG_WORDS);
2126 render_text.SetHorizontalAlignment(ALIGN_TO_HEAD); 2128 render_text.SetHorizontalAlignment(ALIGN_TO_HEAD);
2127 2129
2128 Canvas canvas; 2130 Canvas canvas;
2129 TestSkiaTextRenderer renderer(&canvas); 2131 TestSkiaTextRenderer renderer(&canvas);
2130 2132
2131 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { 2133 for (size_t i = 0; i < arraysize(kTestStrings); ++i) {
2132 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); 2134 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i));
2133 render_text.SetText(WideToUTF16(kTestStrings[i].text)); 2135 render_text.SetText(WideToUTF16(kTestStrings[i].text));
2134 render_text.EnsureLayout(); 2136 render_text.EnsureLayout();
2135 render_text.DrawVisualTextInternal(&renderer); 2137 render_text.DrawVisualTextInternal(&renderer);
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
2302 std::vector<base::string16> lines; 2304 std::vector<base::string16> lines;
2303 base::SplitString(base::WideToUTF16(kTestStrings[i].text), '\n', &lines); 2305 base::SplitString(base::WideToUTF16(kTestStrings[i].text), '\n', &lines);
2304 ASSERT_EQ(2u, lines.size()); 2306 ASSERT_EQ(2u, lines.size());
2305 int difference = (lines[0].length() - lines[1].length()) * kGlyphSize; 2307 int difference = (lines[0].length() - lines[1].length()) * kGlyphSize;
2306 EXPECT_EQ(render_text.GetAlignmentOffset(0).x() + difference, 2308 EXPECT_EQ(render_text.GetAlignmentOffset(0).x() + difference,
2307 render_text.GetAlignmentOffset(1).x()); 2309 render_text.GetAlignmentOffset(1).x());
2308 } 2310 }
2309 } 2311 }
2310 } 2312 }
2311 2313
2314 TEST_F(RenderTextTest, Multiline_WordWrapBehavior) {
2315 const int kGlyphSize = 5;
2316 const struct {
2317 const WordWrapBehavior behavior;
2318 const size_t num_lines;
2319 const Range char_ranges[4];
2320 } kTestScenarios[] = {
2321 { IGNORE_LONG_WORDS, 3u,
2322 { Range(0, 4), Range(4, 11), Range(11, 14), Range::InvalidRange() } },
2323 { TRUNCATE_LONG_WORDS, 3u,
2324 { Range(0, 4), Range(4, 8), Range(11, 14), Range::InvalidRange() } },
2325 { WRAP_LONG_WORDS, 4u,
2326 { Range(0, 4), Range(4, 8), Range(8, 11), Range(11, 14) } },
2327 // TODO(mukai): implement ELIDE_LONG_WORDS. It's not used right now.
2328 };
2329 RenderTextHarfBuzz render_text;
2330 render_text.SetMultiline(true);
2331 render_text.SetText(ASCIIToUTF16("foo fooooo foo"));
2332 render_text.set_glyph_width_for_test(kGlyphSize);
2333 render_text.SetDisplayRect(Rect(0, 0, kGlyphSize * 4, 0));
2334
2335 Canvas canvas;
2336
2337 for (size_t i = 0; i < arraysize(kTestScenarios); ++i) {
2338 SCOPED_TRACE(base::StringPrintf(
2339 "kTestScenarios[%" PRIuS "] %d", i, kTestScenarios[i].behavior));
2340 render_text.SetWordWrapBehavior(kTestScenarios[i].behavior);
2341 render_text.Draw(&canvas);
2342
2343 ASSERT_EQ(kTestScenarios[i].num_lines, render_text.lines().size());
2344 for (size_t j = 0; j < render_text.lines().size(); ++j) {
2345 SCOPED_TRACE(base::StringPrintf("%" PRIuS "-th line", j));
2346 EXPECT_EQ(kTestScenarios[i].char_ranges[j],
2347 render_text.lines()[j].segments[0].char_range);
2348 EXPECT_EQ(kTestScenarios[i].char_ranges[j].length() * kGlyphSize,
2349 render_text.lines()[j].size.width());
2350 }
2351 }
2352 }
2353
2312 TEST_F(RenderTextTest, NewlineWithoutMultilineFlag) { 2354 TEST_F(RenderTextTest, NewlineWithoutMultilineFlag) {
2313 const wchar_t* kTestStrings[] = { 2355 const wchar_t* kTestStrings[] = {
2314 L"abc\ndef", L"a \n b ", L"ab\n", L"a\n\nb", L"\nab", L"\n", 2356 L"abc\ndef", L"a \n b ", L"ab\n", L"a\n\nb", L"\nab", L"\n",
2315 }; 2357 };
2316 2358
2317 RenderTextHarfBuzz render_text; 2359 RenderTextHarfBuzz render_text;
2318 render_text.SetDisplayRect(Rect(200, 1000)); 2360 render_text.SetDisplayRect(Rect(200, 1000));
2319 Canvas canvas; 2361 Canvas canvas;
2320 2362
2321 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { 2363 for (size_t i = 0; i < arraysize(kTestStrings); ++i) {
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after
2886 string_size.set_width(string_size.width() / 2); 2928 string_size.set_width(string_size.width() / 2);
2887 render_text.SetDisplayRect(gfx::Rect(string_size)); 2929 render_text.SetDisplayRect(gfx::Rect(string_size));
2888 render_text.EnsureLayout(); 2930 render_text.EnsureLayout();
2889 CFIndex glyph_count = CTLineGetGlyphCount(render_text.line_); 2931 CFIndex glyph_count = CTLineGetGlyphCount(render_text.line_);
2890 EXPECT_GT(text.size(), static_cast<size_t>(glyph_count)); 2932 EXPECT_GT(text.size(), static_cast<size_t>(glyph_count));
2891 EXPECT_NE(0, glyph_count); 2933 EXPECT_NE(0, glyph_count);
2892 } 2934 }
2893 #endif 2935 #endif
2894 2936
2895 } // namespace gfx 2937 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gfx/render_text_harfbuzz.cc ('k') | ui/gfx/text_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698