Home | History | Annotate | Download | only in gfx
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "ui/gfx/text_utils.h"
      6 
      7 #include "base/strings/utf_string_conversions.h"
      8 #include "testing/gtest/include/gtest/gtest.h"
      9 #include "ui/gfx/font_list.h"
     10 
     11 namespace gfx {
     12 namespace {
     13 
     14 const base::char16 kAcceleratorChar = '&';
     15 
     16 TEST(TextUtilsTest, RemoveAcceleratorChar) {
     17   struct TestData {
     18     const char* input;
     19     int accelerated_char_pos;
     20     int accelerated_char_span;
     21     const char* output;
     22   } cases[] = {
     23     { "", -1, 0, "" },
     24     { "&", -1, 0, "" },
     25     { "no accelerator", -1, 0, "no accelerator" },
     26     { "&one accelerator", 0, 1, "one accelerator" },
     27     { "one &accelerator", 4, 1, "one accelerator" },
     28     { "one_accelerator&", -1, 0, "one_accelerator" },
     29     { "&two &accelerators", 4, 1, "two accelerators" },
     30     { "two &accelerators&", 4, 1, "two accelerators" },
     31     { "two& &accelerators", 4, 1, "two accelerators" },
     32     { "&&escaping", -1, 0, "&escaping" },
     33     { "escap&&ing", -1, 0, "escap&ing" },
     34     { "escaping&&", -1, 0, "escaping&" },
     35     { "&mix&&ed", 0, 1, "mix&ed" },
     36     { "&&m&ix&&e&d&", 6, 1, "&mix&ed" },
     37     { "&&m&&ix&ed&&", 5, 1, "&m&ixed&" },
     38     { "&m&&ix&ed&&", 4, 1, "m&ixed&" },
     39     // U+1D49C MATHEMATICAL SCRIPT CAPITAL A, which occupies two |char16|'s.
     40     { "&\xF0\x9D\x92\x9C", 0, 2, "\xF0\x9D\x92\x9C" },
     41     { "Test&\xF0\x9D\x92\x9Cing", 4, 2, "Test\xF0\x9D\x92\x9Cing" },
     42     { "Test\xF0\x9D\x92\x9C&ing", 6, 1, "Test\xF0\x9D\x92\x9Cing" },
     43     { "Test&\xF0\x9D\x92\x9C&ing", 6, 1, "Test\xF0\x9D\x92\x9Cing" },
     44     { "Test&\xF0\x9D\x92\x9C&&ing", 4, 2, "Test\xF0\x9D\x92\x9C&ing" },
     45     { "Test&\xF0\x9D\x92\x9C&\xF0\x9D\x92\x9Cing", 6, 2,
     46       "Test\xF0\x9D\x92\x9C\xF0\x9D\x92\x9Cing" },
     47   };
     48 
     49   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
     50     int accelerated_char_pos;
     51     int accelerated_char_span;
     52     base::string16 result = RemoveAcceleratorChar(
     53         base::UTF8ToUTF16(cases[i].input),
     54         kAcceleratorChar,
     55         &accelerated_char_pos,
     56         &accelerated_char_span);
     57     EXPECT_EQ(result, base::UTF8ToUTF16(cases[i].output));
     58     EXPECT_EQ(accelerated_char_pos, cases[i].accelerated_char_pos);
     59     EXPECT_EQ(accelerated_char_span, cases[i].accelerated_char_span);
     60   }
     61 }
     62 
     63 // Disabled on Ozone since there are no fonts: crbug.com/320050
     64 #if defined(USE_OZONE)
     65 #define MAYBE_GetStringWidth DISABLED_GetStringWidth
     66 #else
     67 #define MAYBE_GetStringWidth GetStringWidth
     68 #endif
     69 TEST(TextUtilsTest, MAYBE_GetStringWidth) {
     70   FontList font_list;
     71   EXPECT_EQ(GetStringWidth(base::string16(), font_list), 0);
     72   EXPECT_GT(GetStringWidth(base::ASCIIToUTF16("a"), font_list),
     73             GetStringWidth(base::string16(), font_list));
     74   EXPECT_GT(GetStringWidth(base::ASCIIToUTF16("ab"), font_list),
     75             GetStringWidth(base::ASCIIToUTF16("a"), font_list));
     76   EXPECT_GT(GetStringWidth(base::ASCIIToUTF16("abc"), font_list),
     77             GetStringWidth(base::ASCIIToUTF16("ab"), font_list));
     78 }
     79 
     80 }  // namespace
     81 }  // namespace gfx
     82