14e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka/* 24e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * Copyright (C) 2015 The Android Open Source Project 34e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * 44e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License"); 54e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * you may not use this file except in compliance with the License. 64e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * You may obtain a copy of the License at 74e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * 84e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * http://www.apache.org/licenses/LICENSE-2.0 94e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * 104e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * Unless required by applicable law or agreed to in writing, software 114e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS, 124e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * See the License for the specific language governing permissions and 144e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka * limitations under the License. 154e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka */ 164e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 174e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka#include <gtest/gtest.h> 184e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka#include <UnicodeUtils.h> 194e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 204e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka#include "LayoutUtils.h" 214e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2214e2d136aaef271ba131f917cf5f27baa31ae5adSeigo Nonakanamespace minikin { 234e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 244e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonakavoid ExpectNextWordBreakForCache(size_t offset_in, const char* query_str) { 254e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka const size_t BUF_SIZE = 256U; 264e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka uint16_t buf[BUF_SIZE]; 274e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka size_t expected_breakpoint = 0U; 284e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka size_t size = 0U; 294e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 304e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ParseUnicode(buf, BUF_SIZE, query_str, &size, &expected_breakpoint); 314e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka EXPECT_EQ(expected_breakpoint, 324e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka getNextWordBreakForCache(buf, offset_in, size)) 334e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka << "Expected position is [" << query_str << "] from offset " << offset_in; 344e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka} 354e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 364e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonakavoid ExpectPrevWordBreakForCache(size_t offset_in, const char* query_str) { 374e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka const size_t BUF_SIZE = 256U; 384e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka uint16_t buf[BUF_SIZE]; 394e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka size_t expected_breakpoint = 0U; 404e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka size_t size = 0U; 414e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 424e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ParseUnicode(buf, BUF_SIZE, query_str, &size, &expected_breakpoint); 434e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka EXPECT_EQ(expected_breakpoint, 444e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka getPrevWordBreakForCache(buf, offset_in, size)) 454e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka << "Expected position is [" << query_str << "] from offset " << offset_in; 464e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka} 474e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 484e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo NonakaTEST(WordBreakTest, goNextWordBreakTest) { 494e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "|"); 504e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 514e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Continue for spaces. 524e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "'a' 'b' 'c' 'd' |"); 534e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "'a' 'b' 'c' 'd' |"); 544e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "'a' 'b' 'c' 'd' |"); 554e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "'a' 'b' 'c' 'd' |"); 564e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "'a' 'b' 'c' 'd' |"); 574e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "'a' 'b' 'c' 'd' |"); 584e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 594e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Space makes word break. 604e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "'a' 'b' | U+0020 'c' 'd'"); 614e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "'a' 'b' | U+0020 'c' 'd'"); 624e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "'a' 'b' U+0020 | 'c' 'd'"); 634e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "'a' 'b' U+0020 'c' 'd' |"); 644e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "'a' 'b' U+0020 'c' 'd' |"); 654e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(5, "'a' 'b' U+0020 'c' 'd' |"); 664e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "'a' 'b' U+0020 'c' 'd' |"); 674e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 684e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "'a' 'b' | U+2000 'c' 'd'"); 694e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "'a' 'b' | U+2000 'c' 'd'"); 704e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "'a' 'b' U+2000 | 'c' 'd'"); 714e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "'a' 'b' U+2000 'c' 'd' |"); 724e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "'a' 'b' U+2000 'c' 'd' |"); 734e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(5, "'a' 'b' U+2000 'c' 'd' |"); 744e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "'a' 'b' U+2000 'c' 'd' |"); 754e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 764e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "'a' 'b' | U+2000 U+2000 'c' 'd'"); 774e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "'a' 'b' | U+2000 U+2000 'c' 'd'"); 784e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "'a' 'b' U+2000 | U+2000 'c' 'd'"); 794e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "'a' 'b' U+2000 U+2000 | 'c' 'd'"); 804e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "'a' 'b' U+2000 U+2000 'c' 'd' |"); 814e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(5, "'a' 'b' U+2000 U+2000 'c' 'd' |"); 824e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(6, "'a' 'b' U+2000 U+2000 'c' 'd' |"); 834e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "'a' 'b' U+2000 U+2000 'c' 'd' |"); 844e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 854e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK ideographs makes word break. 864e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+4E00 | U+4E00 U+4E00 U+4E00 U+4E00"); 874e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+4E00 U+4E00 | U+4E00 U+4E00 U+4E00"); 884e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+4E00 U+4E00 U+4E00 | U+4E00 U+4E00"); 894e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+4E00 U+4E00 U+4E00 U+4E00 | U+4E00"); 904e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+4E00 U+4E00 U+4E00 U+4E00 U+4E00 |"); 914e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(5, "U+4E00 U+4E00 U+4E00 U+4E00 U+4E00 |"); 924e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, 934e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka "U+4E00 U+4E00 U+4E00 U+4E00 U+4E00 |"); 944e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 954e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+4E00 | U+4E8C U+4E09 U+56DB U+4E94"); 964e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+4E00 U+4E8C | U+4E09 U+56DB U+4E94"); 974e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+4E00 U+4E8C U+4E09 | U+56DB U+4E94"); 984e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+4E00 U+4E8C U+4E09 U+56DB | U+4E94"); 994e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+4E00 U+4E8C U+4E09 U+56DB U+4E94 |"); 1004e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(5, "U+4E00 U+4E8C U+4E09 U+56DB U+4E94 |"); 1014e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, 1024e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka "U+4E00 U+4E8C U+4E09 U+56DB U+4E94 |"); 1034e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1044e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+4E00 'a' 'b' | U+2000 'c' U+4E00"); 1054e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+4E00 'a' 'b' | U+2000 'c' U+4E00"); 1064e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+4E00 'a' 'b' | U+2000 'c' U+4E00"); 1074e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+4E00 'a' 'b' U+2000 | 'c' U+4E00"); 1084e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+4E00 'a' 'b' U+2000 'c' | U+4E00"); 1094e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(5, "U+4E00 'a' 'b' U+2000 'c' U+4E00 |"); 1104e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+4E00 'a' 'b' U+2000 'c' U+4E00 |"); 1114e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1124e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Continue if trailing characters is Unicode combining characters. 1134e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+4E00 U+0332 | U+4E00"); 1144e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+4E00 U+0332 | U+4E00"); 1154e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+4E00 U+0332 U+4E00 |"); 1164e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+4E00 U+0332 U+4E00 |"); 1174e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+4E00 U+0332 U+4E00 |"); 1184e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1194e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Surrogate pairs. 1204e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+1F60D U+1F618 |"); 1214e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+1F60D U+1F618 |"); 1224e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+1F60D U+1F618 |"); 1234e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+1F60D U+1F618 |"); 1244e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+1F60D U+1F618 |"); 1254e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+1F60D U+1F618 |"); 1264e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1274e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Broken surrogate pairs. 1284e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // U+D84D is leading surrogate but there is no trailing surrogate for it. 1294e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+D84D U+1F618 |"); 1304e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+D84D U+1F618 |"); 1314e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+D84D U+1F618 |"); 1324e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+D84D U+1F618 |"); 1334e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+D84D U+1F618 |"); 1344e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1354e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+1F618 U+D84D |"); 1364e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+1F618 U+D84D |"); 1374e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+1F618 U+D84D |"); 1384e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+1F618 U+D84D |"); 1394e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+1F618 U+D84D |"); 1404e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1414e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // U+DE0D is trailing surrogate but there is no leading surrogate for it. 1424e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+DE0D U+1F618 |"); 1434e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+DE0D U+1F618 |"); 1444e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+DE0D U+1F618 |"); 1454e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+DE0D U+1F618 |"); 1464e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+DE0D U+1F618 |"); 1474e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1484e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+1F618 U+DE0D |"); 1494e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+1F618 U+DE0D |"); 1504e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+1F618 U+DE0D |"); 1514e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+1F618 U+DE0D |"); 1524e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+1F618 U+DE0D |"); 1534e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1544e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Regional indicator pair. U+1F1FA U+1F1F8 is US national flag. 1554e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+1F1FA U+1F1F8 |"); 1564e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+1F1FA U+1F1F8 |"); 1574e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+1F1FA U+1F1F8 |"); 1584e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+1F1FA U+1F1F8 |"); 1594e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1604e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Tone marks. 1614e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK ideographic char + Tone mark + CJK ideographic char 1624e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+4444 U+302D | U+4444"); 1634e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+4444 U+302D | U+4444"); 1644e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+4444 U+302D U+4444 |"); 1654e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+4444 U+302D U+4444 |"); 1664e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+4444 U+302D U+4444 |"); 1674e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1684e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Variation Selectors. 1694e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK Ideographic char + Variation Selector(VS1) + CJK Ideographic char 1704e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+845B U+FE00 | U+845B"); 1714e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+845B U+FE00 | U+845B"); 1724e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+845B U+FE00 U+845B |"); 1734e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+845B U+FE00 U+845B |"); 1744e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+845B U+FE00 U+845B |"); 1754e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1764e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK Ideographic char + Variation Selector(VS17) + CJK Ideographic char 1774e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+845B U+E0100 | U+845B"); 1784e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+845B U+E0100 | U+845B"); 1794e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+845B U+E0100 | U+845B"); 1804e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+845B U+E0100 U+845B |"); 1814e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+845B U+E0100 U+845B |"); 1824e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(5, "U+845B U+E0100 U+845B |"); 1834e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+845B U+E0100 U+845B |"); 1844e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1854e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK ideographic char + Tone mark + Variation Character(VS1) 1864e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+4444 U+302D U+FE00 | U+4444"); 1874e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+4444 U+302D U+FE00 | U+4444"); 1884e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+4444 U+302D U+FE00 | U+4444"); 1894e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+4444 U+302D U+FE00 U+4444 |"); 1904e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+4444 U+302D U+FE00 U+4444 |"); 1914e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+4444 U+302D U+FE00 U+4444 |"); 1924e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 1934e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK ideographic char + Tone mark + Variation Character(VS17) 1944e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+4444 U+302D U+E0100 | U+4444"); 1954e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+4444 U+302D U+E0100 | U+4444"); 1964e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+4444 U+302D U+E0100 | U+4444"); 1974e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+4444 U+302D U+E0100 | U+4444"); 1984e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+4444 U+302D U+E0100 U+4444 |"); 1994e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(5, "U+4444 U+302D U+E0100 U+4444 |"); 2004e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+4444 U+302D U+E0100 U+4444 |"); 2014e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2024e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK ideographic char + Variation Character(VS1) + Tone mark 2034e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+4444 U+FE00 U+302D | U+4444"); 2044e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+4444 U+FE00 U+302D | U+4444"); 2054e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+4444 U+FE00 U+302D | U+4444"); 2064e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+4444 U+FE00 U+302D U+4444 |"); 2074e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+4444 U+FE00 U+302D U+4444 |"); 2084e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+4444 U+FE00 U+302D U+4444 |"); 2094e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2104e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK ideographic char + Variation Character(VS17) + Tone mark 2114e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+4444 U+E0100 U+302D | U+4444"); 2124e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+4444 U+E0100 U+302D | U+4444"); 2134e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+4444 U+E0100 U+302D | U+4444"); 2144e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+4444 U+E0100 U+302D | U+4444"); 2154e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+4444 U+E0100 U+302D U+4444 |"); 2164e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(5, "U+4444 U+E0100 U+302D U+4444 |"); 2174e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+4444 U+E0100 U+302D U+4444 |"); 2184e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2194e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Following test cases are unusual usage of variation selectors and tone 2204e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // marks for caching up the further behavior changes, e.g. index of bounds 2214e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // or crashes. Please feel free to update the test expectations if the 2224e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // behavior change makes sense to you. 2234e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2244e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Isolated Tone marks and Variation Selectors 2254e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+FE00 |"); 2264e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+FE00 |"); 2274e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+FE00 |"); 2284e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+E0100 |"); 2294e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+E0100 |"); 2304e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+302D |"); 2314e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+302D |"); 2324e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2334e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK Ideographic char + Variation Selector(VS1) + Variation Selector(VS1) 2344e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+845B U+FE00 U+FE00 | U+845B"); 2354e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+845B U+FE00 U+FE00 | U+845B"); 2364e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+845B U+FE00 U+FE00 | U+845B"); 2374e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+845B U+FE00 U+FE00 U+845B |"); 2384e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+845B U+FE00 U+FE00 U+845B |"); 2394e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+845B U+FE00 U+FE00 U+845B |"); 2404e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2414e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK Ideographic char + Variation Selector(VS17) + Variation Selector(VS17) 2424e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+845B U+E0100 U+E0100 | U+845B"); 2434e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+845B U+E0100 U+E0100 | U+845B"); 2444e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+845B U+E0100 U+E0100 | U+845B"); 2454e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+845B U+E0100 U+E0100 | U+845B"); 2464e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+845B U+E0100 U+E0100 | U+845B"); 2474e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(5, "U+845B U+E0100 U+E0100 U+845B |"); 2484e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(6, "U+845B U+E0100 U+E0100 U+845B |"); 2494e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, 2504e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka "U+845B U+E0100 U+E0100 U+845B |"); 2514e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2524e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK Ideographic char + Variation Selector(VS1) + Variation Selector(VS17) 2534e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+845B U+FE00 U+E0100 | U+845B"); 2544e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+845B U+FE00 U+E0100 | U+845B"); 2554e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+845B U+FE00 U+E0100 | U+845B"); 2564e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+845B U+FE00 U+E0100 | U+845B"); 2574e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+845B U+FE00 U+E0100 U+845B |"); 2584e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(5, "U+845B U+FE00 U+E0100 U+845B |"); 2594e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+845B U+FE00 U+E0100 U+845B |"); 2604e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2614e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK Ideographic char + Variation Selector(VS17) + Variation Selector(VS1) 2624e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+845B U+E0100 U+FE00 | U+845B"); 2634e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+845B U+E0100 U+FE00 | U+845B"); 2644e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+845B U+E0100 U+FE00 | U+845B"); 2654e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+845B U+E0100 U+FE00 | U+845B"); 2664e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+845B U+E0100 U+FE00 U+845B |"); 2674e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(5, "U+845B U+E0100 U+FE00 U+845B |"); 2684e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+845B U+E0100 U+FE00 U+845B |"); 2694e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2704e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Tone mark. + Tone mark 2714e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(0, "U+4444 U+302D U+302D | U+4444"); 2724e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1, "U+4444 U+302D U+302D | U+4444"); 2734e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(2, "U+4444 U+302D U+302D | U+4444"); 2744e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(3, "U+4444 U+302D U+302D U+4444 |"); 2754e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(4, "U+4444 U+302D U+302D U+4444 |"); 2764e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectNextWordBreakForCache(1000, "U+4444 U+302D U+302D U+4444 |"); 2774e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka} 2784e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2794e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo NonakaTEST(WordBreakTest, goPrevWordBreakTest) { 2804e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "|"); 2814e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2824e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Continue for spaces. 2834e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| 'a' 'b' 'c' 'd'"); 2844e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| 'a' 'b' 'c' 'd'"); 2854e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| 'a' 'b' 'c' 'd'"); 2864e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| 'a' 'b' 'c' 'd'"); 2874e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "| 'a' 'b' 'c' 'd'"); 2884e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "| 'a' 'b' 'c' 'd'"); 2894e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2904e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Space makes word break. 2914e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| 'a' 'b' U+0020 'c' 'd'"); 2924e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| 'a' 'b' U+0020 'c' 'd'"); 2934e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| 'a' 'b' U+0020 'c' 'd'"); 2944e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "'a' 'b' | U+0020 'c' 'd'"); 2954e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "'a' 'b' U+0020 | 'c' 'd'"); 2964e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(5, "'a' 'b' U+0020 | 'c' 'd'"); 2974e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "'a' 'b' U+0020 | 'c' 'd'"); 2984e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 2994e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| 'a' 'b' U+2000 'c' 'd'"); 3004e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| 'a' 'b' U+2000 'c' 'd'"); 3014e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| 'a' 'b' U+2000 'c' 'd'"); 3024e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "'a' 'b' | U+2000 'c' 'd'"); 3034e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "'a' 'b' U+2000 | 'c' 'd'"); 3044e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(5, "'a' 'b' U+2000 | 'c' 'd'"); 3054e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "'a' 'b' U+2000 | 'c' 'd'"); 3064e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3074e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| 'a' 'b' U+2000 U+2000 'c' 'd'"); 3084e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| 'a' 'b' U+2000 U+2000 'c' 'd'"); 3094e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| 'a' 'b' U+2000 U+2000 'c' 'd'"); 3104e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "'a' 'b' | U+2000 U+2000 'c' 'd'"); 3114e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "'a' 'b' U+2000 | U+2000 'c' 'd'"); 3124e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(5, "'a' 'b' U+2000 U+2000 | 'c' 'd'"); 3134e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(6, "'a' 'b' U+2000 U+2000 | 'c' 'd'"); 3144e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "'a' 'b' U+2000 U+2000 | 'c' 'd'"); 3154e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3164e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK ideographs makes word break. 3174e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+4E00 U+4E00 U+4E00 U+4E00 U+4E00"); 3184e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+4E00 U+4E00 U+4E00 U+4E00 U+4E00"); 3194e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "U+4E00 | U+4E00 U+4E00 U+4E00 U+4E00"); 3204e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "U+4E00 U+4E00 | U+4E00 U+4E00 U+4E00"); 3214e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "U+4E00 U+4E00 U+4E00 | U+4E00 U+4E00"); 3224e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(5, "U+4E00 U+4E00 U+4E00 U+4E00 | U+4E00"); 3234e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+4E00 U+4E00 U+4E00 U+4E00 | U+4E00"); 3244e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3254e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+4E00 U+4E8C U+4E09 U+56DB U+4E94"); 3264e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+4E00 U+4E8C U+4E09 U+56DB U+4E94"); 3274e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "U+4E00 | U+4E8C U+4E09 U+56DB U+4E94"); 3284e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "U+4E00 U+4E8C | U+4E09 U+56DB U+4E94"); 3294e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "U+4E00 U+4E8C U+4E09 | U+56DB U+4E94"); 3304e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(5, "U+4E00 U+4E8C U+4E09 U+56DB | U+4E94"); 3314e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+4E00 U+4E8C U+4E09 U+56DB | U+4E94"); 3324e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3334e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Mixed case. 3344e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+4E00 'a' 'b' U+2000 'c' U+4E00"); 3354e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+4E00 'a' 'b' U+2000 'c' U+4E00"); 3364e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+4E00 'a' 'b' U+2000 'c' U+4E00"); 3374e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+4E00 'a' 'b' U+2000 'c' U+4E00"); 3384e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "U+4E00 'a' 'b' | U+2000 'c' U+4E00"); 3394e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(5, "U+4E00 'a' 'b' U+2000 | 'c' U+4E00"); 3404e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(6, "U+4E00 'a' 'b' U+2000 'c' | U+4E00"); 3414e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+4E00 'a' 'b' U+2000 'c' | U+4E00"); 3424e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3434e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Continue if trailing characters is Unicode combining characters. 3444e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+4E00 U+0332 U+4E00"); 3454e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+4E00 U+0332 U+4E00"); 3464e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+4E00 U+0332 U+4E00"); 3474e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "U+4E00 U+0332 | U+4E00"); 3484e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+4E00 U+0332 | U+4E00"); 3494e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3504e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Surrogate pairs. 3514e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+1F60D U+1F618"); 3524e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+1F60D U+1F618"); 3534e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+1F60D U+1F618"); 3544e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+1F60D U+1F618"); 3554e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "| U+1F60D U+1F618"); 3564e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "| U+1F60D U+1F618"); 3574e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3584e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Broken surrogate pairs. 3594e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // U+D84D is leading surrogate but there is no trailing surrogate for it. 3604e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+D84D U+1F618"); 3614e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+D84D U+1F618"); 3624e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+D84D U+1F618"); 3634e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+D84D U+1F618"); 3644e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "| U+D84D U+1F618"); 3654e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3664e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+1F618 U+D84D"); 3674e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+1F618 U+D84D"); 3684e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+1F618 U+D84D"); 3694e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+1F618 U+D84D"); 3704e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "| U+1F618 U+D84D"); 3714e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3724e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // U+DE0D is trailing surrogate but there is no leading surrogate for it. 3734e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+DE0D U+1F618"); 3744e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+DE0D U+1F618"); 3754e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+DE0D U+1F618"); 3764e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+DE0D U+1F618"); 3774e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "| U+DE0D U+1F618"); 3784e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3794e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+1F618 U+DE0D"); 3804e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+1F618 U+DE0D"); 3814e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+1F618 U+DE0D"); 3824e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+1F618 U+DE0D"); 3834e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "| U+1F618 U+DE0D"); 3844e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3854e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Regional indicator pair. U+1F1FA U+1F1F8 is US national flag. 3864e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+1F1FA U+1F1F8"); 3874e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+1F1FA U+1F1F8"); 3884e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+1F1FA U+1F1F8"); 3894e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "| U+1F1FA U+1F1F8"); 3904e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3914e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Tone marks. 3924e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK ideographic char + Tone mark + CJK ideographic char 3934e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+4444 U+302D U+4444"); 3944e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+4444 U+302D U+4444"); 3954e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+4444 U+302D U+4444"); 3964e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "U+4444 U+302D | U+4444"); 3974e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+4444 U+302D | U+4444"); 3984e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 3994e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Variation Selectors. 4004e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK Ideographic char + Variation Selector(VS1) + CJK Ideographic char 4014e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+845B U+FE00 U+845B"); 4024e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+845B U+FE00 U+845B"); 4034e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+845B U+FE00 U+845B"); 4044e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "U+845B U+FE00 | U+845B"); 4054e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+845B U+FE00 | U+845B"); 4064e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 4074e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK Ideographic char + Variation Selector(VS17) + CJK Ideographic char 4084e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+845B U+E0100 U+845B"); 4094e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+845B U+E0100 U+845B"); 4104e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+845B U+E0100 U+845B"); 4114e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+845B U+E0100 U+845B"); 4124e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "U+845B U+E0100 | U+845B"); 4134e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(5, "U+845B U+E0100 | U+845B"); 4144e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+845B U+E0100 | U+845B"); 4154e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 4164e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK ideographic char + Tone mark + Variation Character(VS1) 4174e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+4444 U+302D U+FE00 U+4444"); 4184e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+4444 U+302D U+FE00 U+4444"); 4194e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+4444 U+302D U+FE00 U+4444"); 4204e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+4444 U+302D U+FE00 U+4444"); 4214e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "U+4444 U+302D U+FE00 | U+4444"); 4224e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+4444 U+302D U+FE00 | U+4444"); 4234e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 4244e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK ideographic char + Tone mark + Variation Character(VS17) 4254e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+4444 U+302D U+E0100 U+4444"); 4264e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+4444 U+302D U+E0100 U+4444"); 4274e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+4444 U+302D U+E0100 U+4444"); 4284e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+4444 U+302D U+E0100 U+4444"); 4294e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "| U+4444 U+302D U+E0100 U+4444"); 4304e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(5, "U+4444 U+302D U+E0100 | U+4444"); 4314e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+4444 U+302D U+E0100 | U+4444"); 4324e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 4334e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK ideographic char + Variation Character(VS1) + Tone mark 4344e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+4444 U+FE00 U+302D U+4444"); 4354e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+4444 U+FE00 U+302D U+4444"); 4364e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+4444 U+FE00 U+302D U+4444"); 4374e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+4444 U+FE00 U+302D U+4444"); 4384e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "U+4444 U+FE00 U+302D | U+4444"); 4394e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+4444 U+FE00 U+302D | U+4444"); 4404e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 4414e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK ideographic char + Variation Character(VS17) + Tone mark 4424e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+4444 U+E0100 U+302D U+4444"); 4434e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+4444 U+E0100 U+302D U+4444"); 4444e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+4444 U+E0100 U+302D U+4444"); 4454e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+4444 U+E0100 U+302D U+4444"); 4464e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "| U+4444 U+E0100 U+302D U+4444"); 4474e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(5, "U+4444 U+E0100 U+302D | U+4444"); 4484e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+4444 U+E0100 U+302D | U+4444"); 4494e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 4504e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Following test cases are unusual usage of variation selectors and tone 4514e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // marks for caching up the further behavior changes, e.g. index of bounds 4524e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // or crashes. Please feel free to update the test expectations if the 4534e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // behavior change makes sense to you. 4544e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 4554e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Isolated Tone marks and Variation Selectors 4564e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+FE00"); 4574e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+FE00"); 4584e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "| U+FE00"); 4594e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+E0100"); 4604e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "| U+E0100"); 4614e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+302D"); 4624e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "| U+302D"); 4634e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 4644e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK Ideographic char + Variation Selector(VS1) + Variation Selector(VS1) 4654e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+845B U+FE00 U+FE00 U+845B"); 4664e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+845B U+FE00 U+FE00 U+845B"); 4674e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+845B U+FE00 U+FE00 U+845B"); 4684e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+845B U+FE00 U+FE00 U+845B"); 4694e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "U+845B U+FE00 U+FE00 | U+845B"); 4704e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+845B U+FE00 U+FE00 | U+845B"); 4714e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 4724e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK Ideographic char + Variation Selector(VS17) + Variation Selector(VS17) 4734e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+845B U+E0100 U+E0100 U+845B"); 4744e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+845B U+E0100 U+E0100 U+845B"); 4754e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+845B U+E0100 U+E0100 U+845B"); 4764e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+845B U+E0100 U+E0100 U+845B"); 4774e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "| U+845B U+E0100 U+E0100 U+845B"); 4784e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(5, "| U+845B U+E0100 U+E0100 U+845B"); 4794e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(6, "U+845B U+E0100 U+E0100 | U+845B"); 4804e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, 4814e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka "U+845B U+E0100 U+E0100 | U+845B"); 4824e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 4834e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK Ideographic char + Variation Selector(VS1) + Variation Selector(VS17) 4844e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+845B U+FE00 U+E0100 U+845B"); 4854e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+845B U+FE00 U+E0100 U+845B"); 4864e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+845B U+FE00 U+E0100 U+845B"); 4874e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+845B U+FE00 U+E0100 U+845B"); 4884e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "| U+845B U+FE00 U+E0100 U+845B"); 4894e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(5, "U+845B U+FE00 U+E0100 | U+845B"); 4904e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+845B U+FE00 U+E0100 | U+845B"); 4914e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 4924e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // CJK Ideographic char + Variation Selector(VS17) + Variation Selector(VS1) 4934e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+845B U+E0100 U+FE00 U+845B"); 4944e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+845B U+E0100 U+FE00 U+845B"); 4954e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+845B U+E0100 U+FE00 U+845B"); 4964e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+845B U+E0100 U+FE00 U+845B"); 4974e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "| U+845B U+E0100 U+FE00 U+845B"); 4984e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(5, "U+845B U+E0100 U+FE00 | U+845B"); 4994e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+845B U+E0100 U+FE00 | U+845B"); 5004e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 5014e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka // Tone mark. + Tone mark 5024e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(0, "| U+4444 U+302D U+302D U+4444"); 5034e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1, "| U+4444 U+302D U+302D U+4444"); 5044e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(2, "| U+4444 U+302D U+302D U+4444"); 5054e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(3, "| U+4444 U+302D U+302D U+4444"); 5064e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(4, "U+4444 U+302D U+302D | U+4444"); 5074e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka ExpectPrevWordBreakForCache(1000, "U+4444 U+302D U+302D | U+4444"); 5084e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka} 5094e3adc6fb2073d5b466b88b8f5329d281038aba1Seigo Nonaka 51014e2d136aaef271ba131f917cf5f27baa31ae5adSeigo Nonaka} // namespace minikin 511