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