/*******************************************************************************
* 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.StructuredTextTypeHandlerFactory;
import org.eclipse.equinox.bidi.advanced.*;
import org.junit.Assert;
import org.junit.Test;
/**
* Tests all plug-in extensions
*/
public class StructuredTextExtensionsTest extends StructuredTextTestBase {
private static final String PROPERTY = "property";
private static final String SYSTEM_USER = "system";
private StructuredTextEnvironment env = StructuredTextEnvironment.DEFAULT;
private StructuredTextEnvironment envArabic = new StructuredTextEnvironment("ar", false, StructuredTextEnvironment.ORIENT_LTR);
private StructuredTextEnvironment envHebrew = new StructuredTextEnvironment("he", false, StructuredTextEnvironment.ORIENT_LTR);
private IStructuredTextExpert expert;
private void doTest1(String label, String data, String result) {
String full = expert.leanToFullText(toUT16(data));
Assert.assertEquals(label + " data = " + data, result, toPseudo(full));
}
private void doTest2(String label, String data, String result) {
String full = expert.leanToFullText(data);
Assert.assertEquals(label + " data = " + data, result, toPseudo(full));
}
private void doTest3(String label, String data, String result) {
String full = expert.leanToFullText(toUT16(data));
Assert.assertEquals(label + " data = " + data, result, toPseudo(full));
}
@Test
public void testDefaultExtensions() {
String data;
expert = StructuredTextExpertFactory.getExpert(StructuredTextTypeHandlerFactory.COMMA_DELIMITED, env);
doTest1("Comma #1", "ab,cd, AB, CD, EFG", "ab,cd, AB@, CD@, EFG");
expert = StructuredTextExpertFactory.getExpert(StructuredTextTypeHandlerFactory.EMAIL, env);
doTest1("Email #1", "abc.DEF:GHI", "abc.DEF@:GHI");
doTest1("Email #2", "DEF.GHI \"A.B\":JK ", "DEF@.GHI @\"A.B\"@:JK ");
doTest1("Email #3", "DEF,GHI (A,B);JK ", "DEF@,GHI @(A,B)@;JK ");
doTest1("Email #4", "DEF.GHI (A.B :JK ", "DEF@.GHI @(A.B :JK ");
env = envArabic;
expert = StructuredTextExpertFactory.getExpert(StructuredTextTypeHandlerFactory.EMAIL, env);
doTest1("Email #5", "#EF.GHI \"A.B\":JK ", "<EF.GHI \"A.B\":JK &^");
doTest1("Email #6", "#EF,GHI (A,B);JK ", "<EF,GHI (A,B);JK &^");
doTest1("Email #7", "#EF.GHI (A.B :JK ", "<EF.GHI (A.B :JK &^");
data = toUT16("peter.pan") + "@" + toUT16("#EF.GHI");
doTest2("Email #8", data, "<&peter&.pan@#EF.GHI&^");
env = envHebrew;
expert = StructuredTextExpertFactory.getExpert(StructuredTextTypeHandlerFactory.EMAIL, env);
data = toUT16("peter.pan") + "@" + toUT16("DEF.GHI");
doTest2("Email #9", data, "peter.pan@DEF@.GHI");
expert = StructuredTextExpertFactory.getExpert(StructuredTextTypeHandlerFactory.FILE, env);
doTest1("File #1", "c:\\A\\B\\FILE.EXT", "c:\\A@\\B@\\FILE@.EXT");
expert = StructuredTextExpertFactory.getStatefulExpert(StructuredTextTypeHandlerFactory.JAVA, env);
doTest1("Java #1", "A = B + C;", "A@ = B@ + C;");
doTest1("Java #2", "A = B + C;", "A@ = B@ + C;");
doTest1("Java #3", "A = \"B+C\"+D;", "A@ = \"B+C\"@+D;");
doTest1("Java #4", "A = \"B+C+D;", "A@ = \"B+C+D;");
doTest1("Java #5", "A = \"B\\\"C\"+D;", "A@ = \"B\\\"C\"@+D;");
doTest1("Java #6", "A = /*B+C*/ D;", "A@ = /*B+C@*/ D;");
doTest1("Java #7", "A = /*B+C* D;", "A@ = /*B+C* D;");
doTest1("Java #8", "X+Y+Z */ B; ", "X+Y+Z @*/ B; ");
doTest1("Java #9", "A = //B+C* D;", "A@ = //B+C* D;");
doTest1("Java #10", "A = //B+C`|D+E;", "A@ = //B+C`|D@+E;");
expert = StructuredTextExpertFactory.getStatefulExpert(StructuredTextTypeHandlerFactory.REGEX, env);
data = toUT16("ABC(?") + "#" + toUT16("DEF)GHI");
doTest2("Regex #0.0", data, "A@B@C@(?#DEF)@G@H@I");
data = toUT16("ABC(?") + "#" + toUT16("DEF");
doTest2("Regex #0.1", data, "A@B@C@(?#DEF");
doTest1("Regex #0.2", "GHI)JKL", "GHI)@J@K@L");
data = toUT16("ABC(?") + "<" + toUT16("DEF") + ">" + toUT16("GHI");
doTest2("Regex #1", data, "A@B@C@(?<DEF>@G@H@I");
doTest1("Regex #2.0", "ABC(?'DEF'GHI", "A@B@C@(?'DEF'@G@H@I");
doTest1("Regex #2.1", "ABC(?'DEFGHI", "A@B@C@(?'DEFGHI");
data = toUT16("ABC(?(") + "<" + toUT16("DEF") + ">" + toUT16(")GHI");
doTest2("Regex #3", data, "A@B@C@(?(<DEF>)@G@H@I");
doTest1("Regex #4", "ABC(?('DEF')GHI", "A@B@C@(?('DEF')@G@H@I");
doTest1("Regex #5", "ABC(?(DEF)GHI", "A@B@C@(?(DEF)@G@H@I");
data = toUT16("ABC(?") + "&" + toUT16("DEF)GHI");
doTest2("Regex #6", data, "A@B@C@(?&DEF)@G@H@I");
data = toUT16("ABC(?") + "P<" + toUT16("DEF") + ">" + toUT16("GHI");
doTest2("Regex #7", data, "A@B@C(?p<DEF>@G@H@I");
data = toUT16("ABC\\k") + "<" + toUT16("DEF") + ">" + toUT16("GHI");
doTest2("Regex #8", data, "A@B@C\\k<DEF>@G@H@I");
doTest1("Regex #9", "ABC\\k'DEF'GHI", "A@B@C\\k'DEF'@G@H@I");
doTest1("Regex #10", "ABC\\k{DEF}GHI", "A@B@C\\k{DEF}@G@H@I");
data = toUT16("ABC(?") + "P=" + toUT16("DEF)GHI");
doTest2("Regex #11", data, "A@B@C(?p=DEF)@G@H@I");
doTest1("Regex #12", "ABC\\g{DEF}GHI", "A@B@C\\g{DEF}@G@H@I");
data = toUT16("ABC\\g") + "<" + toUT16("DEF") + ">" + toUT16("GHI");
doTest2("Regex #13", data, "A@B@C\\g<DEF>@G@H@I");
doTest1("Regex #14", "ABC\\g'DEF'GHI", "A@B@C\\g'DEF'@G@H@I");
data = toUT16("ABC(?(") + "R&" + toUT16("DEF)GHI");
doTest2("Regex #15", data, "A@B@C(?(r&DEF)@G@H@I");
data = toUT16("ABC") + "\\Q" + toUT16("DEF") + "\\E" + toUT16("GHI");
doTest2("Regex #16.0", data, "A@B@C\\qDEF\\eG@H@I");
data = toUT16("ABC") + "\\Q" + toUT16("DEF");
doTest2("Regex #16.1", data, "A@B@C\\qDEF");
data = toUT16("GHI") + "\\E" + toUT16("JKL");
doTest2("Regex #16.2", data, "GHI\\eJ@K@L");
doTest1("Regex #17.0", "abc[d-h]ijk", "abc[d-h]ijk");
doTest1("Regex #17.1", "aBc[d-H]iJk", "aBc[d-H]iJk");
doTest1("Regex #17.2", "aB*[!-H]iJ2", "aB*[!-@H]iJ@2");
doTest1("Regex #17.3", "aB*[1-2]J3", "aB*[@1-2]J@3");
doTest1("Regex #17.4", "aB*[5-6]J3", "aB*[@5-@6]@J@3");
doTest1("Regex #17.5", "a*[5-6]J3", "a*[5-@6]@J@3");
doTest1("Regex #17.6", "aB*123", "aB*@123");
doTest1("Regex #17.7", "aB*567", "aB*@567");
env = envArabic;
expert = StructuredTextExpertFactory.getExpert(StructuredTextTypeHandlerFactory.REGEX, env);
data = toUT16("#BC(?") + "#" + toUT16("DEF)GHI");
doTest2("Regex #0.0", data, "<BC(?#DEF)GHI&^");
data = toUT16("#BC(?") + "#" + toUT16("DEF");
doTest2("Regex #0.1", data, "<BC(?#DEF&^");
doTest1("Regex #0.2", "#HI)JKL", "<HI)JKL&^");
data = toUT16("#BC(?") + "<" + toUT16("DEF") + ">" + toUT16("GHI");
doTest2("Regex #1", data, "<BC(?<DEF>GHI&^");
doTest1("Regex #2.0", "#BC(?'DEF'GHI", "<BC(?'DEF'GHI&^");
doTest1("Regex #2.1", "#BC(?'DEFGHI", "<BC(?'DEFGHI&^");
data = toUT16("#BC(?(") + "<" + toUT16("DEF") + ">" + toUT16(")GHI");
doTest2("Regex #3", data, "<BC(?(<DEF>)GHI&^");
doTest1("Regex #4", "#BC(?('DEF')GHI", "<BC(?('DEF')GHI&^");
doTest1("Regex #5", "#BC(?(DEF)GHI", "<BC(?(DEF)GHI&^");
data = toUT16("#BC(?") + "&" + toUT16("DEF)GHI");
doTest2("Regex #6", data, "<BC(?&DEF)GHI&^");
data = toUT16("#BC(?") + "P<" + toUT16("DEF") + ">" + toUT16("GHI");
doTest2("Regex #7", data, "<BC(?p<DEF>GHI&^");
data = toUT16("#BC\\k") + "<" + toUT16("DEF") + ">" + toUT16("GHI");
doTest2("Regex #8", data, "<BC\\k<DEF>GHI&^");
doTest1("Regex #9", "#BC\\k'DEF'GHI", "<BC\\k'DEF'GHI&^");
doTest1("Regex #10", "#BC\\k{DEF}GHI", "<BC\\k{DEF}GHI&^");
data = toUT16("#BC(?") + "P=" + toUT16("DEF)GHI");
doTest2("Regex #11", data, "<BC(?p=DEF)GHI&^");
doTest1("Regex #12", "#BC\\g{DEF}GHI", "<BC\\g{DEF}GHI&^");
data = toUT16("#BC\\g") + "<" + toUT16("DEF") + ">" + toUT16("GHI");
doTest2("Regex #13", data, "<BC\\g<DEF>GHI&^");
doTest1("Regex #14", "#BC\\g'DEF'GHI", "<BC\\g'DEF'GHI&^");
data = toUT16("#BC(?(") + "R&" + toUT16("DEF)GHI");
doTest2("Regex #15", data, "<BC(?(r&DEF)GHI&^");
data = toUT16("#BC") + "\\Q" + toUT16("DEF") + "\\E" + toUT16("GHI");
doTest2("Regex #16.0", data, "<BC\\qDEF\\eGHI&^");
data = toUT16("#BC") + "\\Q" + toUT16("DEF");
doTest2("Regex #16.1", data, "<BC\\qDEF&^");
data = toUT16("#HI") + "\\E" + toUT16("JKL");
doTest2("Regex #16.2", data, "<HI\\eJKL&^");
env = envHebrew;
expert = StructuredTextExpertFactory.getStatefulExpert(StructuredTextTypeHandlerFactory.SQL, env);
doTest1("SQL #0", "abc GHI", "abc GHI");
doTest1("SQL #1", "abc DEF GHI", "abc DEF@ GHI");
doTest1("SQL #2", "ABC, DEF, GHI", "ABC@, DEF@, GHI");
doTest1("SQL #3", "ABC'DEF GHI' JKL,MN", "ABC@'DEF GHI'@ JKL@,MN");
doTest1("SQL #4.0", "ABC'DEF GHI JKL", "ABC@'DEF GHI JKL");
doTest1("SQL #4.1", "MNO PQ' RS,TUV", "MNO PQ'@ RS@,TUV");
doTest1("SQL #5", "ABC\"DEF GHI\" JKL,MN", "ABC@\"DEF GHI\"@ JKL@,MN");
doTest1("SQL #6", "ABC\"DEF GHI JKL", "ABC@\"DEF GHI JKL");
doTest1("SQL #7", "ABC/*DEF GHI*/ JKL,MN", "ABC@/*DEF GHI@*/ JKL@,MN");
doTest1("SQL #8.0", "ABC/*DEF GHI JKL", "ABC@/*DEF GHI JKL");
doTest1("SQL #8.1", "MNO PQ*/RS,TUV", "MNO PQ@*/RS@,TUV");
doTest1("SQL #9", "ABC--DEF GHI JKL", "ABC@--DEF GHI JKL");
doTest1("SQL #10", "ABC--DEF--GHI,JKL", "ABC@--DEF--GHI,JKL");
doTest1("SQL #11", "ABC'DEF '' G I' JKL,MN", "ABC@'DEF '' G I'@ JKL@,MN");
doTest1("SQL #12", "ABC\"DEF \"\" G I\" JKL,MN", "ABC@\"DEF \"\" G I\"@ JKL@,MN");
doTest1("SQL #13", "ABC--DEF GHI`|JKL MN", "ABC@--DEF GHI`|JKL@ MN");
expert = StructuredTextExpertFactory.getExpert(StructuredTextTypeHandlerFactory.UNDERSCORE, env);
doTest1("Underscore #1", "A_B_C_d_e_F_G", "A@_B@_C_d_e_F@_G");
expert = StructuredTextExpertFactory.getExpert(StructuredTextTypeHandlerFactory.URL, env);
doTest1("URL #1", "WWW.DOMAIN.COM/DIR1/DIR2/dir3/DIR4", "WWW@.DOMAIN@.COM@/DIR1@/DIR2/dir3/DIR4");
expert = StructuredTextExpertFactory.getExpert(StructuredTextTypeHandlerFactory.XPATH, env);
doTest1("Xpath #1", "abc(DEF)GHI", "abc(DEF@)GHI");
doTest1("Xpath #2", "DEF.GHI \"A.B\":JK ", "DEF@.GHI@ \"A.B\"@:JK ");
doTest1("Xpath #3", "DEF!GHI 'A!B'=JK ", "DEF@!GHI@ 'A!B'@=JK ");
doTest1("Xpath #4", "DEF.GHI 'A.B :JK ", "DEF@.GHI@ 'A.B :JK ");
expert = StructuredTextExpertFactory.getExpert(StructuredTextTypeHandlerFactory.EMAIL, env);
doTest3("DelimsEsc #1", "abc.DEF.GHI", "abc.DEF@.GHI");
doTest3("DelimsEsc #2", "DEF.GHI (A:B);JK ", "DEF@.GHI @(A:B)@;JK ");
doTest3("DelimsEsc #3", "DEF.GHI (A:B);JK ", "DEF@.GHI @(A:B)@;JK ");
doTest3("DelimsEsc #4", "DEF.GHI (A:B\\):C) ;JK ", "DEF@.GHI @(A:B\\):C) @;JK ");
doTest3("DelimsEsc #5", "DEF.GHI (A\\\\\\):C) ;JK ", "DEF@.GHI @(A\\\\\\):C) @;JK ");
doTest3("DelimsEsc #6", "DEF.GHI (A\\\\):C ;JK ", "DEF@.GHI @(A\\\\)@:C @;JK ");
doTest3("DelimsEsc #7", "DEF.GHI (A\\):C ;JK ", "DEF@.GHI @(A\\):C ;JK ");
}
@Test
public void testTestExtensions() {
expert = StructuredTextExpertFactory.getExpert(PROPERTY, env);
doTest1("Property #0", "NAME,VAL1,VAL2", "NAME,VAL1,VAL2");
doTest1("Property #1", "NAME=VAL1,VAL2", "NAME@=VAL1,VAL2");
doTest1("Property #2", "NAME=VAL1,VAL2=VAL3", "NAME@=VAL1,VAL2=VAL3");
expert = StructuredTextExpertFactory.getExpert(SYSTEM_USER, env);
doTest1("System #1", "HOST(JACK)", "HOST@(JACK)");
}
}