/*******************************************************************************
* 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 static org.junit.Assert.assertEquals;
import org.eclipse.equinox.bidi.StructuredTextTypeHandlerFactory;
import org.eclipse.equinox.bidi.advanced.*;
import org.junit.Test;
/**
* Tests fullToLean method
*/
public class StructuredTextFullToLeanTest extends StructuredTextTestBase {
private static final StructuredTextEnvironment envLTR = new StructuredTextEnvironment(null, false, StructuredTextEnvironment.ORIENT_LTR);
private static final StructuredTextEnvironment envRTL = new StructuredTextEnvironment(null, false, StructuredTextEnvironment.ORIENT_RTL);
private String type;
private void doTest1(String msg, String data, String leanLTR, String fullLTR, int[] l2fMapLTR, int[] f2lMapLTR, String leanRTL, String fullRTL, int[] l2fMapRTL, int[] f2lMapRTL) {
String text, full, lean, label;
int[] map;
text = toUT16(data);
IStructuredTextExpert expertLTR = StructuredTextExpertFactory.getExpert(type, envLTR);
lean = expertLTR.fullToLeanText(text);
assertEquals(msg + "LTR lean", leanLTR, toPseudo(lean));
full = expertLTR.leanToFullText(lean);
assertEquals(msg + "LTR full", fullLTR, toPseudo(full));
map = expertLTR.leanToFullMap(lean);
label = msg + "leanToFullMap() LTR";
assertEquals(label, array_display(l2fMapLTR), array_display(map));
map = expertLTR.fullToLeanMap(text);
label = msg + "fullToLeanMap() LTR";
assertEquals(label, array_display(f2lMapLTR), array_display(map));
IStructuredTextExpert expertRTL = StructuredTextExpertFactory.getExpert(type, envRTL);
lean = expertRTL.fullToLeanText(text);
assertEquals(msg + "RTL lean", leanRTL, toPseudo(lean));
full = expertRTL.leanToFullText(lean);
assertEquals(msg + "RTL full", fullRTL, toPseudo(full));
map = expertRTL.leanToFullMap(lean);
label = msg + "leanToFullMap() RTL";
assertEquals(label, array_display(l2fMapRTL), array_display(map));
map = expertRTL.fullToLeanMap(text);
label = msg + "fullToLeanMap() RTL";
assertEquals(label, array_display(f2lMapRTL), array_display(map));
}
private void doTest2(String msg) {
String text, data, full, lean, model;
Object state1, state2, state3;
data = "update \"AB_CDE\" set \"COL1\"@='01', \"COL2\"@='02' /* GH IJK";
text = toUT16(data);
IStructuredTextExpert expertLTR = StructuredTextExpertFactory.getStatefulExpert(type, envLTR);
expertLTR.clearState();
lean = expertLTR.fullToLeanText(text);
state1 = expertLTR.getState();
model = "update \"AB_CDE\" set \"COL1\"='01', \"COL2\"='02' /* GH IJK";
assertEquals(msg + "LTR lean", model, toPseudo(lean));
IStructuredTextExpert expertLTR2 = StructuredTextExpertFactory.getStatefulExpert(type, envLTR);
expertLTR2.clearState();
full = expertLTR2.leanToFullText(lean);
assertEquals(msg + "LTR full", data, toPseudo(full));
assertEquals(msg + "state from leanToFullText", state1, expertLTR2.getState());
data = "THIS IS A COMMENT LINE";
text = toUT16(data);
expertLTR.setState(state1);
lean = expertLTR.fullToLeanText(text);
state2 = expertLTR.getState();
model = "THIS IS A COMMENT LINE";
assertEquals(msg + "LTR lean2", model, toPseudo(lean));
expertLTR2.setState(state1);
full = expertLTR2.leanToFullText(lean);
assertEquals(msg + "LTR full2", data, toPseudo(full));
assertEquals(msg + "state from leanToFullText2", state2, expertLTR2.getState());
data = "SOME MORE */ where \"COL3\"@=123";
text = toUT16(data);
expertLTR.setState(state2);
lean = expertLTR.fullToLeanText(text);
state3 = expertLTR.getState();
model = "SOME MORE */ where \"COL3\"=123";
assertEquals(msg + "LTR lean3", model, toPseudo(lean));
expertLTR.setState(state2);
full = expertLTR.leanToFullText(lean);
assertEquals(msg + "LTR full3", data, toPseudo(full));
assertEquals(msg + "state from leanToFullText3", state3, expertLTR.getState());
}
@Test
public void testFullToLean() {
type = StructuredTextTypeHandlerFactory.COMMA_DELIMITED;
doTest1("testFullToLean #1 - ", "", "", "", new int[0], new int[0], "", "", new int[0], new int[0]);
int[] map1 = new int[] {0, 1, 2, 3, 4};
int[] map2 = new int[] {2, 3, 4, 5, 6};
int[] map3;
doTest1("testFullToLean #01 - ", "1.abc", "1.abc", "1.abc", map1, map1, "1.abc", ">@1.abc@^", map2, map1);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8};
map2 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10};
doTest1("testFullToLean #02 - ", "2.abc,def", "2.abc,def", "2.abc,def", map1, map1, "2.abc,def", ">@2.abc,def@^", map2, map1);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
map2 = new int[] {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
doTest1("testFullToLean #03 - ", "@a.3.bc,def", "a.3.bc,def", "a.3.bc,def", map1, map2, "a.3.bc,def", ">@a.3.bc,def@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
map2 = new int[] {-1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
doTest1("testFullToLean #04 - ", "@@a.4.bc,def", "a.4.bc,def", "a.4.bc,def", map1, map2, "a.4.bc,def", ">@a.4.bc,def@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8};
map2 = new int[] {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10};
doTest1("testFullToLean #05 - ", "@5.abc,def", "5.abc,def", "5.abc,def", map1, map2, "5.abc,def", ">@5.abc,def@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8};
map2 = new int[] {-1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10};
doTest1("testFullToLean #06 - ", "@@6.abc,def", "6.abc,def", "6.abc,def", map1, map2, "6.abc,def", ">@6.abc,def@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8};
map2 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10};
doTest1("testFullToLean #07 - ", "7abc,@def", "7abc,@def", "7abc,@def", map1, map1, "7abc,@def", ">@7abc,@def@^", map2, map1);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8};
map2 = new int[] {0, 1, 2, 3, 4, 5, -1, 6, 7, 8};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10};
doTest1("testFullToLean #08 - ", "8abc,@@def", "8abc,@def", "8abc,@def", map1, map2, "8abc,@def", ">@8abc,@def@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7};
map2 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, -1};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9};
doTest1("testFullToLean #09 - ", "9abc,def@", "9abc,def", "9abc,def", map1, map2, "9abc,def", ">@9abc,def@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8};
map2 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, -1, -1};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10};
doTest1("testFullToLean #10 - ", "10abc,def@@", "10abc,def", "10abc,def", map1, map2, "10abc,def", ">@10abc,def@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
map2 = new int[] {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, -1};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
doTest1("testFullToLean #11 - ", "@a.11.bc,@def@", "a.11.bc,@def", "a.11.bc,@def", map1, map2, "a.11.bc,@def", ">@a.11.bc,@def@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
map2 = new int[] {-1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, -1, 9, 10, 11, -1, -1};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
doTest1("testFullToLean #12 - ", "@@a.12.bc,@@def@@", "a.12.bc,@def", "a.12.bc,@def", map1, map2, "a.12.bc,@def", ">@a.12.bc,@def@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4};
map2 = new int[] {2, 3, 4, 5, 6};
doTest1("testFullToLean #13 - ", "13ABC", "13ABC", "13ABC", map1, map1, "13ABC", ">@13ABC@^", map2, map1);
map1 = new int[] {0, 1, 2, 3, 4, 6, 7, 8};
map2 = new int[] {0, 1, 2, 3, 4, 5, 6, 7};
map3 = new int[] {2, 3, 4, 5, 6, 8, 9, 10};
doTest1("testFullToLean #14 - ", "14ABC,DE", "14ABC,DE", "14ABC@,DE", map1, map2, "14ABC,DE", ">@14ABC@,DE@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 6, 7, 8};
map2 = new int[] {0, 1, 2, 3, 4, -1, 5, 6, 7};
map3 = new int[] {2, 3, 4, 5, 6, 8, 9, 10};
doTest1("testFullToLean #15 - ", "15ABC@,DE", "15ABC,DE", "15ABC@,DE", map1, map2, "15ABC,DE", ">@15ABC@,DE@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 6, 7, 8};
map2 = new int[] {0, 1, 2, 3, 4, -1, -1, 5, 6, 7};
map3 = new int[] {2, 3, 4, 5, 6, 8, 9, 10};
doTest1("testFullToLean #16 - ", "16ABC@@,DE", "16ABC,DE", "16ABC@,DE", map1, map2, "16ABC,DE", ">@16ABC@,DE@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8};
map2 = new int[] {0, 1, 2, 3, 4, 5, 6, -1, 7, 8};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10};
doTest1("testFullToLean #17 - ", "17ABC,@@DE", "17ABC,@DE", "17ABC,@DE", map1, map2, "17ABC,@DE", ">@17ABC,@DE@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13};
map2 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
map3 = new int[] {2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15};
doTest1("testFullToLean #18 - ", "18ABC,DE,FGH", "18ABC,DE,FGH", "18ABC@,DE@,FGH", map1, map2, "18ABC,DE,FGH", ">@18ABC@,DE@,FGH@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13};
map2 = new int[] {0, 1, 2, 3, 4, -1, 5, 6, 7, -1, 8, 9, 10, 11};
map3 = new int[] {2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15};
doTest1("testFullToLean #19 - ", "19ABC@,DE@,FGH", "19ABC,DE,FGH", "19ABC@,DE@,FGH", map1, map2, "19ABC,DE,FGH", ">@19ABC@,DE@,FGH@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
map2 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
doTest1("testFullToLean #20 - ", "20ABC,@DE,@FGH", "20ABC,@DE,@FGH", "20ABC,@DE,@FGH", map1, map1, "20ABC,@DE,@FGH", ">@20ABC,@DE,@FGH@^", map2, map1);
map1 = new int[] {0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13};
map2 = new int[] {0, 1, 2, 3, 4, -1, -1, 5, 6, 7, -1, -1, 8, 9, 10, 11};
map3 = new int[] {2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15};
doTest1("testFullToLean #21 - ", "21ABC@@,DE@@,FGH", "21ABC,DE,FGH", "21ABC@,DE@,FGH", map1, map2, "21ABC,DE,FGH", ">@21ABC@,DE@,FGH@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
map2 = new int[] {0, 1, 2, 3, 4, 5, 6, -1, 7, 8, 9, 10, -1, 11, 12, 13};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
doTest1("testFullToLean #22 - ", "22ABC,@@DE,@@FGH", "22ABC,@DE,@FGH", "22ABC,@DE,@FGH", map1, map2, "22ABC,@DE,@FGH", ">@22ABC,@DE,@FGH@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4};
map2 = new int[] {-1, -1, 0, 1, 2, 3, 4, -1, -1};
map3 = new int[] {2, 3, 4, 5, 6};
doTest1("testFullToLean #23 - ", ">@23abc@^", "23abc", "23abc", map1, map2, "23abc", ">@23abc@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4};
map2 = new int[] {0, 1, 2, 3, 4, -1, -1};
map3 = new int[] {2, 3, 4, 5, 6};
doTest1("testFullToLean #24 - ", "24abc@^", "24abc", "24abc", map1, map2, "24abc", ">@24abc@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4};
map2 = new int[] {-1, -1, 0, 1, 2, 3, 4};
map3 = new int[] {2, 3, 4, 5, 6};
doTest1("testFullToLean #25 - ", ">@25abc", "25abc", "25abc", map1, map2, "25abc", ">@25abc@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15};
map2 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
map3 = new int[] {2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17};
doTest1("testFullToLean #26 - ", "26AB,CD@EF,GHI", "26AB,CD@EF,GHI", "26AB@,CD@EF@,GHI", map1, map2, "26AB,CD@EF,GHI", ">@26AB@,CD@EF@,GHI@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
map2 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
map3 = new int[] {2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
doTest1("testFullToLean #27 - ", "27AB,CD@123ef,GHI", "27AB,CD@123ef,GHI", "27AB@,CD@123ef,GHI", map1, map2, "27AB,CD@123ef,GHI", ">@27AB@,CD@123ef,GHI@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13};
map2 = new int[] {-1, 0, 1, 2, 3, 4, -1, 5, 6, 7, -1, 8, 9, 10, 11, -1};
map3 = new int[] {2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15};
doTest1("testFullToLean #28 - ", ">28ABC@,DE@,FGH^", "28ABC,DE,FGH", "28ABC@,DE@,FGH", map1, map2, "28ABC,DE,FGH", ">@28ABC@,DE@,FGH@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13};
map2 = new int[] {-1, -1, 0, 1, 2, 3, 4, -1, 5, 6, 7, -1, 8, 9, 10, 11, -1, -1};
map3 = new int[] {2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15};
doTest1("testFullToLean #29 - ", ">>29ABC@,DE@,FGH^^", "29ABC,DE,FGH", "29ABC@,DE@,FGH", map1, map2, "29ABC,DE,FGH", ">@29ABC@,DE@,FGH@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15};
map2 = new int[] {-1, 0, 1, 2, 3, 4, 5, 6, -1, 7, 8, 9, -1, 10, 11, 12, 13, -1};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 14, 15, 16, 17};
doTest1("testFullToLean #30 - ", ">30AB>C^@,DE@,FGH^", "30AB>C^,DE,FGH", "30AB>C^@,DE@,FGH", map1, map2, "30AB>C^,DE,FGH", ">@30AB>C^@,DE@,FGH@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 7, 8, 9, 11, 12, 13, 14};
map2 = new int[] {-1, 0, 1, 2, 3, 4, 5, -1, 6, 7, 8, -1, 9, 10, 11, 12, -1, -1};
map3 = new int[] {2, 3, 4, 5, 6, 7, 9, 10, 11, 13, 14, 15, 16};
doTest1("testFullToLean #31 - ", ">31AB>C@,DE@,FGH^^", "31AB>C,DE,FGH", "31AB>C@,DE@,FGH", map1, map2, "31AB>C,DE,FGH", ">@31AB>C@,DE@,FGH@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13};
map2 = new int[] {-1, -1, 0, 1, 2, 3, 4, -1, 5, 6, 7, -1, 8, 9, 10, 11, -1, -1};
map3 = new int[] {2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15};
doTest1("testFullToLean #32 - ", ">@32ABC@,DE@,FGH@^", "32ABC,DE,FGH", "32ABC@,DE@,FGH", map1, map2, "32ABC,DE,FGH", ">@32ABC@,DE@,FGH@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13};
map2 = new int[] {-1, 0, 1, 2, 3, 4, -1, 5, 6, 7, -1, 8, 9, 10, 11, -1, -1};
map3 = new int[] {2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15};
doTest1("testFullToLean #33 - ", "@33ABC@,DE@,FGH@^", "33ABC,DE,FGH", "33ABC@,DE@,FGH", map1, map2, "33ABC,DE,FGH", ">@33ABC@,DE@,FGH@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13};
map2 = new int[] {-1, -1, 0, 1, 2, 3, 4, -1, 5, 6, 7, -1, 8, 9, 10, 11, -1};
map3 = new int[] {2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15};
doTest1("testFullToLean #34 - ", ">@34ABC@,DE@,FGH@", "34ABC,DE,FGH", "34ABC@,DE@,FGH", map1, map2, "34ABC,DE,FGH", ">@34ABC@,DE@,FGH@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
map2 = new int[] {0, 1, 2, 3, 4, 5, -1, 6, 7, 8, -1, -1, 9, 10, -1};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
doTest1("testFullToLean #35 - ", "35ABC@@DE@@@GH@", "35ABC@DE@GH", "35ABC@DE@GH", map1, map2, "35ABC@DE@GH", ">@35ABC@DE@GH@^", map3, map2);
map1 = new int[] {0, 1, 2, 3, 4, 5, 6, 7};
map2 = new int[] {0, 1, 2, 3, 4, 5, -1, 6, 7, -1, -1, -1, -1, -1, -1};
map3 = new int[] {2, 3, 4, 5, 6, 7, 8, 9};
doTest1("testFullToLean #36 - ", "36ABC@@DE@@@@@@", "36ABC@DE", "36ABC@DE", map1, map2, "36ABC@DE", ">@36ABC@DE@^", map3, map2);
map1 = new int[0];
map2 = new int[] {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
doTest1("testFullToLean #37 - ", ">>>@@@@@^^^", "", "", map1, map2, "", "", map1, map2);
// test fullToLeanText with initial state
type = StructuredTextTypeHandlerFactory.SQL;
doTest2("testFullToLean #38 - ");
}
}