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
3 // found in the LICENSE file.
5 #include "testing/gtest/include/gtest/gtest.h"
6 #include "ui/gfx/utf16_indexing.h"
10 TEST(UTF16IndexingTest
, IndexOffsetConversions
) {
11 // Valid surrogate pair surrounded by unpaired surrogates
12 const base::char16 foo
[] =
13 {0xDC00, 0xD800, 0xD800, 0xDFFF, 0xDFFF, 0xDBFF, 0};
14 const base::string16
s(foo
);
15 const size_t the_invalid_index
= 3;
16 for (size_t i
= 0; i
<= s
.length(); ++i
)
17 EXPECT_EQ(i
!= the_invalid_index
, IsValidCodePointIndex(s
, i
));
18 for (size_t i
= 0; i
<= s
.length(); ++i
) {
19 for (size_t j
= i
; j
<= s
.length(); ++j
) {
20 ptrdiff_t offset
= static_cast<ptrdiff_t>(j
- i
);
21 if (i
<= the_invalid_index
&& j
> the_invalid_index
)
23 EXPECT_EQ(offset
, UTF16IndexToOffset(s
, i
, j
));
24 EXPECT_EQ(-offset
, UTF16IndexToOffset(s
, j
, i
));
25 size_t adjusted_j
= (j
== the_invalid_index
) ? j
+ 1 : j
;
26 EXPECT_EQ(adjusted_j
, UTF16OffsetToIndex(s
, i
, offset
));
27 size_t adjusted_i
= (i
== the_invalid_index
) ? i
+ 1 : i
;
28 EXPECT_EQ(adjusted_i
, UTF16OffsetToIndex(s
, j
, -offset
));