blob: f9d8e2d0732b8eec818b6002fcc55eb9c6264dce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 NumberFour AG
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* NumberFour AG - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.javascript.core.tests.typeinfo;
import java.util.Collections;
import junit.framework.TestCase;
import org.eclipse.dltk.internal.javascript.ti.TypeSystemImpl;
import org.eclipse.dltk.javascript.typeinfo.GenericMethodTypeInferencer;
import org.eclipse.dltk.javascript.typeinfo.GenericMethodTypeInferencer.Capture;
import org.eclipse.dltk.javascript.typeinfo.ITypeSystem;
import org.eclipse.dltk.javascript.typeinfo.RTypes;
import org.eclipse.dltk.javascript.typeinfo.TypeUtil;
import org.eclipse.dltk.javascript.typeinfo.model.GenericMethod;
import org.eclipse.dltk.javascript.typeinfo.model.Parameter;
import org.eclipse.dltk.javascript.typeinfo.model.TypeInfoModelFactory;
import org.eclipse.dltk.javascript.typeinfo.model.TypeVariable;
@SuppressWarnings("restriction")
public class GenericMethodTypeInferenceTest extends TestCase {
private static final TypeInfoModelFactory TIMF = TypeInfoModelFactory.eINSTANCE;
private ITypeSystem typeSystem;
@Override
protected void setUp() throws Exception {
super.setUp();
this.typeSystem = new TypeSystemImpl();
}
public void testMap() {
final GenericMethod method = TIMF.createGenericMethod();
method.setName("test");
final TypeVariable key = TIMF.createTypeVariable();
key.setName("K");
method.getTypeParameters().add(key);
final TypeVariable value = TIMF.createTypeVariable();
value.setName("V");
method.getTypeParameters().add(value);
final Parameter p = TIMF.createParameter();
p.setName("param");
p.setType(TypeUtil.mapOf(TypeUtil.reference(key),
TypeUtil.reference(value)));
method.getParameters().add(p);
final GenericMethodTypeInferencer methodTypeInferencer = new GenericMethodTypeInferencer(
typeSystem, method);
final Capture capture = methodTypeInferencer.capture(p.getType(),
Collections.singletonList(RTypes.mapOf(RTypes.STRING,
RTypes.NUMBER)));
assertTrue(capture.isOK());
assertEquals(2, capture.getVariables().size());
assertTrue(capture.getVariables().contains(key));
assertEquals(RTypes.STRING, capture.getTypeOf(key).toRType());
assertTrue(capture.getVariables().contains(value));
assertEquals(RTypes.NUMBER, capture.getTypeOf(value).toRType());
}
}