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 char16 foo
[] = {0xDC00, 0xD800, 0xD800, 0xDFFF, 0xDFFF, 0xDBFF, 0};
13 const string16
s(foo
);
14 const size_t the_invalid_index
= 3;
15 for (size_t i
= 0; i
<= s
.length(); ++i
)
16 EXPECT_EQ(i
!= the_invalid_index
, IsValidCodePointIndex(s
, i
));
17 for (size_t i
= 0; i
<= s
.length(); ++i
) {
18 for (size_t j
= i
; j
<= s
.length(); ++j
) {
19 ptrdiff_t offset
= static_cast<ptrdiff_t>(j
- i
);
20 if (i
<= the_invalid_index
&& j
> the_invalid_index
)
22 EXPECT_EQ(offset
, UTF16IndexToOffset(s
, i
, j
));
23 EXPECT_EQ(-offset
, UTF16IndexToOffset(s
, j
, i
));
24 size_t adjusted_j
= (j
== the_invalid_index
) ? j
+ 1 : j
;
25 EXPECT_EQ(adjusted_j
, UTF16OffsetToIndex(s
, i
, offset
));
26 size_t adjusted_i
= (i
== the_invalid_index
) ? i
+ 1 : i
;
27 EXPECT_EQ(adjusted_i
, UTF16OffsetToIndex(s
, j
, -offset
));