/** * Copyright (c) 2013-2016 Angelo ZERR. * 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: * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation */ package tern.server.protocol.completions; import org.junit.Assert; import org.junit.Test; public class TernCompletionItemTest { @Test public void on() throws Exception { TernCompletionItem completion = new TernCompletionItem( new TernCompletionProposalRec( "on", "fn(events: string, selector?: string, data?: ?, handler: fn(+jQuery.Event)) -> jQuery.fn", "a doc", "an url", "jquery")); Assert.assertEquals("on", completion.getName()); Assert.assertTrue(completion.isFunction()); Assert.assertFalse(completion.isArray()); Assert.assertEquals("jQuery.fn", completion.getJsType()); Assert.assertEquals("a doc", completion.getDoc()); Assert.assertEquals("an url", completion.getURL()); Assert.assertEquals("jquery", completion.getOrigin()); Assert.assertNotNull(completion.getParameters()); Assert.assertEquals(4, completion.getParameters().size()); Parameter parameter = null; for (int i = 0; i < completion.getParameters().size(); i++) { parameter = completion.getParameters().get(i); switch (i) { case 0: Assert.assertEquals("events", parameter.getName()); Assert.assertTrue(parameter.isRequired()); Assert.assertEquals("string", parameter.getType()); break; case 1: Assert.assertEquals("selector", parameter.getName()); Assert.assertFalse(parameter.isRequired()); Assert.assertEquals("string", parameter.getType()); break; case 2: Assert.assertEquals("data", parameter.getName()); Assert.assertFalse(parameter.isRequired()); Assert.assertEquals("?", parameter.getType()); break; case 3: Assert.assertEquals("handler", parameter.getName()); Assert.assertTrue(parameter.isRequired()); Assert.assertEquals("fn(+jQuery.Event)", parameter.getType()); break; } } String[] allTypes = completion.expand(); Assert.assertNotNull(allTypes); Assert.assertEquals(3, allTypes.length); Assert.assertEquals( "fn(events: string, handler: fn(+jQuery.Event)) -> jQuery.fn", allTypes[0]); Assert.assertEquals( "fn(events: string, selector?: string, handler: fn(+jQuery.Event)) -> jQuery.fn", allTypes[1]); Assert.assertEquals( "fn(events: string, data?: ?, handler: fn(+jQuery.Event)) -> jQuery.fn", allTypes[2]); } @Test public void addBack() throws Exception { TernCompletionItem completion = new TernCompletionItem( new TernCompletionProposalRec("addBack", "fn(selector?: string) -> jQuery.fn", "a doc", "an url", "jquery")); Assert.assertEquals("addBack", completion.getName()); Assert.assertTrue(completion.isFunction()); Assert.assertFalse(completion.isArray()); Assert.assertEquals("jQuery.fn", completion.getJsType()); Assert.assertEquals("jquery", completion.getOrigin()); Assert.assertNotNull(completion.getParameters()); Assert.assertEquals(1, completion.getParameters().size()); Parameter parameter = null; for (int i = 0; i < completion.getParameters().size(); i++) { parameter = completion.getParameters().get(i); switch (i) { case 0: Assert.assertEquals("selector", parameter.getName()); Assert.assertFalse(parameter.isRequired()); Assert.assertEquals("string", parameter.getType()); break; } } String[] allTypes = completion.expand(); Assert.assertNotNull(allTypes); Assert.assertEquals(1, allTypes.length); Assert.assertEquals("fn() -> jQuery.fn", allTypes[0]); } @Test public void jQuery() throws Exception { TernCompletionItem completion = new TernCompletionItem( new TernCompletionProposalRec( "jQuery", "fn(selector: string, context?: frameElement) -> jQuery.fn", "a doc", "an url", "jquery")); Assert.assertEquals("jQuery", completion.getName()); Assert.assertTrue(completion.isFunction()); Assert.assertFalse(completion.isArray()); Assert.assertEquals("jQuery.fn", completion.getJsType()); Assert.assertEquals("jquery", completion.getOrigin()); Assert.assertNotNull(completion.getParameters()); Assert.assertEquals(2, completion.getParameters().size()); Parameter parameter = null; for (int i = 0; i < completion.getParameters().size(); i++) { parameter = completion.getParameters().get(i); switch (i) { case 0: Assert.assertEquals("selector", parameter.getName()); Assert.assertTrue(parameter.isRequired()); Assert.assertEquals("string", parameter.getType()); break; case 1: Assert.assertEquals("context", parameter.getName()); Assert.assertFalse(parameter.isRequired()); Assert.assertEquals("frameElement", parameter.getType()); break; } } String[] allTypes = completion.expand(); Assert.assertNotNull(allTypes); Assert.assertEquals(1, allTypes.length); Assert.assertEquals("fn(selector: string) -> jQuery.fn", allTypes[0]); } @Test public void animate() throws Exception { TernCompletionItem completion = new TernCompletionItem( new TernCompletionProposalRec( "animate", "fn(properties: ?, duration?: number, easing?: string, complete?: fn()) -> jQuery.fn", "a doc", "an url", "jquery")); Assert.assertEquals("animate", completion.getName()); Assert.assertTrue(completion.isFunction()); Assert.assertFalse(completion.isArray()); Assert.assertEquals("jQuery.fn", completion.getJsType()); Assert.assertEquals("jquery", completion.getOrigin()); Assert.assertNotNull(completion.getParameters()); Assert.assertEquals(4, completion.getParameters().size()); Parameter parameter = null; for (int i = 0; i < completion.getParameters().size(); i++) { parameter = completion.getParameters().get(i); switch (i) { case 0: Assert.assertEquals("properties", parameter.getName()); Assert.assertTrue(parameter.isRequired()); Assert.assertEquals("?", parameter.getType()); break; case 1: Assert.assertEquals("duration", parameter.getName()); Assert.assertFalse(parameter.isRequired()); Assert.assertEquals("number", parameter.getType()); break; case 2: Assert.assertEquals("easing", parameter.getName()); Assert.assertFalse(parameter.isRequired()); Assert.assertEquals("string", parameter.getType()); break; case 3: Assert.assertEquals("complete", parameter.getName()); Assert.assertFalse(parameter.isRequired()); Assert.assertEquals("fn()", parameter.getType()); break; } } String[] allTypes = completion.expand(); Assert.assertNotNull(allTypes); Assert.assertEquals(7, allTypes.length); Assert.assertEquals("fn(properties: ?) -> jQuery.fn", allTypes[0]); Assert.assertEquals( "fn(properties: ?, duration?: number) -> jQuery.fn", allTypes[1]); Assert.assertEquals("fn(properties: ?, easing?: string) -> jQuery.fn", allTypes[2]); Assert.assertEquals("fn(properties: ?, complete?: fn()) -> jQuery.fn", allTypes[3]); Assert.assertEquals( "fn(properties: ?, duration?: number, easing?: string) -> jQuery.fn", allTypes[4]); Assert.assertEquals( "fn(properties: ?, duration?: number, complete?: fn()) -> jQuery.fn", allTypes[5]); Assert.assertEquals( "fn(properties: ?, easing?: string, complete?: fn()) -> jQuery.fn", allTypes[6]); } @Test public void uppercase() throws Exception { TernCompletionItem completion = new TernCompletionItem( new TernCompletionProposalRec("uppercase", "fn(string) -> string", "a doc", "an url", "angular")); Assert.assertEquals("uppercase", completion.getName()); Assert.assertTrue(completion.isFunction()); Assert.assertFalse(completion.isArray()); Assert.assertEquals("string", completion.getJsType()); Assert.assertEquals("angular", completion.getOrigin()); Assert.assertNotNull(completion.getParameters()); Assert.assertEquals(1, completion.getParameters().size()); Parameter parameter = null; for (int i = 0; i < completion.getParameters().size(); i++) { parameter = completion.getParameters().get(i); switch (i) { case 0: Assert.assertEquals("string", parameter.getName()); Assert.assertTrue(parameter.isRequired()); Assert.assertNull(parameter.getType()); break; } } String[] allTypes = completion.expand(); Assert.assertNotNull(allTypes); Assert.assertEquals(0, allTypes.length); } @Test public void map() throws Exception { TernCompletionItem completion = new TernCompletionItem( new TernCompletionProposalRec( "map", "fn(f: fn(elt: ?, i: number) -> ?, context?: ?) -> [!0.!ret]", "a doc", "an url", "ecma5")); Assert.assertEquals("map", completion.getName()); Assert.assertTrue(completion.isFunction()); Assert.assertFalse(completion.isArray()); Assert.assertEquals("[!0.!ret]", completion.getJsType()); Assert.assertEquals("ecma5", completion.getOrigin()); Assert.assertNotNull(completion.getParameters()); Assert.assertEquals(2, completion.getParameters().size()); Parameter parameter = null; for (int i = 0; i < completion.getParameters().size(); i++) { parameter = completion.getParameters().get(i); switch (i) { case 0: Assert.assertEquals("f", parameter.getName()); Assert.assertTrue(parameter.isRequired()); Assert.assertEquals("fn(elt:?,i:number)->?", parameter.getType()); break; case 1: Assert.assertEquals("context", parameter.getName()); Assert.assertFalse(parameter.isRequired()); Assert.assertEquals("?", parameter.getType()); break; } } String[] allTypes = completion.expand(); Assert.assertNotNull(allTypes); Assert.assertEquals(1, allTypes.length); Assert.assertEquals("fn(f: fn(elt:?,i:number)->?) -> [!0.!ret]", allTypes[0]); } @Test public void mix() throws Exception { TernCompletionItem completion = new TernCompletionItem( new TernCompletionProposalRec( "mix", "fn(receiver: fn(), supplier: fn(), overwrite?: bool, whitelist?: [string], mode?: number, merge?: bool) -> fn()", "a doc", "an url", "yui")); Assert.assertEquals("mix", completion.getName()); Assert.assertTrue(completion.isFunction()); Assert.assertFalse(completion.isArray()); Assert.assertEquals("fn()", completion.getJsType()); Assert.assertEquals("yui", completion.getOrigin()); Assert.assertNotNull(completion.getParameters()); Assert.assertEquals(6, completion.getParameters().size()); Parameter parameter = null; for (int i = 0; i < completion.getParameters().size(); i++) { parameter = completion.getParameters().get(i); switch (i) { case 0: Assert.assertEquals("receiver", parameter.getName()); Assert.assertTrue(parameter.isRequired()); Assert.assertEquals("fn()", parameter.getType()); break; case 1: Assert.assertEquals("supplier", parameter.getName()); Assert.assertTrue(parameter.isRequired()); Assert.assertEquals("fn()", parameter.getType()); break; case 2: Assert.assertEquals("overwrite", parameter.getName()); Assert.assertFalse(parameter.isRequired()); Assert.assertEquals("bool", parameter.getType()); break; case 3: Assert.assertEquals("whitelist", parameter.getName()); Assert.assertFalse(parameter.isRequired()); Assert.assertEquals("[string]", parameter.getType()); break; case 4: Assert.assertEquals("mode", parameter.getName()); Assert.assertFalse(parameter.isRequired()); Assert.assertEquals("number", parameter.getType()); break; case 5: Assert.assertEquals("merge", parameter.getName()); Assert.assertFalse(parameter.isRequired()); Assert.assertEquals("bool", parameter.getType()); break; } } String[] allTypes = completion.expand(); Assert.assertNotNull(allTypes); Assert.assertEquals(13, allTypes.length); Assert.assertEquals("fn(receiver: fn(), supplier: fn()) -> fn()", allTypes[0]); Assert.assertEquals( "fn(receiver: fn(), supplier: fn(), overwrite?: bool) -> fn()", allTypes[1]); Assert.assertEquals( "fn(receiver: fn(), supplier: fn(), whitelist?: [string]) -> fn()", allTypes[2]); Assert.assertEquals( "fn(receiver: fn(), supplier: fn(), mode?: number) -> fn()", allTypes[3]); Assert.assertEquals( "fn(receiver: fn(), supplier: fn(), merge?: bool) -> fn()", allTypes[4]); Assert.assertEquals( "fn(receiver: fn(), supplier: fn(), overwrite?: bool, whitelist?: [string]) -> fn()", allTypes[5]); Assert.assertEquals( "fn(receiver: fn(), supplier: fn(), overwrite?: bool, mode?: number) -> fn()", allTypes[6]); Assert.assertEquals( "fn(receiver: fn(), supplier: fn(), overwrite?: bool, merge?: bool) -> fn()", allTypes[7]); Assert.assertEquals( "fn(receiver: fn(), supplier: fn(), whitelist?: [string], mode?: number) -> fn()", allTypes[8]); Assert.assertEquals( "fn(receiver: fn(), supplier: fn(), whitelist?: [string], merge?: bool) -> fn()", allTypes[9]); Assert.assertEquals( "fn(receiver: fn(), supplier: fn(), mode?: number, merge?: bool) -> fn()", allTypes[10]); Assert.assertEquals( "fn(receiver: fn(), supplier: fn(), overwrite?: bool, whitelist?: [string], mode?: number) -> fn()", allTypes[11]); Assert.assertEquals( "fn(receiver: fn(), supplier: fn(), whitelist?: [string], mode?: number, merge?: bool) -> fn()", allTypes[12]); } }