// Copyright 2007 The Closure Library Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
goog.provide('goog.i18n.bidiTest');
goog.setTestOnly('goog.i18n.bidiTest');
goog.require('goog.i18n.bidi');
goog.require('goog.i18n.bidi.Dir');
goog.require('goog.testing.jsunit');
var LRE = '\u202A';
var RLE = '\u202B';
var PDF = '\u202C';
var LRM = '\u200E';
var RLM = '\u200F';
function testToDir() {
assertEquals(null, goog.i18n.bidi.toDir(null));
assertEquals(null, goog.i18n.bidi.toDir(null, true));
assertEquals(goog.i18n.bidi.Dir.NEUTRAL,
goog.i18n.bidi.toDir(goog.i18n.bidi.Dir.NEUTRAL));
assertEquals(null, goog.i18n.bidi.toDir(0, true));
assertEquals(goog.i18n.bidi.Dir.LTR,
goog.i18n.bidi.toDir(goog.i18n.bidi.Dir.LTR));
assertEquals(goog.i18n.bidi.Dir.LTR,
goog.i18n.bidi.toDir(goog.i18n.bidi.Dir.LTR, true));
assertEquals(goog.i18n.bidi.Dir.LTR, goog.i18n.bidi.toDir(100));
assertEquals(goog.i18n.bidi.Dir.LTR, goog.i18n.bidi.toDir(100, true));
assertEquals(goog.i18n.bidi.Dir.LTR, goog.i18n.bidi.toDir(false));
assertEquals(goog.i18n.bidi.Dir.LTR, goog.i18n.bidi.toDir(false, true));
assertEquals(goog.i18n.bidi.Dir.RTL,
goog.i18n.bidi.toDir(goog.i18n.bidi.Dir.RTL));
assertEquals(goog.i18n.bidi.Dir.RTL,
goog.i18n.bidi.toDir(goog.i18n.bidi.Dir.RTL, true));
assertEquals(goog.i18n.bidi.Dir.RTL, goog.i18n.bidi.toDir(-100));
assertEquals(goog.i18n.bidi.Dir.RTL, goog.i18n.bidi.toDir(-100, true));
assertEquals(goog.i18n.bidi.Dir.RTL, goog.i18n.bidi.toDir(true));
assertEquals(goog.i18n.bidi.Dir.RTL, goog.i18n.bidi.toDir(true, true));
}
function testIsRtlLang() {
assert(!goog.i18n.bidi.isRtlLanguage('en'));
assert(!goog.i18n.bidi.isRtlLanguage('fr'));
assert(!goog.i18n.bidi.isRtlLanguage('zh-CN'));
assert(!goog.i18n.bidi.isRtlLanguage('fil'));
assert(!goog.i18n.bidi.isRtlLanguage('az'));
assert(!goog.i18n.bidi.isRtlLanguage('iw-Latn'));
assert(!goog.i18n.bidi.isRtlLanguage('iw-LATN'));
assert(!goog.i18n.bidi.isRtlLanguage('iw_latn'));
assert(goog.i18n.bidi.isRtlLanguage('ar'));
assert(goog.i18n.bidi.isRtlLanguage('AR'));
assert(goog.i18n.bidi.isRtlLanguage('iw'));
assert(goog.i18n.bidi.isRtlLanguage('he'));
assert(goog.i18n.bidi.isRtlLanguage('fa'));
assert(goog.i18n.bidi.isRtlLanguage('ckb'));
assert(goog.i18n.bidi.isRtlLanguage('ar-EG'));
assert(goog.i18n.bidi.isRtlLanguage('az-Arab'));
assert(goog.i18n.bidi.isRtlLanguage('az-ARAB-IR'));
assert(goog.i18n.bidi.isRtlLanguage('az_arab_IR'));
}
function testIsLtrChar() {
assert(goog.i18n.bidi.isLtrChar('a'));
assert(!goog.i18n.bidi.isLtrChar('\u05e0'));
var str = 'a\u05e0z';
assert(goog.i18n.bidi.isLtrChar(str.charAt(0)));
assert(!goog.i18n.bidi.isLtrChar(str.charAt(1)));
assert(goog.i18n.bidi.isLtrChar(str.charAt(2)));
}
function testIsRtlChar() {
assert(!goog.i18n.bidi.isRtlChar('a'));
assert(goog.i18n.bidi.isRtlChar('\u05e0'));
var str = 'a\u05e0z';
assert(!goog.i18n.bidi.isRtlChar(str.charAt(0)));
assert(goog.i18n.bidi.isRtlChar(str.charAt(1)));
assert(!goog.i18n.bidi.isRtlChar(str.charAt(2)));
}
function testIsNeutralChar() {
assert(goog.i18n.bidi.isNeutralChar('\u0000'));
assert(goog.i18n.bidi.isNeutralChar('\u0020'));
assert(!goog.i18n.bidi.isNeutralChar('a'));
assert(goog.i18n.bidi.isNeutralChar('!'));
assert(goog.i18n.bidi.isNeutralChar('@'));
assert(goog.i18n.bidi.isNeutralChar('['));
assert(goog.i18n.bidi.isNeutralChar('`'));
assert(goog.i18n.bidi.isNeutralChar('0'));
assert(!goog.i18n.bidi.isNeutralChar('\u05e0'));
}
function testIsNeutralText() {
assert(goog.i18n.bidi.isNeutralText('123'));
assert(!goog.i18n.bidi.isNeutralText('abc'));
assert(goog.i18n.bidi.isNeutralText('http://abc'));
assert(goog.i18n.bidi.isNeutralText(' 123-()'));
assert(!goog.i18n.bidi.isNeutralText('123a456'));
assert(!goog.i18n.bidi.isNeutralText('123\u05e0456'));
assert(!goog.i18n.bidi.isNeutralText('123<', false));
assert(goog.i18n.bidi.isNeutralText('123<', true));
}
function testHasAnyLtr() {
assert(!goog.i18n.bidi.hasAnyLtr(''));
assert(!goog.i18n.bidi.hasAnyLtr('\u05e0\u05e1\u05e2'));
assert(goog.i18n.bidi.hasAnyLtr('\u05e0\u05e1z\u05e2'));
assert(!goog.i18n.bidi.hasAnyLtr('123\t... \n'));
assert(goog.i18n.bidi.hasAnyLtr('
123<', false));
assert(!goog.i18n.bidi.hasAnyLtr('
123<', true));
}
function testHasAnyRtl() {
assert(!goog.i18n.bidi.hasAnyRtl(''));
assert(!goog.i18n.bidi.hasAnyRtl('abc'));
assert(goog.i18n.bidi.hasAnyRtl('ab\u05e0c'));
assert(!goog.i18n.bidi.hasAnyRtl('123\t... \n'));
assert(goog.i18n.bidi.hasAnyRtl('123', false));
assert(!goog.i18n.bidi.hasAnyRtl('123', true));
}
function testEndsWithLtr() {
assert(goog.i18n.bidi.endsWithLtr('a'));
assert(goog.i18n.bidi.endsWithLtr('abc'));
assert(goog.i18n.bidi.endsWithLtr('a (!)'));
assert(goog.i18n.bidi.endsWithLtr('a.1'));
assert(goog.i18n.bidi.endsWithLtr('http://www.google.com '));
assert(goog.i18n.bidi.endsWithLtr('\u05e0a'));
assert(goog.i18n.bidi.endsWithLtr(' \u05e0\u05e1a\u05e2\u05e3 a (!)'));
assert(goog.i18n.bidi.endsWithLtr('\u202b\u05d0!\u202c\u200e'));
assert(!goog.i18n.bidi.endsWithLtr(''));
assert(!goog.i18n.bidi.endsWithLtr(' '));
assert(!goog.i18n.bidi.endsWithLtr('1'));
assert(!goog.i18n.bidi.endsWithLtr('\u05e0'));
assert(!goog.i18n.bidi.endsWithLtr('\u05e0 1(!)'));
assert(!goog.i18n.bidi.endsWithLtr('a\u05e0'));
assert(!goog.i18n.bidi.endsWithLtr('a abc\u05e0\u05e1def\u05e2. 1'));
assert(!goog.i18n.bidi.endsWithLtr('\u200f\u202eArtielish\u202c\u200f'));
assert(!goog.i18n.bidi.endsWithLtr(' \u05e0\u05e1a\u05e2 <', true));
assert(goog.i18n.bidi.endsWithLtr(' \u05e0\u05e1a\u05e2 <', false));
}
function testEndsWithRtl() {
assert(goog.i18n.bidi.endsWithRtl('\u05e0'));
assert(goog.i18n.bidi.endsWithRtl('\u05e0\u05e1\u05e2'));
assert(goog.i18n.bidi.endsWithRtl('\u05e0 (!)'));
assert(goog.i18n.bidi.endsWithRtl('\u05e0.1'));
assert(goog.i18n.bidi.endsWithRtl('http://www.google.com/\u05e0 '));
assert(goog.i18n.bidi.endsWithRtl('a\u05e0'));
assert(goog.i18n.bidi.endsWithRtl(' a abc\u05e0def\u05e3. 1'));
assert(goog.i18n.bidi.endsWithRtl('\u200f\u202eArtielish\u202c\u200f'));
assert(!goog.i18n.bidi.endsWithRtl(''));
assert(!goog.i18n.bidi.endsWithRtl(' '));
assert(!goog.i18n.bidi.endsWithRtl('1'));
assert(!goog.i18n.bidi.endsWithRtl('a'));
assert(!goog.i18n.bidi.endsWithRtl('a 1(!)'));
assert(!goog.i18n.bidi.endsWithRtl('\u05e0a'));
assert(!goog.i18n.bidi.endsWithRtl('\u202b\u05d0!\u202c\u200e'));
assert(!goog.i18n.bidi.endsWithRtl('\u05e0 \u05e0\u05e1ab\u05e2 a (!)'));
assert(goog.i18n.bidi.endsWithRtl(' \u05e0\u05e1a\u05e2 <', true));
assert(!goog.i18n.bidi.endsWithRtl(' \u05e0\u05e1a\u05e2 <', false));
}
function testGuardBracketInHtml() {
var strWithRtl = 'asc \u05d0 (\u05d0\u05d0\u05d0)';
assertEquals('asc \u05d0 (\u05d0\u05d0\u05d0)',
goog.i18n.bidi.guardBracketInHtml(strWithRtl));
assertEquals('asc \u05d0 (\u05d0\u05d0\u05d0)',
goog.i18n.bidi.guardBracketInHtml(strWithRtl, true));
assertEquals('asc \u05d0 (\u05d0\u05d0\u05d0)',
goog.i18n.bidi.guardBracketInHtml(strWithRtl, false));
var strWithRtl2 = '\u05d0 a (asc:))';
assertEquals('\u05d0 a (asc:))',
goog.i18n.bidi.guardBracketInHtml(strWithRtl2));
assertEquals('\u05d0 a (asc:))',
goog.i18n.bidi.guardBracketInHtml(strWithRtl2, true));
assertEquals('\u05d0 a (asc:))',
goog.i18n.bidi.guardBracketInHtml(strWithRtl2, false));
var strWithoutRtl = 'a (asc) {{123}}';
assertEquals('a (asc) {{123}}',
goog.i18n.bidi.guardBracketInHtml(strWithoutRtl));
assertEquals('a (asc) {{123}}',
goog.i18n.bidi.guardBracketInHtml(strWithoutRtl, true));
assertEquals('a (asc) {{123}}',
goog.i18n.bidi.guardBracketInHtml(strWithoutRtl, false));
}
function testGuardBracketInText() {
var strWithRtl = 'asc \u05d0 (\u05d0\u05d0\u05d0)';
assertEquals('asc \u05d0 \u200f(\u05d0\u05d0\u05d0)\u200f',
goog.i18n.bidi.guardBracketInText(strWithRtl));
assertEquals('asc \u05d0 \u200f(\u05d0\u05d0\u05d0)\u200f',
goog.i18n.bidi.guardBracketInText(strWithRtl, true));
assertEquals('asc \u05d0 \u200e(\u05d0\u05d0\u05d0)\u200e',
goog.i18n.bidi.guardBracketInText(strWithRtl, false));
var strWithRtl2 = '\u05d0 a (asc:))';
assertEquals('\u05d0 a \u200f(asc:))\u200f',
goog.i18n.bidi.guardBracketInText(strWithRtl2));
assertEquals('\u05d0 a \u200f(asc:))\u200f',
goog.i18n.bidi.guardBracketInText(strWithRtl2, true));
assertEquals('\u05d0 a \u200e(asc:))\u200e',
goog.i18n.bidi.guardBracketInText(strWithRtl2, false));
var strWithoutRtl = 'a (asc) {{123}}';
assertEquals('a \u200e(asc)\u200e \u200e{{123}}\u200e',
goog.i18n.bidi.guardBracketInText(strWithoutRtl));
assertEquals('a \u200f(asc)\u200f \u200f{{123}}\u200f',
goog.i18n.bidi.guardBracketInText(strWithoutRtl, true));
assertEquals('a \u200e(asc)\u200e \u200e{{123}}\u200e',
goog.i18n.bidi.guardBracketInText(strWithoutRtl, false));
}
function testEnforceRtlInHtml() {
var str = '