BidiFormatterTest.java revision b37703fef07bb1940fd9d933bb9cc5b6c3959cb2
1b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio/* 2b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * Copyright (C) 2013 The Android Open Source Project 3b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * 4b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * Licensed under the Apache License, Version 2.0 (the "License"); 5b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * you may not use this file except in compliance with the License. 6b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * You may obtain a copy of the License at 7b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * 8b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * http://www.apache.org/licenses/LICENSE-2.0 9b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * 10b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * Unless required by applicable law or agreed to in writing, software 11b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * distributed under the License is distributed on an "AS IS" BASIS, 12b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * See the License for the specific language governing permissions and 14b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio * limitations under the License. 15b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio */ 16b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 17b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Megliopackage android.support.v4.text; 18b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 19b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglioimport android.test.AndroidTestCase; 20b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 21b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglioimport java.util.Locale; 22b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 23b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Megliopublic class BidiFormatterTest extends AndroidTestCase { 24b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 25b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio private static final BidiFormatter LTR_FMT = BidiFormatter.getInstance(false /* LTR context */); 26b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio private static final BidiFormatter RTL_FMT = BidiFormatter.getInstance(true /* RTL context */); 27b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 28b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio private static final BidiFormatter LTR_FMT_EXIT_RESET = 29b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio new BidiFormatter.Builder(false /* LTR context */).stereoReset(false).build(); 30b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio private static final BidiFormatter RTL_FMT_EXIT_RESET = 31b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio new BidiFormatter.Builder(true /* RTL context */).stereoReset(false).build(); 32b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 33b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio private static final String EN = "abba"; 34b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio private static final String HE = "\u05e0\u05e1"; 35b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 36b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio private static final String LRM = "\u200E"; 37b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio private static final String RLM = "\u200F"; 38b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio private static final String LRE = "\u202A"; 39b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio private static final String RLE = "\u202B"; 40b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio private static final String PDF = "\u202C"; 41b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 42b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio public void testIsRtlContext() { 43b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals(false, LTR_FMT.isRtlContext()); 44b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals(true, RTL_FMT.isRtlContext()); 45b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 46b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals(false, BidiFormatter.getInstance(Locale.ENGLISH).isRtlContext()); 47b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals(true, BidiFormatter.getInstance(true).isRtlContext()); 48b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio } 49b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 50b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio public void testBuilderIsRtlContext() { 51b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals(false, new BidiFormatter.Builder(false).build().isRtlContext()); 52b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals(true, new BidiFormatter.Builder(true).build().isRtlContext()); 53b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio } 54b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 55b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio public void testIsRtl() { 56b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals(true, BidiFormatter.getInstance(true).isRtl(HE)); 57b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals(true, BidiFormatter.getInstance(false).isRtl(HE)); 58b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 59b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals(false, BidiFormatter.getInstance(true).isRtl(EN)); 60b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals(false, BidiFormatter.getInstance(false).isRtl(EN)); 61b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio } 62b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 63b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio public void testUnicodeWrap() { 64b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio // Uniform directionality in opposite context. 65b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("uniform dir opposite to LTR context", 66b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RLE + "." + HE + "." + PDF + LRM, 67b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT_EXIT_RESET.unicodeWrap("." + HE + ".")); 68b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("uniform dir opposite to LTR context, stereo reset", 69b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LRM + RLE + "." + HE + "." + PDF + LRM, 70b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT.unicodeWrap("." + HE + ".")); 71b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("uniform dir opposite to LTR context, stereo reset, no isolation", 72b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RLE + "." + HE + "." + PDF, 73b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT.unicodeWrap("." + HE + ".", false)); 74b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("neutral treated as opposite to LTR context", 75b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RLE + "." + PDF + LRM, 76b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT_EXIT_RESET.unicodeWrap(".", TextDirectionHeuristicsCompat.RTL)); 77b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("uniform dir opposite to RTL context", 78b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LRE + "." + EN + "." + PDF + RLM, 79b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT_EXIT_RESET.unicodeWrap("." + EN + ".")); 80b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("uniform dir opposite to RTL context, stereo reset", 81b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RLM + LRE + "." + EN + "." + PDF + RLM, 82b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT.unicodeWrap("." + EN + ".")); 83b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("uniform dir opposite to RTL context, stereo reset, no isolation", 84b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LRE + "." + EN + "." + PDF, 85b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT.unicodeWrap("." + EN + ".", false)); 86b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("neutral treated as opposite to RTL context", 87b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LRE + "." + PDF + RLM, 88b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT_EXIT_RESET.unicodeWrap(".", TextDirectionHeuristicsCompat.LTR)); 89b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 90b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio // We test mixed-directionality cases only with an explicit overall directionality parameter 91b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio // because the estimation logic is outside the sphere of BidiFormatter, and different 92b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio // estimators will treat them differently. 93b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 94b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio // Overall directionality matching context, but with opposite exit directionality. 95b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("exit dir opposite to LTR context", 96b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio EN + HE + LRM, 97b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT_EXIT_RESET.unicodeWrap(EN + HE, TextDirectionHeuristicsCompat.LTR)); 98b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("exit dir opposite to LTR context, stereo reset", 99b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio EN + HE + LRM, 100b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT.unicodeWrap(EN + HE, TextDirectionHeuristicsCompat.LTR)); 101b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("exit dir opposite to LTR context, stereo reset, no isolation", 102b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio EN + HE, 103b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT.unicodeWrap(EN + HE, TextDirectionHeuristicsCompat.LTR, false)); 104b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 105b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("exit dir opposite to RTL context", 106b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio HE + EN + RLM, 107b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT_EXIT_RESET.unicodeWrap(HE + EN, TextDirectionHeuristicsCompat.RTL)); 108b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("exit dir opposite to RTL context, stereo reset", 109b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio HE + EN + RLM, 110b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT.unicodeWrap(HE + EN, TextDirectionHeuristicsCompat.RTL)); 111b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("exit dir opposite to RTL context, stereo reset, no isolation", 112b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio HE + EN, 113b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT.unicodeWrap(HE + EN, TextDirectionHeuristicsCompat.RTL, false)); 114b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 115b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio // Overall directionality matching context, but with opposite entry directionality. 116b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("entry dir opposite to LTR context", 117b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio HE + EN, 118b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT_EXIT_RESET.unicodeWrap(HE + EN, TextDirectionHeuristicsCompat.LTR)); 119b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("entry dir opposite to LTR context, stereo reset", 120b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LRM + HE + EN, 121b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT.unicodeWrap(HE + EN, TextDirectionHeuristicsCompat.LTR)); 122b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("entry dir opposite to LTR context, stereo reset, no isolation", 123b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio HE + EN, 124b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT.unicodeWrap(HE + EN, TextDirectionHeuristicsCompat.LTR, false)); 125b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 126b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("entry dir opposite to RTL context", 127b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio EN + HE, 128b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT_EXIT_RESET.unicodeWrap(EN + HE, TextDirectionHeuristicsCompat.RTL)); 129b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("entry dir opposite to RTL context, stereo reset", 130b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RLM + EN + HE, 131b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT.unicodeWrap(EN + HE, TextDirectionHeuristicsCompat.RTL)); 132b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("entry dir opposite to RTL context, stereo reset, no isolation", 133b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio EN + HE, 134b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT.unicodeWrap(EN + HE, TextDirectionHeuristicsCompat.RTL, false)); 135b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 136b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio // Overall directionality matching context, but with opposite entry and exit directionality. 137b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("entry and exit dir opposite to LTR context", 138b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio HE + EN + HE + LRM, 139b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT_EXIT_RESET.unicodeWrap(HE + EN + HE, TextDirectionHeuristicsCompat.LTR)); 140b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("entry and exit dir opposite to LTR context, stereo reset", 141b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LRM + HE + EN + HE + LRM, 142b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT.unicodeWrap(HE + EN + HE, TextDirectionHeuristicsCompat.LTR)); 143b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("entry and exit dir opposite to LTR context, no isolation", 144b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio HE + EN + HE, 145b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT_EXIT_RESET.unicodeWrap(HE + EN + HE, TextDirectionHeuristicsCompat.LTR, false)); 146b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 147b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("entry and exit dir opposite to RTL context", 148b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio EN + HE + EN + RLM, 149b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT_EXIT_RESET.unicodeWrap(EN + HE + EN, TextDirectionHeuristicsCompat.RTL)); 150b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("entry and exit dir opposite to RTL context, no isolation", 151b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio EN + HE + EN, 152b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT_EXIT_RESET.unicodeWrap(EN + HE + EN, TextDirectionHeuristicsCompat.RTL, false)); 153b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 154b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio // Entry and exit directionality matching context, but with opposite overall directionality. 155b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("overall dir (but not entry or exit dir) opposite to LTR context", 156b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RLE + EN + HE + EN + PDF + LRM, 157b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT_EXIT_RESET.unicodeWrap(EN + HE + EN, TextDirectionHeuristicsCompat.RTL)); 158b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("overall dir (but not entry or exit dir) opposite to LTR context, stereo reset", 159b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LRM + RLE + EN + HE + EN + PDF + LRM, 160b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT.unicodeWrap(EN + HE + EN, TextDirectionHeuristicsCompat.RTL)); 161b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("overall dir (but not entry or exit dir) opposite to LTR context, no isolation", 162b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RLE + EN + HE + EN + PDF, 163b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LTR_FMT_EXIT_RESET.unicodeWrap(EN + HE + EN, TextDirectionHeuristicsCompat.RTL, false)); 164b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio 165b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("overall dir (but not entry or exit dir) opposite to RTL context", 166b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LRE + HE + EN + HE + PDF + RLM, 167b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT_EXIT_RESET.unicodeWrap(HE + EN + HE, TextDirectionHeuristicsCompat.LTR)); 168b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("overall dir (but not entry or exit dir) opposite to RTL context, stereo reset", 169b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RLM + LRE + HE + EN + HE + PDF + RLM, 170b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT.unicodeWrap(HE + EN + HE, TextDirectionHeuristicsCompat.LTR)); 171b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio assertEquals("overall dir (but not entry or exit dir) opposite to RTL context, no isolation", 172b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio LRE + HE + EN + HE + PDF, 173b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio RTL_FMT_EXIT_RESET.unicodeWrap(HE + EN + HE, TextDirectionHeuristicsCompat.LTR, false)); 174b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio } 175b37703fef07bb1940fd9d933bb9cc5b6c3959cb2Fabrice Di Meglio} 176