| /******************************************************************************* |
| * Copyright (c) 2010, 2011 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| ******************************************************************************/ |
| |
| package org.eclipse.equinox.bidi.internal.tests; |
| |
| import org.eclipse.equinox.bidi.advanced.*; |
| import org.eclipse.equinox.bidi.custom.*; |
| |
| /** |
| * Test edge conditions. |
| */ |
| public class StructuredTextSomeMoreTest extends StructuredTextTestBase { |
| |
| private class TestHandler1 extends StructuredTextTypeHandler { |
| |
| public TestHandler1() { |
| //empty constructor |
| } |
| |
| public int getSpecialsCount(IStructuredTextExpert expert) { |
| return 1; |
| } |
| |
| public int indexOfSpecial(IStructuredTextExpert expert, String text, StructuredTextCharTypes charTypes, StructuredTextOffsets offsets, int caseNumber, int fromIndex) { |
| return fromIndex; |
| } |
| |
| public int processSpecial(IStructuredTextExpert expert, String text, StructuredTextCharTypes charTypes, StructuredTextOffsets offsets, int caseNumber, int separLocation) { |
| int len = text.length(); |
| for (int i = len - 1; i >= 0; i--) { |
| StructuredTextTypeHandler.insertMark(text, charTypes, offsets, i); |
| StructuredTextTypeHandler.insertMark(text, charTypes, offsets, i); |
| } |
| return len; |
| } |
| } |
| |
| private class TestHandler2 extends StructuredTextTypeHandler { |
| |
| public TestHandler2() { |
| //empty constructor |
| } |
| |
| public int getSpecialsCount(IStructuredTextExpert expert) { |
| return 1; |
| } |
| } |
| |
| private class TestHandler3 extends StructuredTextTypeHandler { |
| |
| public TestHandler3() { |
| //empty constructor |
| } |
| |
| public int getSpecialsCount(IStructuredTextExpert expert) { |
| return 1; |
| } |
| |
| public int indexOfSpecial(IStructuredTextExpert expert, String text, StructuredTextCharTypes charTypes, StructuredTextOffsets offsets, int caseNumber, int fromIndex) { |
| return fromIndex; |
| } |
| } |
| |
| final static StructuredTextEnvironment env1 = new StructuredTextEnvironment("en_US", false, StructuredTextEnvironment.ORIENT_LTR); |
| final static StructuredTextEnvironment env2 = new StructuredTextEnvironment("he", false, StructuredTextEnvironment.ORIENT_LTR); |
| |
| public void testSomeMore() { |
| assertFalse(env1.isProcessingNeeded()); |
| assertTrue(env2.isProcessingNeeded()); |
| |
| StructuredTextTypeHandler handler1 = new TestHandler1(); |
| IStructuredTextExpert expert1 = StructuredTextExpertFactory.getStatefulExpert(handler1, env1); |
| String full = expert1.leanToFullText("abcd"); |
| assertEquals("@a@b@c@d", toPseudo(full)); |
| |
| StructuredTextTypeHandler handler2 = new TestHandler2(); |
| IStructuredTextExpert expert2 = StructuredTextExpertFactory.getStatefulExpert(handler2, env1); |
| boolean catchFlag = false; |
| try { |
| full = expert2.leanToFullText("abcd"); |
| } catch (IllegalStateException e) { |
| catchFlag = true; |
| } |
| assertTrue("Catch missing indexOfSpecial", catchFlag); |
| |
| StructuredTextTypeHandler handler3 = new TestHandler3(); |
| IStructuredTextExpert expert3 = StructuredTextExpertFactory.getStatefulExpert(handler3, env1); |
| catchFlag = false; |
| try { |
| full = expert3.leanToFullText("abcd"); |
| } catch (IllegalStateException e) { |
| catchFlag = true; |
| } |
| assertTrue("Catch missing processSpecial", catchFlag); |
| } |
| |
| } |