120178d62cf669af18467a16d3c4c4237ed42151cDoug Felt/* 220178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * Copyright (C) 2010 The Android Open Source Project 320178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * 420178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * Licensed under the Apache License, Version 2.0 (the "License"); you may not 520178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * use this file except in compliance with the License. You may obtain a copy of 620178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * the License at 720178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * 820178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * http://www.apache.org/licenses/LICENSE-2.0 920178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * 1020178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * Unless required by applicable law or agreed to in writing, software 1120178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 1220178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 1320178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * License for the specific language governing permissions and limitations under 1420178d62cf669af18467a16d3c4c4237ed42151cDoug Felt * the License. 1520178d62cf669af18467a16d3c4c4237ed42151cDoug Felt */ 1620178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 1720178d62cf669af18467a16d3c4c4237ed42151cDoug Feltpackage android.text; 1820178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 1920178d62cf669af18467a16d3c4c4237ed42151cDoug Feltimport android.test.suitebuilder.annotation.SmallTest; 2020178d62cf669af18467a16d3c4c4237ed42151cDoug Feltimport android.util.Log; 2120178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 2220178d62cf669af18467a16d3c4c4237ed42151cDoug Feltimport junit.framework.TestCase; 2320178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 2420178d62cf669af18467a16d3c4c4237ed42151cDoug Felt/** 259f7a4442b89cc06cb8cae6992484e7ae795323abDoug Felt * Quick check of native bidi implementation. 2620178d62cf669af18467a16d3c4c4237ed42151cDoug Felt */ 2720178d62cf669af18467a16d3c4c4237ed42151cDoug Feltpublic class StaticLayoutBidiTest extends TestCase { 2820178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 2920178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public static final int REQ_DL = 2; // Layout.DIR_REQUEST_DEFAULT_LTR; 3020178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public static final int REQ_DR = -2; // Layout.DIR_REQUEST_DEFAULT_RTL; 3120178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public static final int REQ_L = 1; // Layout.DIR_REQUEST_LTR; 3220178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public static final int REQ_R = -1; // Layout.DIR_REQUEST_RTL; 3320178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public static final int L = Layout.DIR_LEFT_TO_RIGHT; 3420178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public static final int R = Layout.DIR_RIGHT_TO_LEFT; 3520178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 3620178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public static final String SP = " "; 3720178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public static final String ALEF = "\u05d0"; 3820178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public static final String BET = "\u05d1"; 3920178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public static final String GIMEL = "\u05d2"; 4020178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public static final String DALET = "\u05d3"; 4120178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 428cb068a1220d4bd440aed628729891a282d4ef88Doug Felt //@SmallTest 4320178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public void testAllLtr() { 449f7a4442b89cc06cb8cae6992484e7ae795323abDoug Felt expectNativeBidi(REQ_DL, "a test", "000000", L); 4520178d62cf669af18467a16d3c4c4237ed42151cDoug Felt } 4620178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 478cb068a1220d4bd440aed628729891a282d4ef88Doug Felt //@SmallTest 4820178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public void testLtrRtl() { 499f7a4442b89cc06cb8cae6992484e7ae795323abDoug Felt expectNativeBidi(REQ_DL, "abc " + ALEF + BET + GIMEL, "0000111", L); 5020178d62cf669af18467a16d3c4c4237ed42151cDoug Felt } 5120178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 528cb068a1220d4bd440aed628729891a282d4ef88Doug Felt //@SmallTest 5320178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public void testAllRtl() { 549f7a4442b89cc06cb8cae6992484e7ae795323abDoug Felt expectNativeBidi(REQ_DL, ALEF + SP + ALEF + BET + GIMEL + DALET, "111111", R); 5520178d62cf669af18467a16d3c4c4237ed42151cDoug Felt } 5620178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 578cb068a1220d4bd440aed628729891a282d4ef88Doug Felt //@SmallTest 5820178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public void testRtlLtr() { 599f7a4442b89cc06cb8cae6992484e7ae795323abDoug Felt expectNativeBidi(REQ_DL, ALEF + BET + GIMEL + " abc", "1111222", R); 6020178d62cf669af18467a16d3c4c4237ed42151cDoug Felt } 6120178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 628cb068a1220d4bd440aed628729891a282d4ef88Doug Felt //@SmallTest 6320178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public void testRAllLtr() { 649f7a4442b89cc06cb8cae6992484e7ae795323abDoug Felt expectNativeBidi(REQ_R, "a test", "222222", R); 6520178d62cf669af18467a16d3c4c4237ed42151cDoug Felt } 6620178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 678cb068a1220d4bd440aed628729891a282d4ef88Doug Felt //@SmallTest 6820178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public void testRLtrRtl() { 699f7a4442b89cc06cb8cae6992484e7ae795323abDoug Felt expectNativeBidi(REQ_R, "abc " + ALEF + BET + GIMEL, "2221111", R); 7020178d62cf669af18467a16d3c4c4237ed42151cDoug Felt } 7120178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 728cb068a1220d4bd440aed628729891a282d4ef88Doug Felt //@SmallTest 7320178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public void testLAllRtl() { 749f7a4442b89cc06cb8cae6992484e7ae795323abDoug Felt expectNativeBidi(REQ_L, ALEF + SP + ALEF + BET + GIMEL + DALET, "111111", L); 7520178d62cf669af18467a16d3c4c4237ed42151cDoug Felt } 7620178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 778cb068a1220d4bd440aed628729891a282d4ef88Doug Felt //@SmallTest 7820178d62cf669af18467a16d3c4c4237ed42151cDoug Felt public void testLRtlLtr() { 799f7a4442b89cc06cb8cae6992484e7ae795323abDoug Felt expectNativeBidi(REQ_DL, ALEF + BET + GIMEL + " abc", "1111222", R); 80dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt } 81dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt 828cb068a1220d4bd440aed628729891a282d4ef88Doug Felt //@SmallTest 83dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt public void testNativeBidi() { 849f7a4442b89cc06cb8cae6992484e7ae795323abDoug Felt expectNativeBidi(REQ_L, ALEF + BET + GIMEL + " abc", "1110000", L); 85dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt } 86dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt 87dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt private void expectNativeBidi(int dir, String text, 88dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt String expectedLevels, int expectedDir) { 89dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt char[] chs = text.toCharArray(); 90dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt int n = chs.length; 91dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt byte[] chInfo = new byte[n]; 92dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt 93dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt int resultDir = AndroidBidi.bidi(dir, chs, chInfo, n, false); 94dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt 95dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt { 96dae8e94cce0881f3e10ef5e34b881f512bb52a75Doug Felt StringBuilder sb = new StringBuilder("info:"); 9720178d62cf669af18467a16d3c4c4237ed42151cDoug Felt for (int i = 0; i < n; ++i) { 9820178d62cf669af18467a16d3c4c4237ed42151cDoug Felt sb.append(" ").append(String.valueOf(chInfo[i])); 9920178d62cf669af18467a16d3c4c4237ed42151cDoug Felt } 10020178d62cf669af18467a16d3c4c4237ed42151cDoug Felt Log.i("BIDI", sb.toString()); 10120178d62cf669af18467a16d3c4c4237ed42151cDoug Felt } 10220178d62cf669af18467a16d3c4c4237ed42151cDoug Felt 10320178d62cf669af18467a16d3c4c4237ed42151cDoug Felt char[] resultLevelChars = new char[n]; 10420178d62cf669af18467a16d3c4c4237ed42151cDoug Felt for (int i = 0; i < n; ++i) { 10520178d62cf669af18467a16d3c4c4237ed42151cDoug Felt resultLevelChars[i] = (char)('0' + chInfo[i]); 10620178d62cf669af18467a16d3c4c4237ed42151cDoug Felt } 10720178d62cf669af18467a16d3c4c4237ed42151cDoug Felt String resultLevels = new String(resultLevelChars); 10820178d62cf669af18467a16d3c4c4237ed42151cDoug Felt assertEquals("direction", expectedDir, resultDir); 10920178d62cf669af18467a16d3c4c4237ed42151cDoug Felt assertEquals("levels", expectedLevels, resultLevels); 11020178d62cf669af18467a16d3c4c4237ed42151cDoug Felt } 11120178d62cf669af18467a16d3c4c4237ed42151cDoug Felt} 112