blob: a0a2e95d53cd6f473907f0d513d0f9ef7e474185 [file] [log] [blame]
[email protected]0ba76c32012-08-21 21:32:12 +00001// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
[email protected]0ba76c32012-08-21 21:32:12 +00004
[email protected]3a88e392012-10-31 21:32:10 +00005library bidi_utils_test;
[email protected]0ba76c32012-08-21 21:32:12 +00006
[email protected]771dfd72013-01-13 01:11:07 +00007import 'package:intl/intl.dart';
alanknight810432e2017-06-15 13:40:56 -07008import 'package:test/test.dart';
[email protected]0ba76c32012-08-21 21:32:12 +00009
Dart Team795c4902019-08-29 10:58:28 -070010// ignore_for_file: non_constant_identifier_names
11
alanknighta110b9c2016-01-11 09:54:18 -080012/// Tests the bidi utilities library.
Dart Team795c4902019-08-29 10:58:28 -070013void main() {
[email protected]0ba76c32012-08-21 21:32:12 +000014 var LRE = '\u202A';
15 var RLE = '\u202B';
16 var PDF = '\u202C';
[email protected]0ba76c32012-08-21 21:32:12 +000017
18 test('isRtlLang', () {
[email protected]6345a922012-10-04 21:15:20 +000019 expect(Bidi.isRtlLanguage('en'), isFalse);
20 expect(Bidi.isRtlLanguage('fr'), isFalse);
21 expect(Bidi.isRtlLanguage('zh-CN'), isFalse);
22 expect(Bidi.isRtlLanguage('fil'), isFalse);
23 expect(Bidi.isRtlLanguage('az'), isFalse);
24 expect(Bidi.isRtlLanguage('iw-Latn'), isFalse);
25 expect(Bidi.isRtlLanguage('iw-LATN'), isFalse);
26 expect(Bidi.isRtlLanguage('iw_latn'), isFalse);
27 expect(Bidi.isRtlLanguage('ar'), isTrue);
28 expect(Bidi.isRtlLanguage('AR'), isTrue);
29 expect(Bidi.isRtlLanguage('iw'), isTrue);
30 expect(Bidi.isRtlLanguage('he'), isTrue);
31 expect(Bidi.isRtlLanguage('fa'), isTrue);
32 expect(Bidi.isRtlLanguage('ar-EG'), isTrue);
33 expect(Bidi.isRtlLanguage('az-Arab'), isTrue);
34 expect(Bidi.isRtlLanguage('az-ARAB-IR'), isTrue);
35 expect(Bidi.isRtlLanguage('az_arab_IR'), isTrue);
alanknighteb20e1b2017-02-03 12:57:58 -080036 Intl.withLocale('en_US', () {
37 expect(Bidi.isRtlLanguage(), isFalse);
38 });
39 Intl.withLocale('ar', () {
40 expect(Bidi.isRtlLanguage(), isTrue);
41 });
42 Intl.withLocale(null, () {
43 expect(Bidi.isRtlLanguage(), Bidi.isRtlLanguage(Intl.systemLocale));
44 });
[email protected]0ba76c32012-08-21 21:32:12 +000045 });
46
47 test('hasAnyLtr', () {
[email protected]6345a922012-10-04 21:15:20 +000048 expect(Bidi.hasAnyLtr(''), isFalse);
49 expect(Bidi.hasAnyLtr('\u05e0\u05e1\u05e2'), isFalse);
50 expect(Bidi.hasAnyLtr('\u05e0\u05e1z\u05e2'), isTrue);
51 expect(Bidi.hasAnyLtr('123\t... \n'), isFalse);
52 expect(Bidi.hasAnyLtr('<br>123&lt;', false), isTrue);
53 expect(Bidi.hasAnyLtr('<br>123&lt;', true), isFalse);
[email protected]0ba76c32012-08-21 21:32:12 +000054 });
55
56 test('hasAnyRtl', () {
[email protected]6345a922012-10-04 21:15:20 +000057 expect(Bidi.hasAnyRtl(''), isFalse);
58 expect(Bidi.hasAnyRtl('abc'), isFalse);
59 expect(Bidi.hasAnyRtl('ab\u05e0c'), isTrue);
60 expect(Bidi.hasAnyRtl('123\t... \n'), isFalse);
61 expect(Bidi.hasAnyRtl('<input value=\u05e0>123', false), isTrue);
62 expect(Bidi.hasAnyRtl('<input value=\u05e0>123', true), isFalse);
[email protected]0ba76c32012-08-21 21:32:12 +000063 });
64
[email protected]0ba76c32012-08-21 21:32:12 +000065 test('endsWithLtr', () {
[email protected]6345a922012-10-04 21:15:20 +000066 expect(Bidi.endsWithLtr('a'), isTrue);
67 expect(Bidi.endsWithLtr('abc'), isTrue);
68 expect(Bidi.endsWithLtr('a (!)'), isTrue);
69 expect(Bidi.endsWithLtr('a.1'), isTrue);
70 expect(Bidi.endsWithLtr('http://www.google.com '), isTrue);
71 expect(Bidi.endsWithLtr('\u05e0a'), isTrue);
72 expect(Bidi.endsWithLtr(' \u05e0\u05e1a\u05e2\u05e3 a (!)'), isTrue);
73 expect(Bidi.endsWithLtr(''), isFalse);
74 expect(Bidi.endsWithLtr(' '), isFalse);
75 expect(Bidi.endsWithLtr('1'), isFalse);
76 expect(Bidi.endsWithLtr('\u05e0'), isFalse);
77 expect(Bidi.endsWithLtr('\u05e0 1(!)'), isFalse);
78 expect(Bidi.endsWithLtr('a\u05e0'), isFalse);
79 expect(Bidi.endsWithLtr('a abc\u05e0\u05e1def\u05e2. 1'), isFalse);
80 expect(Bidi.endsWithLtr(' \u05e0\u05e1a\u05e2 &lt;', true), isFalse);
81 expect(Bidi.endsWithLtr(' \u05e0\u05e1a\u05e2 &lt;', false), isTrue);
[email protected]0ba76c32012-08-21 21:32:12 +000082 });
83
84 test('endsWithRtl', () {
[email protected]6345a922012-10-04 21:15:20 +000085 expect(Bidi.endsWithRtl('\u05e0'), isTrue);
86 expect(Bidi.endsWithRtl('\u05e0\u05e1\u05e2'), isTrue);
87 expect(Bidi.endsWithRtl('\u05e0 (!)'), isTrue);
88 expect(Bidi.endsWithRtl('\u05e0.1'), isTrue);
89 expect(Bidi.endsWithRtl('http://www.google.com/\u05e0 '), isTrue);
90 expect(Bidi.endsWithRtl('a\u05e0'), isTrue);
91 expect(Bidi.endsWithRtl(' a abc\u05e0def\u05e3. 1'), isTrue);
92 expect(Bidi.endsWithRtl(''), isFalse);
93 expect(Bidi.endsWithRtl(' '), isFalse);
94 expect(Bidi.endsWithRtl('1'), isFalse);
95 expect(Bidi.endsWithRtl('a'), isFalse);
96 expect(Bidi.endsWithRtl('a 1(!)'), isFalse);
97 expect(Bidi.endsWithRtl('\u05e0a'), isFalse);
98 expect(Bidi.endsWithRtl('\u05e0 \u05e0\u05e1ab\u05e2 a (!)'), isFalse);
99 expect(Bidi.endsWithRtl(' \u05e0\u05e1a\u05e2 &lt;', true), isTrue);
100 expect(Bidi.endsWithRtl(' \u05e0\u05e1a\u05e2 &lt;', false), isFalse);
[email protected]0ba76c32012-08-21 21:32:12 +0000101 });
102
103 test('guardBracketInHtml', () {
Dart Team795c4902019-08-29 10:58:28 -0700104 var strWithRtl = 'asc \u05d0 (\u05d0\u05d0\u05d0)';
[email protected]6345a922012-10-04 21:15:20 +0000105 expect(Bidi.guardBracketInHtml(strWithRtl),
Dart Team795c4902019-08-29 10:58:28 -0700106 equals('asc \u05d0 <span dir=rtl>(\u05d0\u05d0\u05d0)</span>'));
[email protected]6345a922012-10-04 21:15:20 +0000107 expect(Bidi.guardBracketInHtml(strWithRtl, true),
Dart Team795c4902019-08-29 10:58:28 -0700108 equals('asc \u05d0 <span dir=rtl>(\u05d0\u05d0\u05d0)</span>'));
[email protected]6345a922012-10-04 21:15:20 +0000109 expect(Bidi.guardBracketInHtml(strWithRtl, false),
Dart Team795c4902019-08-29 10:58:28 -0700110 equals('asc \u05d0 <span dir=ltr>(\u05d0\u05d0\u05d0)</span>'));
[email protected]0ba76c32012-08-21 21:32:12 +0000111
Dart Team795c4902019-08-29 10:58:28 -0700112 var strWithRtl2 = '\u05d0 a (asc:))';
[email protected]6345a922012-10-04 21:15:20 +0000113 expect(Bidi.guardBracketInHtml(strWithRtl2),
Dart Team795c4902019-08-29 10:58:28 -0700114 equals('\u05d0 a <span dir=rtl>(asc:))</span>'));
[email protected]6345a922012-10-04 21:15:20 +0000115 expect(Bidi.guardBracketInHtml(strWithRtl2, true),
Dart Team795c4902019-08-29 10:58:28 -0700116 equals('\u05d0 a <span dir=rtl>(asc:))</span>'));
[email protected]6345a922012-10-04 21:15:20 +0000117 expect(Bidi.guardBracketInHtml(strWithRtl2, false),
Dart Team795c4902019-08-29 10:58:28 -0700118 equals('\u05d0 a <span dir=ltr>(asc:))</span>'));
[email protected]0ba76c32012-08-21 21:32:12 +0000119
Dart Team795c4902019-08-29 10:58:28 -0700120 var strWithoutRtl = 'a (asc) {{123}}';
[email protected]6345a922012-10-04 21:15:20 +0000121 expect(Bidi.guardBracketInHtml(strWithoutRtl),
Dart Team795c4902019-08-29 10:58:28 -0700122 equals('a <span dir=ltr>(asc)</span> <span dir=ltr>{{123}}</span>'));
[email protected]6345a922012-10-04 21:15:20 +0000123 expect(Bidi.guardBracketInHtml(strWithoutRtl, true),
Dart Team795c4902019-08-29 10:58:28 -0700124 equals('a <span dir=rtl>(asc)</span> <span dir=rtl>{{123}}</span>'));
[email protected]6345a922012-10-04 21:15:20 +0000125 expect(Bidi.guardBracketInHtml(strWithoutRtl, false),
Dart Team795c4902019-08-29 10:58:28 -0700126 equals('a <span dir=ltr>(asc)</span> <span dir=ltr>{{123}}</span>'));
[email protected]0ba76c32012-08-21 21:32:12 +0000127 });
128
129 test('guardBracketInText', () {
Dart Team795c4902019-08-29 10:58:28 -0700130 var strWithRtl = 'asc \u05d0 (\u05d0\u05d0\u05d0)';
[email protected]6345a922012-10-04 21:15:20 +0000131 expect(Bidi.guardBracketInText(strWithRtl),
Dart Team795c4902019-08-29 10:58:28 -0700132 equals('asc \u05d0 \u200f(\u05d0\u05d0\u05d0)\u200f'));
[email protected]6345a922012-10-04 21:15:20 +0000133 expect(Bidi.guardBracketInText(strWithRtl, true),
Dart Team795c4902019-08-29 10:58:28 -0700134 equals('asc \u05d0 \u200f(\u05d0\u05d0\u05d0)\u200f'));
[email protected]6345a922012-10-04 21:15:20 +0000135 expect(Bidi.guardBracketInText(strWithRtl, false),
Dart Team795c4902019-08-29 10:58:28 -0700136 equals('asc \u05d0 \u200e(\u05d0\u05d0\u05d0)\u200e'));
[email protected]0ba76c32012-08-21 21:32:12 +0000137
Dart Team795c4902019-08-29 10:58:28 -0700138 var strWithRtl2 = '\u05d0 a (asc:))';
[email protected]6345a922012-10-04 21:15:20 +0000139 expect(Bidi.guardBracketInText(strWithRtl2),
Dart Team795c4902019-08-29 10:58:28 -0700140 equals('\u05d0 a \u200f(asc:))\u200f'));
[email protected]6345a922012-10-04 21:15:20 +0000141 expect(Bidi.guardBracketInText(strWithRtl2, true),
Dart Team795c4902019-08-29 10:58:28 -0700142 equals('\u05d0 a \u200f(asc:))\u200f'));
[email protected]6345a922012-10-04 21:15:20 +0000143 expect(Bidi.guardBracketInText(strWithRtl2, false),
Dart Team795c4902019-08-29 10:58:28 -0700144 equals('\u05d0 a \u200e(asc:))\u200e'));
[email protected]0ba76c32012-08-21 21:32:12 +0000145
Dart Team795c4902019-08-29 10:58:28 -0700146 var strWithoutRtl = 'a (asc) {{123}}';
[email protected]6345a922012-10-04 21:15:20 +0000147 expect(Bidi.guardBracketInText(strWithoutRtl),
Dart Team795c4902019-08-29 10:58:28 -0700148 equals('a \u200e(asc)\u200e \u200e{{123}}\u200e'));
[email protected]6345a922012-10-04 21:15:20 +0000149 expect(Bidi.guardBracketInText(strWithoutRtl, true),
Dart Team795c4902019-08-29 10:58:28 -0700150 equals('a \u200f(asc)\u200f \u200f{{123}}\u200f'));
[email protected]6345a922012-10-04 21:15:20 +0000151 expect(Bidi.guardBracketInText(strWithoutRtl, false),
Dart Team795c4902019-08-29 10:58:28 -0700152 equals('a \u200e(asc)\u200e \u200e{{123}}\u200e'));
[email protected]0ba76c32012-08-21 21:32:12 +0000153 });
154
155 test('enforceRtlInHtml', () {
156 var str = '<div> first <br> second </div>';
[email protected]6345a922012-10-04 21:15:20 +0000157 expect(Bidi.enforceRtlInHtml(str),
[email protected]0ba76c32012-08-21 21:32:12 +0000158 equals('<div dir=rtl> first <br> second </div>'));
159 str = 'first second';
[email protected]6345a922012-10-04 21:15:20 +0000160 expect(Bidi.enforceRtlInHtml(str),
[email protected]0ba76c32012-08-21 21:32:12 +0000161 equals('\n<span dir=rtl>first second</span>'));
162 });
163
164 test('enforceRtlInText', () {
165 var str = 'first second';
[email protected]6345a922012-10-04 21:15:20 +0000166 expect(Bidi.enforceRtlInText(str), equals('${RLE}first second$PDF'));
[email protected]0ba76c32012-08-21 21:32:12 +0000167 });
168
169 test('enforceLtrInHtml', () {
170 var str = '<div> first <br> second </div>';
[email protected]6345a922012-10-04 21:15:20 +0000171 expect(Bidi.enforceLtrInHtml(str),
[email protected]0ba76c32012-08-21 21:32:12 +0000172 equals('<div dir=ltr> first <br> second </div>'));
173 str = 'first second';
[email protected]6345a922012-10-04 21:15:20 +0000174 expect(Bidi.enforceLtrInHtml(str),
[email protected]0ba76c32012-08-21 21:32:12 +0000175 equals('\n<span dir=ltr>first second</span>'));
176 });
177
178 test('enforceLtrInText', () {
179 var str = 'first second';
[email protected]6345a922012-10-04 21:15:20 +0000180 expect(Bidi.enforceLtrInText(str), equals('${LRE}first second$PDF'));
[email protected]0ba76c32012-08-21 21:32:12 +0000181 });
182
183 test('normalizeHebrewQuote', () {
[email protected]6345a922012-10-04 21:15:20 +0000184 expect(Bidi.normalizeHebrewQuote('\u05d0"'), equals('\u05d0\u05f4'));
185 expect(Bidi.normalizeHebrewQuote('\u05d0\''), equals('\u05d0\u05f3'));
186 expect(Bidi.normalizeHebrewQuote('\u05d0"\u05d0\''),
[email protected]0ba76c32012-08-21 21:32:12 +0000187 equals('\u05d0\u05f4\u05d0\u05f3'));
188 });
189
190 test('estimateDirectionOfText', () {
[email protected]5ed533b2012-10-18 18:21:38 +0000191 expect(Bidi.estimateDirectionOfText('', isHtml: false).value,
[email protected]0ba76c32012-08-21 21:32:12 +0000192 equals(TextDirection.UNKNOWN.value));
[email protected]5ed533b2012-10-18 18:21:38 +0000193 expect(Bidi.estimateDirectionOfText(' ', isHtml: false).value,
[email protected]0ba76c32012-08-21 21:32:12 +0000194 equals(TextDirection.UNKNOWN.value));
[email protected]5ed533b2012-10-18 18:21:38 +0000195 expect(Bidi.estimateDirectionOfText('! (...)', isHtml: false).value,
[email protected]0ba76c32012-08-21 21:32:12 +0000196 equals(TextDirection.UNKNOWN.value));
Kevin Moore4f4b8b42015-04-24 16:34:31 -0700197 expect(
198 Bidi.estimateDirectionOfText('All-Ascii content', isHtml: false).value,
[email protected]0ba76c32012-08-21 21:32:12 +0000199 equals(TextDirection.LTR.value));
[email protected]5ed533b2012-10-18 18:21:38 +0000200 expect(Bidi.estimateDirectionOfText('-17.0%', isHtml: false).value,
[email protected]0ba76c32012-08-21 21:32:12 +0000201 equals(TextDirection.LTR.value));
[email protected]5ed533b2012-10-18 18:21:38 +0000202 expect(Bidi.estimateDirectionOfText('http://foo/bar/', isHtml: false).value,
[email protected]0ba76c32012-08-21 21:32:12 +0000203 equals(TextDirection.LTR.value));
alanknighteb20e1b2017-02-03 12:57:58 -0800204 expect(
Dart Team795c4902019-08-29 10:58:28 -0700205 Bidi.estimateDirectionOfText(
alanknighteb20e1b2017-02-03 12:57:58 -0800206 'http://foo/bar/?s=\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0'
207 '\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0'
208 '\u05d0\u05d0\u05d0\u05d0\u05d0')
209 .value,
[email protected]0ba76c32012-08-21 21:32:12 +0000210 equals(TextDirection.LTR.value));
[email protected]5ed533b2012-10-18 18:21:38 +0000211 expect(Bidi.estimateDirectionOfText('\u05d0', isHtml: false).value,
[email protected]0ba76c32012-08-21 21:32:12 +0000212 equals(TextDirection.RTL.value));
alanknighteb20e1b2017-02-03 12:57:58 -0800213 expect(
Dart Team795c4902019-08-29 10:58:28 -0700214 Bidi.estimateDirectionOfText('9 \u05d0 -> 17.5, 23, 45, 19',
alanknighteb20e1b2017-02-03 12:57:58 -0800215 isHtml: false)
216 .value,
[email protected]0ba76c32012-08-21 21:32:12 +0000217 equals(TextDirection.RTL.value));
alanknighteb20e1b2017-02-03 12:57:58 -0800218 expect(
Dart Team795c4902019-08-29 10:58:28 -0700219 Bidi.estimateDirectionOfText(
alanknighteb20e1b2017-02-03 12:57:58 -0800220 'http://foo/bar/ \u05d0 http://foo2/bar2/ http://foo3/bar3/')
221 .value,
[email protected]0ba76c32012-08-21 21:32:12 +0000222 equals(TextDirection.RTL.value));
alanknighteb20e1b2017-02-03 12:57:58 -0800223 expect(
Dart Team795c4902019-08-29 10:58:28 -0700224 Bidi.estimateDirectionOfText(
alanknighteb20e1b2017-02-03 12:57:58 -0800225 '\u05d0\u05d9\u05df \u05de\u05de\u05e9 \u05de\u05d4 \u05dc\u05e8\u05d0'
226 '\u05d5\u05ea: \u05dc\u05d0 \u05e6\u05d9\u05dc\u05de\u05ea\u05d9 \u05d4'
227 '\u05e8\u05d1\u05d4 \u05d5\u05d2\u05dd \u05d0\u05dd \u05d4\u05d9\u05d9'
228 '\u05ea\u05d9 \u05de\u05e6\u05dc\u05dd, \u05d4\u05d9\u05d4 \u05e9'
229 '\u05dd')
230 .value,
231 equals(TextDirection.RTL.value));
232 expect(
Dart Team795c4902019-08-29 10:58:28 -0700233 Bidi.estimateDirectionOfText(
alanknighteb20e1b2017-02-03 12:57:58 -0800234 '\u05db\u05d0 - http://geek.co.il/gallery/v/2007-06 - \u05d0\u05d9'
235 '\u05df \u05de\u05de\u05e9 \u05de\u05d4 \u05dc\u05e8\u05d0\u05d5\u05ea:'
236 ' \u05dc\u05d0 \u05e6\u05d9\u05dc\u05de\u05ea\u05d9 \u05d4\u05e8\u05d1 '
237 '\u05d5\u05d2\u05dd \u05d0\u05dd \u05d4\u05d9\u05d9\u05d9 \u05de\u05e6'
238 '\u05dc\u05dd, \u05d4\u05d9\u05d4 \u05e9\u05dd \u05d1\u05e2\u05d9\u05e7'
239 ' \u05d4\u05e8\u05d1\u05d4 \u05d0\u05e0\u05e9\u05d9\u05dd. \u05de\u05d4'
240 ' \u05e9\u05db\u05df - \u05d0\u05e4\u05e9\u05e8 \u05dc\u05e0\u05e6'
241 '\u05dc \u05d0\u05ea \u05d4\u05d4 \u05d3\u05d6\u05de\u05e0\u05d5 '
242 '\u05dc\u05d4\u05e1\u05ea\u05db\u05dc \u05e2\u05dc \u05db\u05de\u05d4 '
243 '\u05ea\u05de\u05d5\u05e0\u05d5\u05ea \u05de\u05e9\u05e9\u05e2\u05d5'
244 '\u05ea \u05d9\u05e9\u05e0\u05d5 \u05d9\u05d5\u05ea\u05e8 \u05e9\u05d9'
245 '\u05e9 \u05dc\u05d9 \u05d1\u05d0\u05ea\u05e8',
246 isHtml: false)
247 .value,
248 equals(TextDirection.RTL.value));
249 expect(
Dart Team795c4902019-08-29 10:58:28 -0700250 Bidi.estimateDirectionOfText(
alanknighteb20e1b2017-02-03 12:57:58 -0800251 'CAPTCHA \u05de\u05e9\u05d5\u05db\u05dc\u05dc '
252 '\u05de\u05d3\u05d9?')
253 .value,
254 equals(TextDirection.RTL.value));
255 expect(
Dart Team795c4902019-08-29 10:58:28 -0700256 Bidi.estimateDirectionOfText(
alanknighteb20e1b2017-02-03 12:57:58 -0800257 'Yes Prime Minister \u05e2\u05d3\u05db\u05d5\u05df. \u05e9\u05d0\u05dc'
258 '\u05d5 \u05d0\u05d5\u05ea\u05d9 \u05de\u05d4 \u05d0\u05e0\u05d9 '
259 '\u05e8\u05d5\u05e6\u05d4 \u05de\u05ea\u05e0\u05d4 \u05dc\u05d7'
260 '\u05d2')
261 .value,
262 equals(TextDirection.RTL.value));
263 expect(
Dart Team795c4902019-08-29 10:58:28 -0700264 Bidi.estimateDirectionOfText(
alanknighteb20e1b2017-02-03 12:57:58 -0800265 '17.4.02 \u05e9\u05e2\u05d4:13-20 .15-00 .\u05dc\u05d0 \u05d4\u05d9'
266 '\u05d9\u05ea\u05d9 \u05db\u05d0\u05df.')
267 .value,
268 equals(TextDirection.RTL.value));
269 expect(
Dart Team795c4902019-08-29 10:58:28 -0700270 Bidi.estimateDirectionOfText(
alanknighteb20e1b2017-02-03 12:57:58 -0800271 '5710 5720 5730. \u05d4\u05d3\u05dc\u05ea. \u05d4\u05e0\u05e9\u05d9'
272 '\u05e7\u05d4',
273 isHtml: false)
274 .value,
275 equals(TextDirection.RTL.value));
276 expect(
Dart Team795c4902019-08-29 10:58:28 -0700277 Bidi.estimateDirectionOfText(
alanknighteb20e1b2017-02-03 12:57:58 -0800278 '\u05d4\u05d3\u05dc\u05ea http://www.google.com '
279 'http://www.gmail.com')
280 .value,
281 equals(TextDirection.RTL.value));
282 expect(
Dart Team795c4902019-08-29 10:58:28 -0700283 Bidi.estimateDirectionOfText(
alanknighteb20e1b2017-02-03 12:57:58 -0800284 '\u05d4\u05d3\u05dc <some quite nasty html mark up>')
285 .value,
[email protected]0ba76c32012-08-21 21:32:12 +0000286 equals(TextDirection.LTR.value));
alanknighteb20e1b2017-02-03 12:57:58 -0800287 expect(
Dart Team795c4902019-08-29 10:58:28 -0700288 Bidi.estimateDirectionOfText(
alanknighteb20e1b2017-02-03 12:57:58 -0800289 '\u05d4\u05d3\u05dc <some quite nasty html mark up>')
290 .value,
[email protected]0ba76c32012-08-21 21:32:12 +0000291 equals(TextDirection.LTR.value));
alanknighteb20e1b2017-02-03 12:57:58 -0800292 expect(
Dart Team795c4902019-08-29 10:58:28 -0700293 Bidi.estimateDirectionOfText('\u05d4\u05d3\u05dc\u05ea &amp; &lt; &gt;')
alanknighteb20e1b2017-02-03 12:57:58 -0800294 .value,
[email protected]0ba76c32012-08-21 21:32:12 +0000295 equals(TextDirection.LTR.value));
alanknighteb20e1b2017-02-03 12:57:58 -0800296 expect(
Dart Team795c4902019-08-29 10:58:28 -0700297 Bidi.estimateDirectionOfText('\u05d4\u05d3\u05dc\u05ea &amp; &lt; &gt;',
alanknighteb20e1b2017-02-03 12:57:58 -0800298 isHtml: true)
299 .value,
[email protected]0ba76c32012-08-21 21:32:12 +0000300 equals(TextDirection.RTL.value));
301 });
302
303 test('detectRtlDirectionality', () {
304 var bidiText = [];
Dart Team795c4902019-08-29 10:58:28 -0700305 var item = SampleItem('Pure Ascii content');
[email protected]0ba76c32012-08-21 21:32:12 +0000306 bidiText.add(item);
307
Dart Team795c4902019-08-29 10:58:28 -0700308 item = SampleItem(
alanknighteb20e1b2017-02-03 12:57:58 -0800309 '\u05d0\u05d9\u05df \u05de\u05de\u05e9 \u05de\u05d4'
[email protected]0ba76c32012-08-21 21:32:12 +0000310 ' \u05dc\u05e8\u05d0\u05d5\u05ea: \u05dc\u05d0 \u05e6\u05d9\u05dc'
311 '\u05de\u05ea\u05d9 \u05d4\u05e8\u05d1\u05d4 \u05d5\u05d2\u05dd '
312 '\u05d0\u05dd \u05d4\u05d9\u05d9\u05ea\u05d9 \u05de\u05e6\u05dc\u05dd, '
alanknighteb20e1b2017-02-03 12:57:58 -0800313 '\u05d4\u05d9\u05d4 \u05e9\u05dd',
314 true);
[email protected]0ba76c32012-08-21 21:32:12 +0000315 bidiText.add(item);
316
Dart Team795c4902019-08-29 10:58:28 -0700317 item = SampleItem(
alanknighteb20e1b2017-02-03 12:57:58 -0800318 '\u05db\u05d0\u05df - http://geek.co.il/gallery/v/'
[email protected]0ba76c32012-08-21 21:32:12 +0000319 '2007-06 - \u05d0\u05d9\u05df \u05de\u05de\u05e9 \u05de\u05d4 \u05dc'
320 '\u05e8\u05d0\u05d5\u05ea: \u05dc\u05d0 \u05e6\u05d9\u05dc\u05de\u05ea'
321 '\u05d9 \u05d4\u05e8\u05d1\u05d4 \u05d5\u05d2\u05dd \u05d0\u05dd \u05d4'
322 '\u05d9\u05d9\u05ea\u05d9 \u05de\u05e6\u05dc\u05dd, \u05d4\u05d9\u05d4 '
323 '\u05e9\u05dd \u05d1\u05e2\u05d9\u05e7\u05e8 \u05d4\u05e8\u05d1\u05d4 '
324 '\u05d0\u05e0\u05e9\u05d9\u05dd. \u05de\u05d4 \u05e9\u05db\u05df - '
325 '\u05d0\u05e4\u05e9\u05e8 \u05dc\u05e0\u05e6\u05dc \u05d0\u05ea \u05d4'
326 '\u05d4\u05d3\u05d6\u05de\u05e0\u05d5\u05ea \u05dc\u05d4\u05e1\u05ea'
327 '\u05db\u05dc \u05e2\u05dc \u05db\u05de\u05d4 \u05ea\u05de\u05d5\u05e0'
328 '\u05d5\u05ea \u05de\u05e9\u05e2\u05e9\u05e2\u05d5\u05ea \u05d9\u05e9'
329 '\u05e0\u05d5\u05ea \u05d9\u05d5\u05ea\u05e8 \u05e9\u05d9\u05e9 \u05dc'
alanknighteb20e1b2017-02-03 12:57:58 -0800330 '\u05d9 \u05d1\u05d0\u05ea\u05e8',
331 true);
[email protected]0ba76c32012-08-21 21:32:12 +0000332 bidiText.add(item);
333
Dart Team795c4902019-08-29 10:58:28 -0700334 item = SampleItem(
alanknighteb20e1b2017-02-03 12:57:58 -0800335 'CAPTCHA \u05de\u05e9\u05d5\u05db\u05dc\u05dc '
336 '\u05de\u05d3\u05d9?',
337 true);
[email protected]0ba76c32012-08-21 21:32:12 +0000338 bidiText.add(item);
339
Dart Team795c4902019-08-29 10:58:28 -0700340 item = SampleItem(
alanknighteb20e1b2017-02-03 12:57:58 -0800341 'Yes Prime Minister \u05e2\u05d3\u05db\u05d5\u05df. '
[email protected]0ba76c32012-08-21 21:32:12 +0000342 '\u05e9\u05d0\u05dc\u05d5 \u05d0\u05d5\u05ea\u05d9 \u05de\u05d4 \u05d0'
343 '\u05e0\u05d9 \u05e8\u05d5\u05e6\u05d4 \u05de\u05ea\u05e0\u05d4 '
alanknighteb20e1b2017-02-03 12:57:58 -0800344 '\u05dc\u05d7\u05d2',
345 true);
[email protected]0ba76c32012-08-21 21:32:12 +0000346 bidiText.add(item);
347
Dart Team795c4902019-08-29 10:58:28 -0700348 item = SampleItem(
alanknighteb20e1b2017-02-03 12:57:58 -0800349 '17.4.02 \u05e9\u05e2\u05d4:13-20 .15-00 .\u05dc'
350 '\u05d0 \u05d4\u05d9\u05d9\u05ea\u05d9 \u05db\u05d0\u05df.',
351 true);
[email protected]0ba76c32012-08-21 21:32:12 +0000352 bidiText.add(item);
353
Dart Team795c4902019-08-29 10:58:28 -0700354 item = SampleItem(
alanknighteb20e1b2017-02-03 12:57:58 -0800355 '5710 5720 5730. \u05d4\u05d3\u05dc\u05ea. \u05d4'
356 '\u05e0\u05e9\u05d9\u05e7\u05d4',
357 true);
[email protected]0ba76c32012-08-21 21:32:12 +0000358 bidiText.add(item);
359
Dart Team795c4902019-08-29 10:58:28 -0700360 item = SampleItem(
alanknighteb20e1b2017-02-03 12:57:58 -0800361 '\u05d4\u05d3\u05dc\u05ea http://www.google.com '
362 'http://www.gmail.com',
363 true);
[email protected]0ba76c32012-08-21 21:32:12 +0000364 bidiText.add(item);
365
Dart Team795c4902019-08-29 10:58:28 -0700366 item = SampleItem('&gt;\u05d4&lt;', true, true);
[email protected]0ba76c32012-08-21 21:32:12 +0000367 bidiText.add(item);
368
Dart Team795c4902019-08-29 10:58:28 -0700369 item = SampleItem('&gt;\u05d4&lt;', false);
[email protected]0ba76c32012-08-21 21:32:12 +0000370 bidiText.add(item);
371
372 for (var i = 0; i < bidiText.length; i++) {
Kevin Moore4f4b8b42015-04-24 16:34:31 -0700373 var isRtlDir = Bidi.detectRtlDirectionality(bidiText[i].text,
374 isHtml: bidiText[i].isHtml);
alanknight5f9d4d02015-12-16 15:55:46 -0800375
[email protected]0ba76c32012-08-21 21:32:12 +0000376 if (isRtlDir != bidiText[i].isRtl) {
377 var str = '"${bidiText[i].text} " should be '
Kevin Moore4f4b8b42015-04-24 16:34:31 -0700378 '${bidiText[i].isRtl ? "rtl" : "ltr"} but detected as '
379 '${isRtlDir ? "rtl" : "ltr"}';
alanknight5f9d4d02015-12-16 15:55:46 -0800380 fail(str);
[email protected]0ba76c32012-08-21 21:32:12 +0000381 }
[email protected]0ba76c32012-08-21 21:32:12 +0000382 }
383 });
384}
385
386class SampleItem {
387 String text;
388 bool isRtl;
389 bool isHtml;
Dart Team795c4902019-08-29 10:58:28 -0700390 SampleItem([this.text = '', this.isRtl = false, this.isHtml = false]);
[email protected]0ba76c32012-08-21 21:32:12 +0000391}