/**
*
*/
package org.eclipse.dltk.javascript.core.tests.contentassist;
import junit.framework.TestCase;
import org.eclipse.dltk.internal.javascript.typeinference.CompletionString;
/**
* @author jcompagner
*/
public class CompletionStringParsing extends TestCase {
public static String parse(String id, boolean dotBeforeBrackets) {
return CompletionString.parse(id, dotBeforeBrackets);
}
public void testCompletionWithArrayDotResolving() throws Exception {
assertEquals("forms.xxx.yyy", parse("forms.xxx.yyy", true));
assertEquals("forms.xxx.yyy", parse("forms.xxx.yyy()", true));
assertEquals("forms.xxx.yyy", parse("forms.xxx().yyy()", true));
assertEquals("forms.xxx.[].yyy.[]", parse("forms.xxx[].yyy[]", true));
assertEquals("forms.[].yyy", parse("forms[xxx].yyy", true));
assertEquals("forms.[].yyy", parse("forms[xxx()].yyy", true));
assertEquals("forms.[].yyy", parse("forms[xxx(1)].yyy", true));
assertEquals("xxx", parse("forms[xxx", true));
assertEquals("", parse("forms[xxx(", true));
assertEquals("a", parse("forms[xxx(a", true));
assertEquals("xxx", parse("forms[xxx(1)", true));
assertEquals("xxx.yyy", parse("forms[xxx(1).yyy", true));
assertEquals("forms.[]", parse("forms[xxx(1).yyy]", true));
assertEquals("forms.[]", parse("forms[xxx(1).yyy]]", true));
assertEquals("forms.[]", parse("forms[xxx(1)).yyy]", true));
assertEquals("forms.[]", parse("forms[[xxx(1).yyy]", true));
assertEquals("forms.[]", parse("forms[xxx((1).yyy]", true));
assertEquals("forms.[]", parse("forms[[xxx((1).yyy]", true));
assertEquals("forms.[]", parse("forms[xxx((1).yyy]]", true));
assertEquals("forms.[]", parse(")forms[xxx(1)).yyy]", true));
}
public void testCompletionWithoutArrayDotResolving() throws Exception {
assertEquals("forms.xxx.yyy", parse("forms.xxx.yyy", false));
assertEquals("forms.xxx.yyy", parse("forms.xxx.yyy()", false));
assertEquals("forms.xxx.yyy", parse("forms.xxx().yyy()", false));
assertEquals("forms.xxx[].yyy[]", parse("forms.xxx[].yyy[]", false));
assertEquals("forms[].yyy", parse("forms[xxx].yyy", false));
assertEquals("forms[].yyy", parse("forms[xxx()].yyy", false));
assertEquals("forms[].yyy", parse("forms[xxx(1)].yyy", false));
assertEquals("xxx", parse("forms[xxx", false));
assertEquals("", parse("forms[xxx(", false));
assertEquals("a", parse("forms[xxx(a", false));
assertEquals("xxx", parse("forms[xxx(1)", false));
assertEquals("xxx.yyy", parse("forms[xxx(1).yyy", false));
assertEquals("forms[]", parse("forms[xxx(1).yyy]", false));
assertEquals("forms[]", parse("forms[xxx(1).yyy]]", false));
assertEquals("forms[]", parse("forms[xxx(1)).yyy]", false));
assertEquals("forms[]", parse(")forms[xxx(1)).yyy]", false));
}
public void testDoubleParsing() throws Exception {
assertEquals("forms.xxx.[].yyy.[]", parse("forms.xxx.[].yyy.[]", true));
}
public void testWithLineEnding() throws Exception {
assertEquals("forms.xxx.[].yyy.[]",
parse("someCode\nforms.xxx[xxx].yyy[yyy]", true));
assertEquals("", parse("someCode\nforms.xxx[xxx].yyy[yyy]\n", true));
}
public void testWithWhiteSpace() throws Exception {
assertEquals("forms.xxx.[].yyy.[]",
parse("someCode forms.xxx[xxx].yyy[yyy]", true));
assertEquals("", parse("someCode forms.xxx[xxx].yyy[yyy] ", true));
assertEquals("", parse("x.f2()\n .\n\tf2()\n\t.\n\tf1()\n", true));
}
public void testWithValidWhiteSpace() throws Exception {
assertEquals("x.f2.f2", parse("x.f2().\n\tf2()", true));
assertEquals("x.f2.f2", parse("x.f2()\n .\n\tf2()", true));
assertEquals("x.f2.f2.f1", parse("x.f2()\n .\n\tf2()\n\t.\n\tf1()", true));
assertEquals("x.f2.f2.f1.", parse("x.f2()\n .\n\tf2()\n\t.\n\tf1()\n.", true));
}
public void testWithCommentLineEndingWithDot() throws Exception {
assertEquals("x.f2.f2", parse("// this is a comment.\nx.f2().\n\tf2()", true));
}
public void testWithMultiplyParams() throws Exception {
assertEquals("forms.xxx.[].yyy.[]",
parse("someCode forms.xxx[xxx,yyy].yyy[xxx,yyy]", true));
assertEquals(
"forms.xxx.[].yyy.[]",
parse("someCode forms.xxx[xxx , yyy].yyy[xxx , yyy, yyy]", true));
assertEquals("a", parse("someCode forms.xxx[xxx,yyy].yyy[a", true));
assertEquals("a",
parse("someCode forms.xxx[xxx , yyy].yyy[xxx,a", true));
assertEquals("a",
parse("someCode forms.xxx[xxx , yyy].yyy[xxx , a", true));
}
public void testWithString() throws Exception {
assertEquals("forms.xxx.[].yyy.[]",
parse("forms.xxx['xxx'].yyy[\"yyy\"]", true));
assertEquals("forms.xxx.[].yyy.[]",
parse("forms.xxx['xxx yyy'].yyy[\"xxx yyy\"]", true));
assertEquals("forms.xxx.[].yyy.[]",
parse("forms.xxx['xxx yyy'].yyy[\"xxx 'yyy'\"]", true));
assertEquals("\"xxx 'yyy'\"", parse("\"xxx 'yyy'\"", true));
assertEquals("'xxx \"yyy\"'", parse("'xxx \"yyy\"'", true));
}
public void testXMLSyntax() throws Exception {
assertEquals(
"_xml.articulo.art::articulo_catalago.art::articulo_borrador",
parse("_xml.articulo.art::articulo_catalago.art::articulo_borrador",
true));
}
public void testObjectLiteralSyntax() {
assertEquals("person.name", parse("var x = { name:person.name", true));
}
public void testArrayFunction() throws Exception {
assertEquals("execute.[]", parse("execute[0]()", true));
}
public void testFunctionArray() throws Exception {
assertEquals("execute.[]", parse("execute()[0]", true));
}
}