/* * Copyright 2010 Google Inc. * * 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. */ package com.google.gwt.i18n.shared; import com.google.gwt.i18n.client.HasDirection.Direction; import com.google.gwt.junit.client.GWTTestCase; /** * Unit tests for BidiUtils. * Uses the pure Java implementation of * {@link com.google.gwt.regexp.shared.RegExp}. {@link GwtBidiUtilsTest} * performs all the tests using the GWT version of RegExp. This is needed * due to several differences between the two implementations of RegExp (see * {@link com.google.gwt.regexp.shared.RegExpTest} for details). */ public class BidiUtilsTest extends GWTTestCase { private static BidiUtils bidiUtils = BidiUtils.get(); // This is a hack to force a GWTTestCase to run as a vanilla JUnit TestCase. @Override public String getModuleName() { return null; } public void testEndsWithLtr() { assertTrue(bidiUtils.endsWithLtr("a")); assertTrue(bidiUtils.endsWithLtr("abc")); assertTrue(bidiUtils.endsWithLtr("a (!)")); assertTrue(bidiUtils.endsWithLtr("a.1")); assertTrue(bidiUtils.endsWithLtr("http://www.google.com ")); assertTrue(bidiUtils.endsWithLtr("\u05e0 \u05e0 \u05e0a")); assertTrue(bidiUtils.endsWithLtr(" \u05e0 \u05e0\u05e1a \u05e2 a !")); assertFalse(bidiUtils.endsWithLtr("")); assertFalse(bidiUtils.endsWithLtr(" ")); assertFalse(bidiUtils.endsWithLtr("1")); assertFalse(bidiUtils.endsWithLtr("\u05e0")); assertFalse(bidiUtils.endsWithLtr("\u05e0 1(!)")); assertFalse(bidiUtils.endsWithLtr("a a a \u05e0")); assertFalse(bidiUtils.endsWithLtr("a a abc\u05e0\u05e1def\u05e2. 1")); assertTrue(bidiUtils.endsWithLtr("a a abc\u05e0<nasty tag>", false)); assertFalse(bidiUtils.endsWithLtr("a a abc\u05e0<nasty tag>", true)); } public void testEndsWithRtl() { assertTrue(bidiUtils.endsWithRtl("\u05e0")); assertTrue(bidiUtils.endsWithRtl("\u05e0\u05e1\u05e2")); assertTrue(bidiUtils.endsWithRtl("\u05e0 (!)")); assertTrue(bidiUtils.endsWithRtl("\u05e0.1")); assertTrue(bidiUtils.endsWithRtl("http://www.google.com/\u05e0 ")); assertTrue(bidiUtils.endsWithRtl("a a a a\u05e0")); assertTrue(bidiUtils.endsWithRtl(" a a a abc\u05e0def\u05e3. 1")); assertFalse(bidiUtils.endsWithRtl("")); assertFalse(bidiUtils.endsWithRtl(" ")); assertFalse(bidiUtils.endsWithRtl("1")); assertFalse(bidiUtils.endsWithRtl("a")); assertFalse(bidiUtils.endsWithRtl("a 1(!)")); assertFalse(bidiUtils.endsWithRtl("\u05e0 \u05e0 \u05e0a")); assertFalse(bidiUtils.endsWithRtl("\u05e0 \u05e0\u05e1ab\u05e2 a (!)")); assertFalse(bidiUtils.endsWithRtl("a a abc\u05e0<nasty tag>", false)); assertTrue(bidiUtils.endsWithRtl("a a abc\u05e0<nasty tag>", true)); } public void testEstimateDirection() { assertEquals(Direction.DEFAULT, bidiUtils.estimateDirection("", false)); assertEquals(Direction.DEFAULT, bidiUtils.estimateDirection(" ", false)); assertEquals(Direction.DEFAULT, bidiUtils.estimateDirection("! (...)", false)); assertEquals(Direction.LTR, bidiUtils.estimateDirection( "Pure Ascii content", false)); assertEquals(Direction.LTR, bidiUtils.estimateDirection("-17.0%", false)); assertEquals(Direction.LTR, bidiUtils.estimateDirection("http://foo/bar/", false)); assertEquals(Direction.LTR, bidiUtils.estimateDirection( "http://foo/bar/?s=\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0" + "\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0" + "\u05d0\u05d0\u05d0\u05d0\u05d0\u05d0", false)); assertEquals(Direction.RTL, bidiUtils.estimateDirection("\u05d0", false)); assertEquals(Direction.RTL, bidiUtils.estimateDirection( "9 \u05d0 -> 17.5, 23, 45, 19", false)); assertEquals(Direction.RTL, bidiUtils.estimateDirection( "http://foo/bar/ \u05d0 http://foo2/bar2/ http://foo3/bar3/", false)); assertEquals(Direction.RTL, bidiUtils.estimateDirection( "\u05d0\u05d9\u05df \u05de\u05de\u05e9 " + "\u05de\u05d4 \u05dc\u05e8\u05d0\u05d5\u05ea: " + "\u05dc\u05d0 \u05e6\u05d9\u05dc\u05de\u05ea\u05d9 " + "\u05d4\u05e8\u05d1\u05d4 \u05d5\u05d2\u05dd \u05d0" + "\u05dd \u05d4\u05d9\u05d9\u05ea\u05d9 \u05de\u05e6\u05dc" + "\u05dd, \u05d4\u05d9\u05d4 \u05e9\u05dd", false)); assertEquals(Direction.RTL, bidiUtils.estimateDirection( "\u05db\u05d0\u05df - http://geek.co.il/gallery/v/2007-06" + " - \u05d0\u05d9\u05df \u05de\u05de\u05e9 \u05de\u05d4 " + "\u05dc\u05e8\u05d0\u05d5\u05ea: \u05dc\u05d0 \u05e6" + "\u05d9\u05dc\u05de\u05ea\u05d9 \u05d4\u05e8\u05d1\u05d4 " + "\u05d5\u05d2\u05dd \u05d0\u05dd \u05d4\u05d9\u05d9\u05ea" + "\u05d9 \u05de\u05e6\u05dc\u05dd, \u05d4\u05d9\u05d4 " + "\u05e9\u05dd \u05d1\u05e2\u05d9\u05e7\u05e8 \u05d4\u05e8" + "\u05d1\u05d4 \u05d0\u05e0\u05e9\u05d9\u05dd. \u05de" + "\u05d4 \u05e9\u05db\u05df - \u05d0\u05e4\u05e9\u05e8 " + "\u05dc\u05e0\u05e6\u05dc \u05d0\u05ea \u05d4\u05d4 " + "\u05d3\u05d6\u05de\u05e0\u05d5\u05ea \u05dc\u05d4\u05e1" + "\u05ea\u05db\u05dc \u05e2\u05dc \u05db\u05de\u05d4 " + "\u05ea\u05de\u05d5\u05e0\u05d5\u05ea \u05de\u05e9\u05e2" + "\u05e9\u05e2\u05d5\u05ea \u05d9\u05e9\u05e0\u05d5\u05ea " + "\u05d9\u05d5\u05ea\u05e8 \u05e9\u05d9\u05e9 \u05dc" + "\u05d9 \u05d1\u05d0\u05ea\u05e8", false)); assertEquals(Direction.RTL, bidiUtils.estimateDirection( "CAPTCHA \u05de\u05e9\u05d5\u05db\u05dc\u05dc " + "\u05de\u05d3\u05d9?", false)); assertEquals(Direction.RTL, bidiUtils.estimateDirection( "Yes Prime Minister \u05e2\u05d3\u05db\u05d5\u05df. " + "\u05e9\u05d0\u05dc\u05d5 \u05d0\u05d5\u05ea\u05d9 " + "\u05de\u05d4 \u05d0\u05e0\u05d9 \u05e8\u05d5\u05e6" + "\u05d4 \u05de\u05ea\u05e0\u05d4 \u05dc\u05d7\u05d2", false)); assertEquals(Direction.RTL, bidiUtils.estimateDirection( "17.4.02 \u05e9\u05e2\u05d4:13-20 .15-00 .\u05dc\u05d0 " + "\u05d4\u05d9\u05d9\u05ea\u05d9 \u05db\u05d0\u05df.", false)); assertEquals(Direction.RTL, bidiUtils.estimateDirection( "5710 5720 5730. \u05d4\u05d3\u05dc\u05ea. " + "\u05d4\u05e0\u05e9\u05d9\u05e7\u05d4", false)); assertEquals(Direction.RTL, bidiUtils.estimateDirection( "\u05d4\u05d3\u05dc\u05ea http://www.google.com " + "http://www.gmail.com", false)); assertEquals(Direction.LTR, bidiUtils.estimateDirection( "\u05d4\u05d3\u05dc\u05ea <some quite nasty html mark up>", false)); assertEquals(Direction.RTL, bidiUtils.estimateDirection( "\u05d4\u05d3\u05dc\u05ea <some quite nasty html mark up>", true)); assertEquals(Direction.LTR, bidiUtils.estimateDirection( "\u05d4\u05d3\u05dc\u05ea & < >", false)); assertEquals(Direction.RTL, bidiUtils.estimateDirection( "\u05d4\u05d3\u05dc\u05ea & < >", true)); } public void testHasAnyLtr() { assertFalse(bidiUtils.hasAnyLtr("")); assertFalse(bidiUtils.hasAnyLtr("\u05e0\u05e1\u05e2")); assertTrue(bidiUtils.hasAnyLtr("\u05e0\u05e1z\u05e2")); assertFalse(bidiUtils.hasAnyLtr("123\t... \n")); } public void testHasAnyRtl() { assertFalse(bidiUtils.hasAnyRtl("")); assertFalse(bidiUtils.hasAnyRtl("abc")); assertTrue(bidiUtils.hasAnyRtl("ab\u05e0c")); assertFalse(bidiUtils.hasAnyRtl("123\t... \n")); } public void testStartsWithLtr() { assertTrue(bidiUtils.startsWithLtr("a")); assertTrue(bidiUtils.startsWithLtr("abc")); assertTrue(bidiUtils.startsWithLtr("(!) a")); assertTrue(bidiUtils.startsWithLtr("1.a")); assertTrue(bidiUtils.startsWithLtr("/a/\u05e0/\u05e1/\u05e2")); assertTrue(bidiUtils.startsWithLtr("a\u05e0 \u05e0 \u05e0")); assertTrue(bidiUtils.startsWithLtr("! a \u05e0 \u05e0\u05e1a \u05e2")); assertFalse(bidiUtils.startsWithLtr("")); assertFalse(bidiUtils.startsWithLtr(" ")); assertFalse(bidiUtils.startsWithLtr("1")); assertFalse(bidiUtils.startsWithLtr("\u05e0")); assertFalse(bidiUtils.startsWithLtr("1(!) \u05e0")); assertFalse(bidiUtils.startsWithLtr("\u05e0 a a a")); assertTrue(bidiUtils.startsWithLtr("<nasty tag>\u05e0:a a abc", false)); assertFalse(bidiUtils.startsWithLtr("<nasty tag>\u05e0:a a abc", true)); } public void testStartsWithRtl() { assertTrue(bidiUtils.startsWithRtl("\u05e0")); assertTrue(bidiUtils.startsWithRtl("\u05e0\u05e1\u05e2")); assertTrue(bidiUtils.startsWithRtl("(!) \u05e0")); assertTrue(bidiUtils.startsWithRtl("1.\u05e0")); assertTrue(bidiUtils.startsWithRtl("/\u05e0/a/b/c")); assertTrue(bidiUtils.startsWithRtl("\u05e0a a a a")); assertTrue(bidiUtils.startsWithRtl("1. \u05e0. a a a abc\u05e1 def")); assertFalse(bidiUtils.startsWithRtl("")); assertFalse(bidiUtils.startsWithRtl(" ")); assertFalse(bidiUtils.startsWithRtl("1")); assertFalse(bidiUtils.startsWithRtl("a")); assertFalse(bidiUtils.startsWithRtl("(!) a")); assertFalse(bidiUtils.startsWithRtl("a \u05e0 \u05e0 \u05e0")); assertFalse(bidiUtils.startsWithRtl("<nasty tag>\u05e0:a a abc", false)); assertTrue(bidiUtils.startsWithRtl("<nasty tag>\u05e0:a a abc", true)); } public void testStripHtmlIfNeeded() { String str = "foo<gev<nasty tag/>"; String stripped = "foo gev "; assertEquals(stripped, bidiUtils.stripHtmlIfNeeded(str, true)); assertEquals(str, bidiUtils.stripHtmlIfNeeded(str, false)); } }