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