| Index: packages/intl/test/bidi_format_test.dart
|
| diff --git a/packages/intl/test/bidi_format_test.dart b/packages/intl/test/bidi_format_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1656411ad07fb31dc2e0ee60cd6d6c3c2ade31ee
|
| --- /dev/null
|
| +++ b/packages/intl/test/bidi_format_test.dart
|
| @@ -0,0 +1,227 @@
|
| +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library bidi_format_test;
|
| +
|
| +import 'package:intl/intl.dart';
|
| +import 'package:unittest/unittest.dart';
|
| +
|
| +/**
|
| + * Tests the bidirectional text formatting library.
|
| + */
|
| +main() {
|
| + var LTR = TextDirection.LTR;
|
| + var RTL = TextDirection.RTL;
|
| + var LRM = Bidi.LRM;
|
| + var RLM = Bidi.RLM;
|
| + var RLE = Bidi.RLE;
|
| + var PDF = Bidi.PDF;
|
| + var LRE = Bidi.LRE;
|
| + var UNKNOWN = TextDirection.UNKNOWN;
|
| + var he = '\u05e0\u05e1';
|
| + var en = 'abba';
|
| + var html = '<';
|
| + var longEn = 'abba sabba gabba ';
|
| + var ltrFmt = new BidiFormatter.LTR(); // LTR context
|
| + var rtlFmt = new BidiFormatter.RTL(); // RTL context
|
| + var unkFmt = new BidiFormatter.UNKNOWN(); // unknown context
|
| +
|
| + test('estimateDirection', () {
|
| + expect(ltrFmt.estimateDirection(''), equals(UNKNOWN));
|
| + expect(rtlFmt.estimateDirection(''), equals(UNKNOWN));
|
| + expect(unkFmt.estimateDirection(''), equals(UNKNOWN));
|
| + expect(ltrFmt.estimateDirection(en), equals(LTR));
|
| + expect(rtlFmt.estimateDirection(en), equals(LTR));
|
| + expect(unkFmt.estimateDirection(en), equals(LTR));
|
| + expect(ltrFmt.estimateDirection(he), equals(RTL));
|
| + expect(rtlFmt.estimateDirection(he), equals(RTL));
|
| + expect(unkFmt.estimateDirection(he), equals(RTL));
|
| +
|
| + // Text contains HTML or HTML-escaping.
|
| + expect(
|
| + ltrFmt.estimateDirection('<some sort of tag/>$he &', isHtml: false),
|
| + equals(LTR));
|
| + expect(
|
| + ltrFmt.estimateDirection('<some sort of tag/>$he &', isHtml: true),
|
| + equals(RTL));
|
| + });
|
| +
|
| + test('wrapWithSpan', () {
|
| + // Test overall dir matches context dir (LTR), no dirReset.
|
| + expect(ltrFmt.wrapWithSpan(en, isHtml: true, resetDir: false), equals(en));
|
| + // Test overall dir matches context dir (LTR), dirReset.
|
| + expect(ltrFmt.wrapWithSpan(en, isHtml: true, resetDir: true), equals(en));
|
| + // Test overall dir matches context dir (RTL), no dirReset'.
|
| + expect(rtlFmt.wrapWithSpan(he, isHtml: true, resetDir: false), equals(he));
|
| + // Test overall dir matches context dir (RTL), dirReset.
|
| + expect(rtlFmt.wrapWithSpan(he, isHtml: true, resetDir: true), equals(he));
|
| + // Test overall dir (RTL) doesn't match context dir (LTR), no dirReset.
|
| + expect(ltrFmt.wrapWithSpan(he, isHtml: true, resetDir: false),
|
| + equals('<span dir=rtl>$he</span>'));
|
| + // Test overall dir (RTL) doesn't match context dir (LTR), dirReset.
|
| + expect(ltrFmt.wrapWithSpan(he, isHtml: true, resetDir: true),
|
| + equals('<span dir=rtl>$he</span>$LRM'));
|
| + // Test overall dir (LTR) doesn't match context dir (RTL), no dirReset.
|
| + expect(rtlFmt.wrapWithSpan(en, isHtml: true, resetDir: false),
|
| + equals('<span dir=ltr>$en</span>'));
|
| + // Test overall dir (LTR) doesn't match context dir (RTL), dirReset.
|
| + expect(rtlFmt.wrapWithSpan(en, isHtml: true, resetDir: true),
|
| + equals('<span dir=ltr>$en</span>$RLM'));
|
| + // Test overall dir (LTR) doesn't match context dir (unknown), no dirReset.
|
| + expect(unkFmt.wrapWithSpan(en, isHtml: true, resetDir: false),
|
| + equals('<span dir=ltr>$en</span>'));
|
| + // Test overall dir (RTL) doesn't match context dir (unknown), dirReset.
|
| + expect(unkFmt.wrapWithSpan(he, isHtml: true, resetDir: true),
|
| + equals('<span dir=rtl>$he</span>'));
|
| + // Test overall dir (neutral) doesn't match context dir (LTR), dirReset.
|
| + expect(ltrFmt.wrapWithSpan('', isHtml: true, resetDir: true), equals(''));
|
| +
|
| + // Test exit dir (but not overall dir) is opposite to context dir, dirReset.
|
| + expect(ltrFmt.wrapWithSpan('$longEn$he$html', isHtml: true, resetDir: true),
|
| + equals('$longEn$he$html$LRM'));
|
| + // Test overall dir (but not exit dir) is opposite to context dir, dirReset.
|
| + expect(rtlFmt.wrapWithSpan('$longEn$he', isHtml: true, resetDir: true),
|
| + equals('<span dir=ltr>$longEn$he</span>$RLM'));
|
| +
|
| + // Test input is plain text (not escaped).
|
| + expect(ltrFmt.wrapWithSpan('<br>$en', isHtml: false, resetDir: false),
|
| + equals('<br>$en'));
|
| +
|
| + var ltrAlwaysSpanFmt = new BidiFormatter.LTR(true);
|
| + var rtlAlwaysSpanFmt = new BidiFormatter.RTL(true);
|
| +
|
| + // Test alwaysSpan, overall dir matches context dir (LTR), no dirReset.
|
| + expect(ltrAlwaysSpanFmt.wrapWithSpan(en, isHtml: true, resetDir: false),
|
| + equals('<span>$en</span>'));
|
| + // Test alwaysSpan, overall dir matches context dir (LTR), dirReset.
|
| + expect(ltrAlwaysSpanFmt.wrapWithSpan(en, isHtml: true, resetDir: true),
|
| + equals('<span>$en</span>'));
|
| + // Test alwaysSpan, overall dir matches context dir (RTL), no dirReset.
|
| + expect(rtlAlwaysSpanFmt.wrapWithSpan(he, isHtml: true, resetDir: false),
|
| + equals('<span>$he</span>'));
|
| + // Test alwaysSpan, overall dir matches context dir (RTL), dirReset.
|
| + expect(rtlAlwaysSpanFmt.wrapWithSpan(he, isHtml: true, resetDir: true),
|
| + equals('<span>$he</span>'));
|
| +
|
| + // Test alwaysSpan, overall dir (RTL) doesn't match context dir (LTR),
|
| + // no dirReset.
|
| + expect(ltrAlwaysSpanFmt.wrapWithSpan(he, isHtml: true, resetDir: false),
|
| + equals('<span dir=rtl>$he</span>'));
|
| + // Test alwaysSpan, overall dir (RTL) doesn't match context dir (LTR),
|
| + // dirReset.
|
| + expect(ltrAlwaysSpanFmt.wrapWithSpan(he, isHtml: true, resetDir: true),
|
| + equals('<span dir=rtl>$he</span>$LRM'));
|
| + // Test alwaysSpan, overall dir (neutral) doesn't match context dir (LTR),
|
| + // dirReset
|
| + expect(ltrAlwaysSpanFmt.wrapWithSpan('', isHtml: true, resetDir: true),
|
| + equals('<span></span>'));
|
| +
|
| + // Test overall dir matches context dir (LTR.
|
| + expect(ltrFmt.wrapWithSpan(en, direction: TextDirection.LTR), equals(en));
|
| + // Test overall dir (but not exit dir) supposedly matches context dir (LTR).
|
| + expect(ltrFmt.wrapWithSpan(he, direction: TextDirection.LTR),
|
| + equals('$he$LRM'));
|
| + // Test overall dir matches context dir (RTL.
|
| + expect(rtlFmt.wrapWithSpan(he, direction: TextDirection.RTL), equals(he));
|
| + // Test overall dir (but not exit dir) supposedly matches context dir (RTL).
|
| + expect(rtlFmt.wrapWithSpan(en, direction: TextDirection.RTL),
|
| + equals('$en$RLM'));
|
| +
|
| + // Test overall dir (RTL) doesn't match context dir (LTR).
|
| + expect(ltrFmt.wrapWithSpan(he, direction: TextDirection.RTL),
|
| + equals('<span dir=rtl>$he</span>$LRM'));
|
| + // Test supposed overall dir (RTL) doesn't match context dir (LTR).
|
| + expect(ltrFmt.wrapWithSpan(en, direction: TextDirection.RTL),
|
| + equals('<span dir=rtl>$en</span>$LRM'));
|
| + // Test overall dir (LTR) doesn't match context dir (RTL).
|
| + expect(rtlFmt.wrapWithSpan(en, direction: TextDirection.LTR),
|
| + equals('<span dir=ltr>$en</span>$RLM'));
|
| + // Test supposed overall dir (LTR) doesn't match context dir (RTL).
|
| + expect(rtlFmt.wrapWithSpan(he, direction: TextDirection.LTR),
|
| + equals('<span dir=ltr>$he</span>$RLM'));
|
| + // Test supposed overall dir (LTR) doesn't match context dir (unknown).
|
| + expect(unkFmt.wrapWithSpan(he, direction: TextDirection.LTR),
|
| + equals('<span dir=ltr>$he</span>'));
|
| + // Test supposed overall dir (neutral) doesn't match context dir (LTR).
|
| + expect(ltrFmt.wrapWithSpan(he, direction: TextDirection.UNKNOWN),
|
| + equals('$he$LRM'));
|
| + });
|
| +
|
| + test('wrapWithUnicode', () {
|
| + // Test overall dir matches context dir (LTR), no dirReset.
|
| + expect(
|
| + ltrFmt.wrapWithUnicode(en, isHtml: true, resetDir: false), equals(en));
|
| + // Test overall dir matches context dir (LTR), dirReset.
|
| + expect(
|
| + ltrFmt.wrapWithUnicode(en, isHtml: true, resetDir: true), equals(en));
|
| + // Test overall dir matches context dir (RTL), no dirReset.
|
| + expect(
|
| + rtlFmt.wrapWithUnicode(he, isHtml: true, resetDir: false), equals(he));
|
| + // Test overall dir matches context dir (RTL), dirReset.
|
| + expect(
|
| + rtlFmt.wrapWithUnicode(he, isHtml: true, resetDir: true), equals(he));
|
| +
|
| + // Test overall dir (RTL) doesn't match context dir (LTR), no dirReset.
|
| + expect(ltrFmt.wrapWithUnicode(he, isHtml: true, resetDir: false),
|
| + equals('$RLE$he$PDF'));
|
| + // Test overall dir (RTL) doesn't match context dir (LTR), dirReset.
|
| + expect(ltrFmt.wrapWithUnicode(he, isHtml: true, resetDir: true),
|
| + equals('$RLE$he$PDF$LRM'));
|
| + // Test overall dir (LTR) doesn't match context dir (RTL), no dirReset.
|
| + expect(rtlFmt.wrapWithUnicode(en, isHtml: true, resetDir: false),
|
| + equals('$LRE$en$PDF'));
|
| + // Test overall dir (LTR) doesn't match context dir (RTL), dirReset.
|
| + expect(rtlFmt.wrapWithUnicode(en, isHtml: true, resetDir: true),
|
| + equals('$LRE$en$PDF$RLM'));
|
| + // Test overall dir (LTR) doesn't match context dir (unknown), no dirReset.
|
| + expect(unkFmt.wrapWithUnicode(en, isHtml: true, resetDir: false),
|
| + equals('$LRE$en$PDF'));
|
| + // Test overall dir (RTL) doesn't match context dir (unknown), dirReset.
|
| + expect(unkFmt.wrapWithUnicode(he, isHtml: true, resetDir: true),
|
| + equals('$RLE$he$PDF'));
|
| + // Test overall dir (neutral) doesn't match context dir (LTR), dirReset.
|
| + expect(
|
| + ltrFmt.wrapWithUnicode('', isHtml: true, resetDir: true), equals(''));
|
| +
|
| + // Test exit dir (but not overall dir) is opposite to context dir, dirReset.
|
| + expect(
|
| + ltrFmt.wrapWithUnicode('$longEn$he$html', isHtml: true, resetDir: true),
|
| + equals('$longEn$he$html$LRM'));
|
| + // Test overall dir (but not exit dir) is opposite to context dir, dirReset.
|
| + expect(rtlFmt.wrapWithUnicode('$longEn$he', isHtml: true, resetDir: true),
|
| + equals('$LRE$longEn$he$PDF$RLM'));
|
| +
|
| + // Test overall dir matches context dir (LTR).
|
| + expect(
|
| + ltrFmt.wrapWithUnicode(en, direction: TextDirection.LTR), equals(en));
|
| + // Test overall dir (but not exit dir) supposedly matches context dir (LTR).
|
| + expect(ltrFmt.wrapWithUnicode(he, direction: TextDirection.LTR),
|
| + equals('$he$LRM'));
|
| + // Test overall dir matches context dir (RTL).
|
| + expect(
|
| + rtlFmt.wrapWithUnicode(he, direction: TextDirection.RTL), equals(he));
|
| + // Test overall dir (but not exit dir) supposedly matches context dir (RTL).
|
| + expect(rtlFmt.wrapWithUnicode(en, direction: TextDirection.RTL),
|
| + equals('$en$RLM'));
|
| +
|
| + // Test overall dir (RTL) doesn't match context dir (LTR).
|
| + expect(ltrFmt.wrapWithUnicode(he, direction: TextDirection.RTL),
|
| + equals('$RLE$he$PDF$LRM'));
|
| + // Test supposed overall dir (RTL) doesn't match context dir (LTR).
|
| + expect(ltrFmt.wrapWithUnicode(en, direction: TextDirection.RTL),
|
| + equals('$RLE$en$PDF$LRM'));
|
| + // Test overall dir (LTR) doesn't match context dir (RTL).
|
| + expect(rtlFmt.wrapWithUnicode(en, direction: TextDirection.LTR),
|
| + equals('$LRE$en$PDF$RLM'));
|
| + // Test supposed overall dir (LTR) doesn't match context dir (RTL).
|
| + expect(rtlFmt.wrapWithUnicode(he, direction: TextDirection.LTR),
|
| + equals('$LRE$he$PDF$RLM'));
|
| + // Test supposed overall dir (LTR) doesn't match context dir (unknown).
|
| + expect(unkFmt.wrapWithUnicode(he, direction: TextDirection.LTR),
|
| + equals('$LRE$he$PDF'));
|
| + // Test supposed overall dir (neutral) doesn't match context dir (LTR).
|
| + expect(ltrFmt.wrapWithUnicode(he, direction: TextDirection.UNKNOWN),
|
| + equals('$he$LRM'));
|
| + });
|
| +}
|
|
|