1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/message_center/views/bounded_label.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <limits> 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_split.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string_util.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/font_list.h" 14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/text_utils.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/controls/label.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace message_center { 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace test { 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* Test fixture ***************************************************************/ 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class BoundedLabelTest : public testing::Test { 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BoundedLabelTest() { 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) digit_pixels_ = gfx::GetStringWidth(base::UTF8ToUTF16("0"), font_list_); 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) space_pixels_ = gfx::GetStringWidth(base::UTF8ToUTF16(" "), font_list_); 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ellipsis_pixels_ = gfx::GetStringWidth(base::UTF8ToUTF16("\xE2\x80\xA6"), 29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) font_list_); 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~BoundedLabelTest() {} 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Replaces all occurences of three periods ("...") in the specified string 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // with an ellipses character (UTF8 "\xE2\x80\xA6") and returns a string16 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // with the results. This allows test strings to be specified as ASCII const 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // char* strings, making tests more readable and easier to write. 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 ToString(const char* string) { 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 periods = base::UTF8ToUTF16("..."); 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 ellipses = base::UTF8ToUTF16("\xE2\x80\xA6"); 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 result = base::UTF8ToUTF16(string); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ReplaceSubstringsAfterOffset(&result, 0, periods, ellipses); 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return result; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Converts the specified elision width to pixels. To make tests somewhat 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // independent of the fonts of the platform on which they're run, the elision 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // widths are specified as XYZ integers, with the corresponding width in 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // pixels being X times the width of digit characters plus Y times the width 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // of spaces plus Z times the width of ellipses in the default font of the 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // test plaform. It is assumed that all digits have the same width in that 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // font, that this width is greater than the width of spaces, and that the 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // width of 3 digits is greater than the width of ellipses. 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int ToPixels(int width) { 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return digit_pixels_ * width / 100 + 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) space_pixels_ * (width % 100) / 10 + 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ellipsis_pixels_ * (width % 10); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Exercise BounderLabel::GetWrappedText() using the fixture's test label. 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 GetWrappedText(int width) { 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return label_->GetWrappedTextForTest(width, lines_); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Exercise BounderLabel::GetLinesForWidthAndLimit() using the test label. 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int GetLinesForWidth(int width) { 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) label_->SetBounds(0, 0, width, font_list_.GetHeight() * lines_); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return label_->GetLinesForWidthAndLimit(width, lines_); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Creates a label to test with. Returns this fixture, which can be used to 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // test the newly created label using the exercise methods above. 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BoundedLabelTest& Label(base::string16 text, int lines) { 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) lines_ = lines; 76d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) label_.reset(new BoundedLabel(text, font_list_)); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) label_->SetLineLimit(lines_); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return *this; 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // The default font list, which will be used for tests. 83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) gfx::FontList font_list_; 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int digit_pixels_; 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int space_pixels_; 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int ellipsis_pixels_; 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<BoundedLabel> label_; 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int lines_; 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* Test macro *****************************************************************/ 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define TEST_WRAP(expected, text, width, lines) \ 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(ToString(expected), \ 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Label(ToString(text), lines).GetWrappedText(ToPixels(width))) 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define TEST_LINES(expected, text, width, lines) \ 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected, \ 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Label(ToString(text), lines).GetLinesForWidth(ToPixels(width))) 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* Elision tests **************************************************************/ 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(BoundedLabelTest, GetWrappedTextTest) { 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // One word per line: No ellision should be made when not necessary. 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123", "123", 301, 1); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123", "123", 301, 2); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123", "123", 301, 3); 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456", "123 456", 301, 2); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456", "123 456", 301, 3); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456\n789", "123 456 789", 301, 3); 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // One word per line: Ellisions should be made when necessary. 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123...", "123 456", 301, 1); 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123...", "123 456 789", 301, 1); 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456...", "123 456 789", 301, 2); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Two words per line: No ellision should be made when not necessary. 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456", "123 456", 621, 1); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456", "123 456", 621, 2); 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456", "123 456", 621, 3); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012", "123 456 789 012", 621, 2); 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012", "123 456 789 012", 621, 3); 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012\n345 678", "123 456 789 012 345 678", 621, 3); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Two words per line: Ellisions should be made when necessary. 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456...", "123 456 789 012", 621, 1); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456...", "123 456 789 012 345 678", 621, 1); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012...", "123 456 789 012 345 678", 621, 2); 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Single trailing spaces: No ellipses should be added. 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123", "123 ", 301, 1); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456", "123 456 ", 301, 2); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456\n789", "123 456 789 ", 301, 3); 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456", "123 456 ", 611, 1); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012", "123 456 789 012 ", 611, 2); 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012\n345 678", "123 456 789 012 345 678 ", 611, 3); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Multiple trailing spaces: No ellipses should be added. 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123", "123 ", 301, 1); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456", "123 456 ", 301, 2); 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456\n789", "123 456 789 ", 301, 3); 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456", "123 456 ", 611, 1); 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012", "123 456 789 012 ", 611, 2); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012\n345 678", 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123 456 789 012 345 678 ", 611, 3); 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Multiple spaces between words on the same line: Spaces should be preserved. 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Test cases for single spaces between such words are included in the "Two 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // words per line" sections above. 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456", "123 456", 621, 1); 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456...", "123 456 789 012", 631, 1); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012", "123 456 789 012", 631, 2); 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456...", "123 456 789 012 345 678", 621, 1); 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012...", "123 456 789 012 345 678", 631, 2); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012\n345 678", 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123 456 789 012 345 678", 641, 3); 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Multiple spaces between words split across lines: Spaces should be removed 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // even if lines are wide enough to include those spaces. Test cases for 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // single spaces between such words are included in the "Two words per line" 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // sections above. 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456", "123 456", 321, 2); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456", "123 456", 391, 2); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456...", "123 456 789", 321, 2); 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456...", "123 456 789", 391, 2); 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012", "123 456 789 012", 641, 2); 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123 456\n789 012...", "123 456 789 012 345 678", 641, 2); 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Long words without spaces should be wrapped when necessary. 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_WRAP("123\n456", "123456", 300, 9); 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(dharcourt): Add test cases to verify that: 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // - Spaces before elisions are removed 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // - Leading spaces are preserved 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // - Words are split when they are longer than lines 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // - Words are clipped when they are longer than the last line 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // - No blank line are created before or after clipped word 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // - Spaces at the end of the text are removed 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(dharcourt): Add test cases for: 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // - Empty and very large strings 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // - Zero, very large, and negative line limit values 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // - Other input boundary conditions 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(dharcourt): Add some randomly generated fuzz test cases. 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* GetLinesTest ***************************************************************/ 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(BoundedLabelTest, GetLinesTest) { 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Zero and negative width values should yield zero lines. 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_LINES(0, "123 456", 0, 1); 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_LINES(0, "123 456", -1, 1); 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_LINES(0, "123 456", -2, 1); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_LINES(0, "123 456", std::numeric_limits<int>::min(), 1); 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Small width values should yield one word per line. 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_LINES(1, "123 456", 1, 1); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_LINES(2, "123 456", 1, 2); 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_LINES(1, "123 456", 2, 1); 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_LINES(2, "123 456", 2, 2); 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_LINES(1, "123 456", 3, 1); 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_LINES(2, "123 456", 3, 2); 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Large width values should yield all words on one line. 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_LINES(1, "123 456", 610, 1); 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TEST_LINES(1, "123 456", std::numeric_limits<int>::max(), 1); 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* Other tests ****************************************************************/ 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(dharcourt): Add test cases to verify that: 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// - SetMaxLines() affects the return values of some methods but not others. 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// - Bound changes affects GetPreferredLines(), GetTextSize(), and 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// GetWrappedText() return values. 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// - GetTextFlags are as expected. 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace test 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace message_center 221