/*
* $Id$
*
* SARL is an general-purpose agent programming language.
* More details on http://www.sarl.io
*
* Copyright (C) 2014-2017 the original authors or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.sarl.lang.tests.modules.actionprototype;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import com.google.inject.Inject;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.ECollections;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtend.core.xtend.XtendParameter;
import org.eclipse.xtext.common.types.JvmAnnotationReference;
import org.eclipse.xtext.common.types.JvmAnnotationType;
import org.eclipse.xtext.common.types.JvmFormalParameter;
import org.eclipse.xtext.common.types.JvmIdentifiableElement;
import org.eclipse.xtext.common.types.JvmTypeReference;
import org.eclipse.xtext.common.types.TypesPackage;
import org.eclipse.xtext.xbase.XExpression;
import org.junit.Before;
import org.junit.ComparisonFailure;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import org.mockito.ArgumentMatchers;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import io.sarl.lang.actionprototype.ActionParameterTypes;
import io.sarl.lang.actionprototype.ActionPrototype;
import io.sarl.lang.actionprototype.DefaultActionPrototypeProvider;
import io.sarl.lang.actionprototype.FormalParameterProvider;
import io.sarl.lang.actionprototype.InferredPrototype;
import io.sarl.lang.actionprototype.InferredStandardParameter;
import io.sarl.lang.actionprototype.InferredValuedParameter;
import io.sarl.lang.actionprototype.QualifiedActionName;
import io.sarl.lang.annotation.DefaultValue;
import io.sarl.lang.sarl.SarlAction;
import io.sarl.lang.sarl.SarlAgent;
import io.sarl.lang.sarl.SarlFormalParameter;
import io.sarl.lang.sarl.SarlScript;
import io.sarl.tests.api.AbstractSarlTest;
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@RunWith(Suite.class)
@SuiteClasses({
DefaultActionPrototypeProviderTest.NoDefaultValues.class,
DefaultActionPrototypeProviderTest.DefaultValues.class,
})
@SuppressWarnings("all")
public class DefaultActionPrototypeProviderTest extends AbstractSarlTest {
static int index;
static JvmIdentifiableElement createJvmIdentifiableElementStub() {
++index;
Resource resource = mock(Resource.class);
when(resource.getURI()).thenReturn(URI.createFileURI("/path/to/io/sarl/tests/Stub" + index + ".sarl"));
JvmIdentifiableElement container = mock(JvmIdentifiableElement.class);
when(container.eResource()).thenReturn(resource);
when(container.getQualifiedName()).thenReturn("io.sarl.tests.Stub" + index);
return container;
}
static void assertSameFormalParameters(List<? extends XtendParameter> expected, FormalParameterProvider actual) {
assertEquals(expected.size(), actual.getFormalParameterCount());
for (int i = 0; i < expected.size(); ++i) {
assertEquals(expected.get(i).getName(), actual.getFormalParameterName(i));
assertEquals(expected.get(i).getParameterType().getQualifiedName(),
actual.getFormalParameterType(i, false));
if (expected.get(i) instanceof SarlFormalParameter) {
assertSame(((SarlFormalParameter) expected.get(i)).getDefaultValue(),
actual.getFormalParameterDefaultValue(i));
} else {
assertNull(actual.getFormalParameterDefaultValue(i));
}
}
}
static void assertSameJvmFormalParameters(List<? extends JvmFormalParameter> expected, FormalParameterProvider actual) {
assertEquals(expected.size(), actual.getFormalParameterCount());
for (int i = 0; i < expected.size(); ++i) {
assertEquals(expected.get(i).getName(), actual.getFormalParameterName(i));
assertEquals(expected.get(i).getParameterType().getQualifiedName(),
actual.getFormalParameterType(i, false));
}
}
private static boolean matchPrototype(List<InferredStandardParameter> parameters, Object[] expected) {
int i = 0;
for (InferredStandardParameter parameter : parameters) {
if (i >= expected.length || !((Class<?>) expected[i]).isInstance(parameter)) {
return false;
}
++i;
if (i >= expected.length || !parameter.getType().getIdentifier().equals(expected[i])) {
return false;
}
++i;
if (i >= expected.length || !parameter.getName().equals(expected[i])) {
return false;
}
++i;
if (parameter instanceof InferredValuedParameter) {
String arg = ((InferredValuedParameter) parameter).getCallingArgument();
if (i >= expected.length || !arg.equals(expected[i])) {
return false;
}
++i;
}
}
return true;
}
private static void assertPrototypes(
List<InferredStandardParameter> parameters,
Collection<Object[]> expected,
Object[][] originalExpected) {
Iterator<Object[]> iterator = expected.iterator();
while (iterator.hasNext()) {
if (matchPrototype(parameters, iterator.next())) {
iterator.remove();
return;
}
}
throw new ComparisonFailure("Not same parameter prototype.",
parameters.toString(), toString(originalExpected));
}
private static String toString(Object[][] array) {
StringBuilder b = new StringBuilder();
b.append("[\n");
boolean addcoma = false;
for (Object[] d : array) {
if (addcoma) {
b.append(",\n");
} else {
addcoma = true;
}
b.append(toString(d));
}
b.append("]");
return b.toString();
}
private static String toString(Object[] array) {
StringBuilder b = new StringBuilder();
b.append(" [ ");
boolean addcoma = false;
for (Object o : array) {
if (addcoma) {
b.append(",\n ");
} else {
addcoma = true;
}
b.append(o==null ? "null" : o.toString());
}
b.append(" ]");
return b.toString();
}
static void assertPrototypes(
Map<ActionParameterTypes, List<InferredStandardParameter>> elements,
Object[]... expected) {
Collection<Object[]> expectedElements = new ArrayList<>();
for (int i = 0; i < expected.length; ++i) {
expectedElements.add(expected[i]);
}
for (List<InferredStandardParameter> parameters : elements.values()) {
assertPrototypes(parameters, expectedElements, expected);
}
if (!expectedElements.isEmpty()) {
throw new ComparisonFailure(
"Not same prototypes", expectedElements.toString(), elements.toString());
}
}
static void assertPrototypes(
List<InferredStandardParameter> elements,
Object... expected) {
if (!matchPrototype(elements, expected)) {
fail("Expected elements: " + toString(expected)
+ "; but is: " + elements.toString());
}
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
public static class NoDefaultValues extends AbstractSarlTest {
@Inject
private DefaultActionPrototypeProvider provider;
private FormalParameterProvider parameterProvider;
private EList<SarlFormalParameter> sarlParameters;
private EList<JvmFormalParameter> jvmParameters;
@Before
public void setUp() throws Exception {
this.provider.clear();
this.parameterProvider = mock(FormalParameterProvider.class);
when(this.parameterProvider.getFormalParameterCount()).thenReturn(3);
when(this.parameterProvider.getFormalParameterName(ArgumentMatchers.anyInt())).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
switch(((Integer) invocation.getArguments()[0]).intValue()) {
case 0:
return "firstarg";
case 1:
return "secondarg";
case 2:
return "thirdarg";
}
return null;
}
});
when(this.parameterProvider.getFormalParameterType(ArgumentMatchers.anyInt(),
ArgumentMatchers.anyBoolean())).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
switch(((Integer) invocation.getArguments()[0]).intValue()) {
case 0:
return "java.lang.String";
case 1:
return "float";
case 2:
return "java.lang.Object[]";
}
return null;
}
});
//
SarlFormalParameter p;
this.sarlParameters = new BasicEList<>();
p = mock(SarlFormalParameter.class);
when(p.getName()).thenReturn("firstarg");
JvmTypeReference ref = getType("java.lang.String");
when(p.getParameterType()).thenReturn(ref);
this.sarlParameters.add(p);
p = mock(SarlFormalParameter.class);
when(p.getName()).thenReturn("secondarg");
ref = getType("float");
when(p.getParameterType()).thenReturn(ref);
this.sarlParameters.add(p);
p = mock(SarlFormalParameter.class);
when(p.getName()).thenReturn("thirdarg");
ref = getType("java.lang.Object");
when(p.getParameterType()).thenReturn(ref);
this.sarlParameters.add(p);
//
JvmFormalParameter jp;
this.jvmParameters = new BasicEList<>();
jp = mock(JvmFormalParameter.class);
when(jp.getName()).thenReturn("firstarg");
ref = getType("java.lang.String");
when(jp.getParameterType()).thenReturn(ref);
when(jp.getAnnotations()).thenReturn(new BasicEList<JvmAnnotationReference>());
this.jvmParameters.add(jp);
jp = mock(JvmFormalParameter.class);
when(jp.getName()).thenReturn("secondarg");
ref = getType("float");
when(jp.getParameterType()).thenReturn(ref);
when(jp.getAnnotations()).thenReturn(new BasicEList<JvmAnnotationReference>());
this.jvmParameters.add(jp);
jp = mock(JvmFormalParameter.class);
when(jp.getName()).thenReturn("thirdarg");
ref = getType("java.lang.Object[]");
when(jp.getParameterType()).thenReturn(ref);
when(jp.getAnnotations()).thenReturn(new BasicEList<JvmAnnotationReference>());
this.jvmParameters.add(jp);
}
@Test
public void validateTypeOfVarArgInSarl() throws Exception {
SarlScript s = file("agent Foo { def fooFct(a : float, b : Object*) {} }");
SarlFormalParameter param = (SarlFormalParameter) ((SarlAction) ((SarlAgent) s.getXtendTypes().get(0))
.getMembers().get(0)).getParameters().get(1);
assertNotNull(param);
assertEquals("java.lang.Object", param.getParameterType().getIdentifier());
}
@Test
public void createQualifiedActionName() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
final String xtextResourceID = container.eResource().getURI().toString();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
assertNotNull(qn);
assertEquals("myfct", qn.getActionName());
// xtextResourceID == "file:/path/to/io/sarl/tests/Stub"+index+".sarl"
assertEquals(xtextResourceID + "/io.sarl.tests.Stub"+index, qn.getContainerID());
assertEquals(xtextResourceID + "/io.sarl.tests.Stub"+index+"#myfct", qn.toString());
}
@Test
public void createConstructorQualifiedName() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
final String xtextResourceID = container.eResource().getURI().toString();
QualifiedActionName qn = this.provider.createConstructorQualifiedName(container);
assertNotNull(qn);
assertEquals("new", qn.getActionName());
// xtextResourceID == "file:/path/to/io/sarl/tests/Stub"+index+".sarl"
assertEquals(xtextResourceID + "/io.sarl.tests.Stub"+index, qn.getContainerID());
assertEquals(xtextResourceID + "/io.sarl.tests.Stub"+index+"#new", qn.toString());
}
@Test
public void createParameterTypesForVoid() {
ActionParameterTypes key = this.provider.createParameterTypesForVoid();
assertNotNull(key);
assertFalse(key.isVarArg());
assertTrue(key.isVoid());
assertEquals("", key.toString());
assertTrue(key.isEmpty());
}
@Test
public void createParameterTypes_varArgs() {
ActionParameterTypes key = this.provider.createParameterTypes(true, this.parameterProvider);
assertNotNull(key);
assertTrue(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float,java.lang.Object*", key.toString());
assertEquals(3, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
assertEquals("java.lang.Object[]", key.get(2));
}
@Test
public void createParameterTypes_noVarArgs() {
ActionParameterTypes key = this.provider.createParameterTypes(false, this.parameterProvider);
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float,java.lang.Object[]", key.toString());
assertEquals(3, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
assertEquals("java.lang.Object[]", key.get(2));
}
@Test
public void createParameterTypesFromString_empty() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("");
assertNotNull(key);
assertFalse(key.isVarArg());
assertTrue(key.isVoid());
assertEquals("", key.toString());
assertTrue(key.isEmpty());
}
@Test
public void createParameterTypesFromString_void() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("void");
assertNotNull(key);
assertFalse(key.isVarArg());
assertTrue(key.isVoid());
assertEquals("", key.toString());
assertTrue(key.isEmpty());
}
@Test
public void createParameterTypesFromString_Void() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.Void");
assertNotNull(key);
assertFalse(key.isVarArg());
assertTrue(key.isVoid());
assertEquals("", key.toString());
assertTrue(key.isEmpty());
}
@Test
public void createParameterTypesFromString_String_noVargArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String");
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String", key.toString());
assertEquals(1, key.size());
assertEquals("java.lang.String", key.get(0));
}
@Test
public void createParameterTypesFromString_StringFloat_noVargArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String,float");
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float", key.toString());
assertEquals(2, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
}
@Test
public void createParameterTypesFromString_StringFloatObject_noVargArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String,float,java.lang.Object");
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float,java.lang.Object", key.toString());
assertEquals(3, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
assertEquals("java.lang.Object", key.get(2));
}
@Test
public void createParameterTypesFromString_String_vargArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String*");
assertNotNull(key);
assertTrue(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String*", key.toString());
assertEquals(1, key.size());
assertEquals("java.lang.String[]", key.get(0));
}
@Test
public void createParameterTypesFromString_StringFloat_vargArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String,float*");
assertNotNull(key);
assertTrue(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float*", key.toString());
assertEquals(2, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float[]", key.get(1));
}
@Test
public void createParameterTypesFromString_StringFloatObject_vargArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String,float,java.lang.Object*");
assertNotNull(key);
assertTrue(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float,java.lang.Object*", key.toString());
assertEquals(3, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
assertEquals("java.lang.Object[]", key.get(2));
}
@Test
public void createParameterTypesFromString_String_noVargArg_array() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String[]");
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String[]", key.toString());
assertEquals(1, key.size());
assertEquals("java.lang.String[]", key.get(0));
}
@Test
public void createParameterTypesFromString_StringFloat_noVargArg_array() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String,float[]");
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float[]", key.toString());
assertEquals(2, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float[]", key.get(1));
}
@Test
public void createParameterTypesFromString_StringFloatObject_noVargArg_array() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String,float,java.lang.Object[]");
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float,java.lang.Object[]", key.toString());
assertEquals(3, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
assertEquals("java.lang.Object[]", key.get(2));
}
@Test
public void createParameterTypesFromSarlModell_void() {
ActionParameterTypes key = this.provider.createParameterTypesFromSarlModel(false,
new BasicEList<SarlFormalParameter>());
assertNotNull(key);
assertFalse(key.isVarArg());
assertTrue(key.isVoid());
assertTrue(key.isEmpty());
}
@Test
public void createParameterTypesFromSarlModel_noVarArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromSarlModel(false, this.sarlParameters);
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float,java.lang.Object", key.toString());
assertEquals(3, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
assertEquals("java.lang.Object", key.get(2));
}
@Test
public void createParameterTypesFromSarlModel_varArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromSarlModel(true, this.sarlParameters);
assertNotNull(key);
assertTrue(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float,java.lang.Object*", key.toString());
assertEquals(3, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
assertEquals("java.lang.Object[]", key.get(2));
}
@Test
public void createParameterTypesFromJvmModel_void() {
ActionParameterTypes key = this.provider.createParameterTypesFromJvmModel(false, new BasicEList<JvmFormalParameter>());
assertNotNull(key);
assertFalse(key.isVarArg());
assertTrue(key.isVoid());
assertTrue(key.isEmpty());
}
@Test
public void createParameterTypesFromJvmModel_noVarArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromJvmModel(false, this.jvmParameters);
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float,java.lang.Object[]", key.toString());
assertEquals(3, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
assertEquals("java.lang.Object[]", key.get(2));
}
@Test
public void createParameterTypesFromJvmModel_varArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromJvmModel(true, this.jvmParameters);
assertNotNull(key);
assertTrue(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float,java.lang.Object*", key.toString());
assertEquals(3, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
assertEquals("java.lang.Object[]", key.get(2));
}
@Test
public void createActionPrototype_void() {
ActionParameterTypes params = this.provider.createParameterTypesFromJvmModel(true, new BasicEList<JvmFormalParameter>());
ActionPrototype prototype = this.provider.createActionPrototype("myfct", params);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName());
assertSame(params, prototype.getParametersTypes());
}
@Test
public void createActionPrototype_noVarArg() {
ActionParameterTypes params = this.provider.createParameterTypesFromJvmModel(false, this.jvmParameters);
ActionPrototype prototype = this.provider.createActionPrototype("myfct", params);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName());
assertSame(params, prototype.getParametersTypes());
}
@Test
public void createActionPrototype_varArg() {
ActionParameterTypes params = this.provider.createParameterTypesFromJvmModel(true, this.jvmParameters);
ActionPrototype prototype = this.provider.createActionPrototype("myfct", params);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName());
assertSame(params, prototype.getParametersTypes());
}
@Test
public void createPrototypeFromSarlModel_void() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
EList<SarlFormalParameter> params = new BasicEList<>();
//
InferredPrototype prototype = this.provider.createPrototypeFromSarlModel(qn, false, params);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName().getActionName());
assertSameFormalParameters(params, prototype.getFormalParameters());
assertEquals("", prototype.getFormalParameterTypes().toString());
assertContainsStrings(
prototype.getParameterTypeAlternatives(),
"");
assertTrue(prototype.getInferredParameterTypes().isEmpty());
}
@Test
public void createPrototypeFromSarlModel_noVarArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
//
InferredPrototype prototype = this.provider.createPrototypeFromSarlModel(qn, false, this.sarlParameters);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName().getActionName());
assertSameFormalParameters(this.sarlParameters, prototype.getFormalParameters());
assertEquals(
"java.lang.String,float,java.lang.Object",
prototype.getFormalParameterTypes().toString());
assertContainsStrings(
prototype.getParameterTypeAlternatives(),
"java.lang.String,float,java.lang.Object");
assertTrue(prototype.getInferredParameterTypes().isEmpty());
}
@Test
public void createPrototypeFromSarlModel_varArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
//
InferredPrototype prototype = this.provider.createPrototypeFromSarlModel(qn, true, this.sarlParameters);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName().getActionName());
assertSameFormalParameters(this.sarlParameters, prototype.getFormalParameters());
assertEquals("java.lang.String,float,java.lang.Object*", prototype.getFormalParameterTypes().toString());
assertContainsStrings(
prototype.getParameterTypeAlternatives(),
"java.lang.String,float,java.lang.Object*");
assertTrue(prototype.getInferredParameterTypes().isEmpty());
}
@Test
public void createPrototypeFromJvmModel_void() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
EList<JvmFormalParameter> params = new BasicEList<>();
//
InferredPrototype prototype = this.provider.createPrototypeFromJvmModel(qn, false, params);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName().getActionName());
assertSameJvmFormalParameters(params, prototype.getFormalParameters());
assertEquals("", prototype.getFormalParameterTypes().toString());
assertContainsStrings(
prototype.getParameterTypeAlternatives(),
"");
assertTrue(prototype.getInferredParameterTypes().isEmpty());
}
@Test
public void createPrototypeFromJvmModel_noVarArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
//
InferredPrototype prototype = this.provider.createPrototypeFromJvmModel(qn, false, this.jvmParameters);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName().getActionName());
assertSameJvmFormalParameters(this.jvmParameters, prototype.getFormalParameters());
assertEquals(
"java.lang.String,float,java.lang.Object[]",
prototype.getFormalParameterTypes().toString());
assertContainsStrings(
prototype.getParameterTypeAlternatives(),
"java.lang.String,float,java.lang.Object[]");
assertTrue(prototype.getInferredParameterTypes().isEmpty());
}
@Test
public void createPrototypeFromJvmModel_varArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
//
InferredPrototype prototype = this.provider.createPrototypeFromJvmModel(qn, true, this.jvmParameters);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName().getActionName());
assertSameJvmFormalParameters(this.jvmParameters, prototype.getFormalParameters());
assertEquals("java.lang.String,float,java.lang.Object*", prototype.getFormalParameterTypes().toString());
assertContainsStrings(
prototype.getParameterTypeAlternatives(),
"java.lang.String,float,java.lang.Object*");
assertTrue(prototype.getInferredParameterTypes().isEmpty());
}
@Test
public void getPrototypesQualifiedActionName_noCreatedPrototype() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
//
Iterable<InferredPrototype> iterable = this.provider.getPrototypes(qn);
assertNotNull(iterable);
assertFalse(iterable.iterator().hasNext());
}
@Test
public void getPrototypesQualifiedActionName_createdPrototype_noVarArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
InferredPrototype expected = this.provider.createPrototypeFromSarlModel(qn, false, this.sarlParameters);
//
Iterable<InferredPrototype> iterable = this.provider.getPrototypes(qn);
assertNotNull(iterable);
Iterator<InferredPrototype> iterator = iterable.iterator();
assertTrue(iterator.hasNext());
InferredPrototype prototype = iterator.next();
assertSame(expected, prototype);
assertFalse(iterator.hasNext());
}
@Test
public void getPrototypesQualifiedActionName_createdPrototype_varArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
InferredPrototype expected = this.provider.createPrototypeFromSarlModel(qn, true, this.sarlParameters);
//
Iterable<InferredPrototype> iterable = this.provider.getPrototypes(qn);
assertNotNull(iterable);
Iterator<InferredPrototype> iterator = iterable.iterator();
assertTrue(iterator.hasNext());
InferredPrototype prototype = iterator.next();
assertSame(expected, prototype);
assertFalse(iterator.hasNext());
}
@Test
public void getPrototypesQualifiedActionNameActionParameterTypes_noCreatedPrototype() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
ActionParameterTypes types = this.provider.createParameterTypesFromSarlModel(false, this.sarlParameters);
//
InferredPrototype prototype = this.provider.getPrototypes(qn, types);
assertNull(prototype);
}
@Test
public void getPrototypesQualifiedActionNameActionParameterTypes_createdPrototype_noVarArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
ActionParameterTypes types = this.provider.createParameterTypesFromSarlModel(false, this.sarlParameters);
InferredPrototype expected = this.provider.createPrototypeFromSarlModel(qn, false, this.sarlParameters);
//
InferredPrototype prototype = this.provider.getPrototypes(qn, types);
assertNotNull(prototype);
assertSame(expected, prototype);
}
@Test
public void getPrototypesQualifiedActionNameActionParameterTypes_createdPrototype_varArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
ActionParameterTypes types = this.provider.createParameterTypesFromSarlModel(true, this.sarlParameters);
InferredPrototype expected = this.provider.createPrototypeFromSarlModel(qn, true, this.sarlParameters);
//
InferredPrototype prototype = this.provider.getPrototypes(qn, types);
assertNotNull(prototype);
assertSame(expected, prototype);
}
@Test
public void resetPrototypes_noCreatedProtype() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
ActionParameterTypes types = this.provider.createParameterTypesFromSarlModel(false, this.sarlParameters);
//
assertFalse(this.provider.getPrototypes(qn).iterator().hasNext());
this.provider.clear(container);
assertFalse(this.provider.getPrototypes(qn).iterator().hasNext());
}
@Test
public void resetPrototypes_createdProtype_noVarArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
ActionParameterTypes types = this.provider.createParameterTypesFromSarlModel(false, this.sarlParameters);
InferredPrototype prototype = this.provider.createPrototypeFromSarlModel(qn, false, this.sarlParameters);
//
assertTrue(this.provider.getPrototypes(qn).iterator().hasNext());
this.provider.clear(container);
assertFalse(this.provider.getPrototypes(qn).iterator().hasNext());
}
@Test
public void resetPrototypes_createdProtype_varArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
ActionParameterTypes types = this.provider.createParameterTypesFromSarlModel(true, this.sarlParameters);
InferredPrototype prototype = this.provider.createPrototypeFromSarlModel(qn, true, this.sarlParameters);
//
assertTrue(this.provider.getPrototypes(qn).iterator().hasNext());
this.provider.clear(container);
assertFalse(this.provider.getPrototypes(qn).iterator().hasNext());
}
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
public static class DefaultValues extends AbstractSarlTest {
@Inject
private DefaultActionPrototypeProvider provider;
private FormalParameterProvider parameterProvider;
private EList<SarlFormalParameter> sarlParameters;
private EList<JvmFormalParameter> jvmParameters;
@Before
public void setUp() throws Exception {
this.provider.clear();
this.parameterProvider = mock(FormalParameterProvider.class);
when(this.parameterProvider.getFormalParameterCount()).thenReturn(4);
when(this.parameterProvider.getFormalParameterName(ArgumentMatchers.anyInt())).thenAnswer((invocation) -> {
switch(((Integer) invocation.getArguments()[0]).intValue()) {
case 0:
return "firstarg";
case 1:
return "secondarg";
case 2:
return "thirdarg";
case 3:
return "fourtharg";
}
return null;
});
when(this.parameterProvider.getFormalParameterType(ArgumentMatchers.anyInt(),
ArgumentMatchers.anyBoolean())).thenAnswer((invocation) -> {
switch(((Integer) invocation.getArguments()[0]).intValue()) {
case 0:
return "java.lang.String";
case 1:
return "int";
case 2:
return "float";
case 3:
return "java.lang.Object[]";
}
return null;
});
when(this.parameterProvider.hasFormalParameterDefaultValue(ArgumentMatchers.anyInt())).thenAnswer((invocation) -> {
switch(((Integer) invocation.getArguments()[0]).intValue()) {
case 0:
case 2:
return Boolean.TRUE;
}
return Boolean.FALSE;
});
//
SarlFormalParameter p;
this.sarlParameters = new BasicEList<>();
p = mock(SarlFormalParameter.class);
when(p.getName()).thenReturn("firstarg");
JvmTypeReference ref = getType("java.lang.String");
when(p.getParameterType()).thenReturn(ref);
when(p.getDefaultValue()).thenReturn(mock(XExpression.class));
this.sarlParameters.add(p);
p = mock(SarlFormalParameter.class);
when(p.getName()).thenReturn("secondarg");
ref = getType("int");
when(p.getParameterType()).thenReturn(ref);
this.sarlParameters.add(p);
p = mock(SarlFormalParameter.class);
when(p.getName()).thenReturn("thirdarg");
ref = getType("float");
when(p.getParameterType()).thenReturn(ref);
when(p.getDefaultValue()).thenReturn(mock(XExpression.class));
this.sarlParameters.add(p);
p = mock(SarlFormalParameter.class);
when(p.getName()).thenReturn("fourtharg");
ref = getType("java.lang.Object");
when(p.getParameterType()).thenReturn(ref);
this.sarlParameters.add(p);
//
JvmFormalParameter jp;
this.jvmParameters = new BasicEList<>();
jp = mock(JvmFormalParameter.class);
when(jp.getName()).thenReturn("firstarg");
ref = getType("java.lang.String");
when(jp.getParameterType()).thenReturn(ref);
JvmAnnotationType annotationType = mock(JvmAnnotationType.class);
when(annotationType.getQualifiedName()).thenReturn(DefaultValue.class.getName());
JvmAnnotationReference annotationRef = mock(JvmAnnotationReference.class);
when(annotationRef.getAnnotation()).thenReturn(annotationType);
when(jp.getAnnotations()).thenReturn(ECollections.singletonEList(annotationRef));
when(jp.eIsSet(ArgumentMatchers.any())).thenAnswer((invocation) -> {
if (Objects.equals(TypesPackage.Literals.JVM_ANNOTATION_TARGET__ANNOTATIONS,
invocation.getArguments()[0])) {
return Boolean.TRUE;
}
return Boolean.FALSE;
});
this.jvmParameters.add(jp);
jp = mock(JvmFormalParameter.class);
when(jp.getName()).thenReturn("secondarg");
ref = getType("int");
when(jp.getParameterType()).thenReturn(ref);
when(jp.getAnnotations()).thenReturn(ECollections.<JvmAnnotationReference>emptyEList());
this.jvmParameters.add(jp);
jp = mock(JvmFormalParameter.class);
when(jp.getName()).thenReturn("thirdarg");
ref = getType("float");
when(jp.getParameterType()).thenReturn(ref);
annotationType = mock(JvmAnnotationType.class);
when(annotationType.getQualifiedName()).thenReturn(DefaultValue.class.getName());
annotationRef = mock(JvmAnnotationReference.class);
when(annotationRef.getAnnotation()).thenReturn(annotationType);
when(jp.getAnnotations()).thenReturn(ECollections.singletonEList(annotationRef));
when(jp.eIsSet(ArgumentMatchers.any())).thenAnswer((invocation) -> {
if (Objects.equals(TypesPackage.Literals.JVM_ANNOTATION_TARGET__ANNOTATIONS,
invocation.getArguments()[0])) {
return Boolean.TRUE;
}
return Boolean.FALSE;
});
this.jvmParameters.add(jp);
jp = mock(JvmFormalParameter.class);
when(jp.getName()).thenReturn("fourtharg");
ref = getType("java.lang.Object[]");
when(jp.getParameterType()).thenReturn(ref);
when(jp.getAnnotations()).thenReturn(ECollections.<JvmAnnotationReference>emptyEList());
this.jvmParameters.add(jp);
}
@Test
public void validateTypeOfVarArgInSarl() throws Exception {
SarlScript s = file("agent Foo { def fooFct(a : float, b : Object*) {} }");
SarlFormalParameter param = (SarlFormalParameter) ((SarlAction) ((SarlAgent) s.getXtendTypes().get(0))
.getMembers().get(0)).getParameters().get(1);
assertNotNull(param);
assertEquals("java.lang.Object", param.getParameterType().getIdentifier());
}
@Test
public void createQualifiedActionName() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
final String xtextResourceID = container.eResource().getURI().toString();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
assertNotNull(qn);
assertEquals("myfct", qn.getActionName());
//xtextResourceID == "file:/path/to/io/sarl/tests/Stub"+index+".sarl"
assertEquals(xtextResourceID + "/io.sarl.tests.Stub"+index, qn.getContainerID());
assertEquals(xtextResourceID + "/io.sarl.tests.Stub"+index+"#myfct", qn.toString());
}
@Test
public void createConstructorQualifiedName() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
final String xtextResourceID = container.eResource().getURI().toString();
QualifiedActionName qn = this.provider.createConstructorQualifiedName(container);
assertNotNull(qn);
assertEquals("new", qn.getActionName());
//xtextResourceID == "file:/path/to/io/sarl/tests/Stub"+index+".sarl"
assertEquals(xtextResourceID + "/io.sarl.tests.Stub"+index, qn.getContainerID());
assertEquals(xtextResourceID + "/io.sarl.tests.Stub"+index+"#new", qn.toString());
}
@Test
public void createParameterTypesForVoid() {
ActionParameterTypes key = this.provider.createParameterTypesForVoid();
assertNotNull(key);
assertFalse(key.isVarArg());
assertTrue(key.isVoid());
assertEquals("", key.toString());
assertTrue(key.isEmpty());
}
@Test
public void createParameterTypes_varArgs() {
ActionParameterTypes key = this.provider.createParameterTypes(true, this.parameterProvider);
assertNotNull(key);
assertTrue(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,int,float,java.lang.Object*", key.toString());
assertEquals(4, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("int", key.get(1));
assertEquals("float", key.get(2));
assertEquals("java.lang.Object[]", key.get(3));
}
@Test
public void createParameterTypes_noVarArgs() {
ActionParameterTypes key = this.provider.createParameterTypes(false, this.parameterProvider);
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,int,float,java.lang.Object[]", key.toString());
assertEquals(4, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("int", key.get(1));
assertEquals("float", key.get(2));
assertEquals("java.lang.Object[]", key.get(3));
}
@Test
public void createParameterTypesFromString_empty() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("");
assertNotNull(key);
assertFalse(key.isVarArg());
assertTrue(key.isVoid());
assertEquals("", key.toString());
assertTrue(key.isEmpty());
}
@Test
public void createParameterTypesFromString_void() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("void");
assertNotNull(key);
assertFalse(key.isVarArg());
assertTrue(key.isVoid());
assertEquals("", key.toString());
assertTrue(key.isEmpty());
}
@Test
public void createParameterTypesFromString_Void() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.Void");
assertNotNull(key);
assertFalse(key.isVarArg());
assertTrue(key.isVoid());
assertEquals("", key.toString());
assertTrue(key.isEmpty());
}
@Test
public void createParameterTypesFromString_String_noVargArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String");
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String", key.toString());
assertEquals(1, key.size());
assertEquals("java.lang.String", key.get(0));
}
@Test
public void createParameterTypesFromString_StringFloat_noVargArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String,float");
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float", key.toString());
assertEquals(2, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
}
@Test
public void createParameterTypesFromString_StringFloatObject_noVargArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String,float,java.lang.Object");
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float,java.lang.Object", key.toString());
assertEquals(3, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
assertEquals("java.lang.Object", key.get(2));
}
@Test
public void createParameterTypesFromString_String_vargArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String*");
assertNotNull(key);
assertTrue(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String*", key.toString());
assertEquals(1, key.size());
assertEquals("java.lang.String[]", key.get(0));
}
@Test
public void createParameterTypesFromString_StringFloat_vargArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String,float*");
assertNotNull(key);
assertTrue(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float*", key.toString());
assertEquals(2, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float[]", key.get(1));
}
@Test
public void createParameterTypesFromString_StringFloatObject_vargArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String,float,java.lang.Object*");
assertNotNull(key);
assertTrue(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float,java.lang.Object*", key.toString());
assertEquals(3, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
assertEquals("java.lang.Object[]", key.get(2));
}
@Test
public void createParameterTypesFromString_String_noVargArg_array() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String[]");
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String[]", key.toString());
assertEquals(1, key.size());
assertEquals("java.lang.String[]", key.get(0));
}
@Test
public void createParameterTypesFromString_StringFloat_noVargArg_array() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String,float[]");
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float[]", key.toString());
assertEquals(2, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float[]", key.get(1));
}
@Test
public void createParameterTypesFromString_StringFloatObject_noVargArg_array() {
ActionParameterTypes key = this.provider.createParameterTypesFromString("java.lang.String,float,java.lang.Object[]");
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,float,java.lang.Object[]", key.toString());
assertEquals(3, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("float", key.get(1));
assertEquals("java.lang.Object[]", key.get(2));
}
@Test
public void createParameterTypesFromSarlModell_void() {
ActionParameterTypes key = this.provider.createParameterTypesFromSarlModel(false,
new BasicEList<SarlFormalParameter>());
assertNotNull(key);
assertFalse(key.isVarArg());
assertTrue(key.isVoid());
assertTrue(key.isEmpty());
}
@Test
public void createParameterTypesFromSarlModel_noVarArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromSarlModel(false, this.sarlParameters);
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,int,float,java.lang.Object", key.toString());
assertEquals(4, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("int", key.get(1));
assertEquals("float", key.get(2));
assertEquals("java.lang.Object", key.get(3));
}
@Test
public void createParameterTypesFromSarlModel_varArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromSarlModel(true, this.sarlParameters);
assertNotNull(key);
assertTrue(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,int,float,java.lang.Object*", key.toString());
assertEquals(4, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("int", key.get(1));
assertEquals("float", key.get(2));
assertEquals("java.lang.Object[]", key.get(3));
}
@Test
public void createParameterTypesFromJvmModel_void() {
ActionParameterTypes key = this.provider.createParameterTypesFromJvmModel(false, new BasicEList<JvmFormalParameter>());
assertNotNull(key);
assertFalse(key.isVarArg());
assertTrue(key.isVoid());
assertTrue(key.isEmpty());
}
@Test
public void createParameterTypesFromJvmModel_noVarArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromJvmModel(false, this.jvmParameters);
assertNotNull(key);
assertFalse(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,int,float,java.lang.Object[]", key.toString());
assertEquals(4, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("int", key.get(1));
assertEquals("float", key.get(2));
assertEquals("java.lang.Object[]", key.get(3));
}
@Test
public void createParameterTypesFromJvmModel_varArg() {
ActionParameterTypes key = this.provider.createParameterTypesFromJvmModel(true, this.jvmParameters);
assertNotNull(key);
assertTrue(key.isVarArg());
assertFalse(key.isVoid());
assertEquals("java.lang.String,int,float,java.lang.Object*", key.toString());
assertEquals(4, key.size());
assertEquals("java.lang.String", key.get(0));
assertEquals("int", key.get(1));
assertEquals("float", key.get(2));
assertEquals("java.lang.Object[]", key.get(3));
}
@Test
public void createActionPrototype_void() {
ActionParameterTypes params = this.provider.createParameterTypesFromJvmModel(true, new BasicEList<JvmFormalParameter>());
ActionPrototype prototype = this.provider.createActionPrototype("myfct", params);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName());
assertSame(params, prototype.getParametersTypes());
}
@Test
public void createActionPrototype_noVarArg() {
ActionParameterTypes params = this.provider.createParameterTypesFromJvmModel(false, this.jvmParameters);
ActionPrototype prototype = this.provider.createActionPrototype("myfct", params);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName());
assertSame(params, prototype.getParametersTypes());
}
@Test
public void createActionPrototype_varArg() {
ActionParameterTypes params = this.provider.createParameterTypesFromJvmModel(true, this.jvmParameters);
ActionPrototype prototype = this.provider.createActionPrototype("myfct", params);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName());
assertSame(params, prototype.getParametersTypes());
}
@Test
public void createPrototypeFromSarlModel_void() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
EList<SarlFormalParameter> params = new BasicEList<>();
//
InferredPrototype prototype = this.provider.createPrototypeFromSarlModel(qn, false, params);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName().getActionName());
assertSameFormalParameters(params, prototype.getFormalParameters());
assertEquals("", prototype.getFormalParameterTypes().toString());
assertContainsStrings(
prototype.getParameterTypeAlternatives(),
"");
assertTrue(prototype.getInferredParameterTypes().isEmpty());
}
@Test
public void createPrototypeFromSarlModel_noVarArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
//
InferredPrototype prototype = this.provider.createPrototypeFromSarlModel(qn, false, this.sarlParameters);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName().getActionName());
assertSameFormalParameters(this.sarlParameters, prototype.getFormalParameters());
assertEquals(
"java.lang.String,int,float,java.lang.Object",
prototype.getFormalParameterTypes().toString());
assertContainsStrings(
prototype.getParameterTypeAlternatives(),
"java.lang.String,int,float,java.lang.Object",
"java.lang.String,int,java.lang.Object",
"int,float,java.lang.Object",
"int,java.lang.Object");
assertPrototypes(prototype.getOriginalParameterTypes(),
InferredStandardParameter.class,
"java.lang.String",
"firstarg",
InferredStandardParameter.class,
"int",
"secondarg",
InferredStandardParameter.class,
"float",
"thirdarg",
InferredStandardParameter.class,
"java.lang.Object",
"fourtharg");
assertPrototypes(prototype.getInferredParameterTypes(),
new Object[] {
InferredStandardParameter.class,
"java.lang.String",
"firstarg",
InferredStandardParameter.class,
"int",
"secondarg",
InferredValuedParameter.class,
"float",
"thirdarg",
"io.sarl.tests.Stub" + index + "#MYFCT_1",
InferredStandardParameter.class,
"java.lang.Object",
"fourtharg",
},
new Object[] {
InferredValuedParameter.class,
"java.lang.String",
"firstarg",
"io.sarl.tests.Stub" + index + "#MYFCT_0",
InferredStandardParameter.class,
"int",
"secondarg",
InferredStandardParameter.class,
"float",
"thirdarg",
InferredStandardParameter.class,
"java.lang.Object",
"fourtharg",
},
new Object[] {
InferredValuedParameter.class,
"java.lang.String",
"firstarg",
"io.sarl.tests.Stub" + index + "#MYFCT_0",
InferredStandardParameter.class,
"int",
"secondarg",
InferredValuedParameter.class,
"float",
"thirdarg",
"io.sarl.tests.Stub" + index + "#MYFCT_1",
InferredStandardParameter.class,
"java.lang.Object",
"fourtharg",
});
}
@Test
public void createPrototypeFromSarlModel_varArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
//
InferredPrototype prototype = this.provider.createPrototypeFromSarlModel(qn, true, this.sarlParameters);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName().getActionName());
assertSameFormalParameters(this.sarlParameters, prototype.getFormalParameters());
assertEquals("java.lang.String,int,float,java.lang.Object*", prototype.getFormalParameterTypes().toString());
assertContainsStrings(
prototype.getParameterTypeAlternatives(),
"java.lang.String,int,float,java.lang.Object*",
"java.lang.String,int,java.lang.Object*",
"int,float,java.lang.Object*",
"int,java.lang.Object*");
assertPrototypes(prototype.getOriginalParameterTypes(),
InferredStandardParameter.class,
"java.lang.String",
"firstarg",
InferredStandardParameter.class,
"int",
"secondarg",
InferredStandardParameter.class,
"float",
"thirdarg",
InferredStandardParameter.class,
"java.lang.Object[]",
"fourtharg");
assertPrototypes(prototype.getInferredParameterTypes(),
new Object[] {
InferredStandardParameter.class,
"java.lang.String",
"firstarg",
InferredStandardParameter.class,
"int",
"secondarg",
InferredValuedParameter.class,
"float",
"thirdarg",
"io.sarl.tests.Stub" + index + "#MYFCT_1",
InferredStandardParameter.class,
"java.lang.Object[]",
"fourtharg",
},
new Object[] {
InferredValuedParameter.class,
"java.lang.String",
"firstarg",
"io.sarl.tests.Stub" + index + "#MYFCT_0",
InferredStandardParameter.class,
"int",
"secondarg",
InferredStandardParameter.class,
"float",
"thirdarg",
InferredStandardParameter.class,
"java.lang.Object[]",
"fourtharg",
},
new Object[] {
InferredValuedParameter.class,
"java.lang.String",
"firstarg",
"io.sarl.tests.Stub" + index + "#MYFCT_0",
InferredStandardParameter.class,
"int",
"secondarg",
InferredValuedParameter.class,
"float",
"thirdarg",
"io.sarl.tests.Stub" + index + "#MYFCT_1",
InferredStandardParameter.class,
"java.lang.Object[]",
"fourtharg",
});
}
@Test
public void createPrototypeFromJvmModel_void() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
EList<JvmFormalParameter> params = new BasicEList<>();
//
InferredPrototype prototype = this.provider.createPrototypeFromJvmModel(qn, false, params);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName().getActionName());
assertSameJvmFormalParameters(params, prototype.getFormalParameters());
assertEquals("", prototype.getFormalParameterTypes().toString());
assertContainsStrings(
prototype.getParameterTypeAlternatives(),
"");
assertTrue(prototype.getInferredParameterTypes().isEmpty());
}
@Test
public void createPrototypeFromJvmModel_noVarArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
//
InferredPrototype prototype = this.provider.createPrototypeFromJvmModel(qn, false, this.jvmParameters);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName().getActionName());
assertSameJvmFormalParameters(this.jvmParameters, prototype.getFormalParameters());
assertEquals(
"java.lang.String,int,float,java.lang.Object[]",
prototype.getFormalParameterTypes().toString());
assertContainsStrings(
prototype.getParameterTypeAlternatives(),
"java.lang.String,int,float,java.lang.Object[]",
"java.lang.String,int,java.lang.Object[]",
"int,float,java.lang.Object[]",
"int,java.lang.Object[]");
assertPrototypes(prototype.getOriginalParameterTypes(),
InferredStandardParameter.class,
"java.lang.String",
"firstarg",
InferredStandardParameter.class,
"int",
"secondarg",
InferredStandardParameter.class,
"float",
"thirdarg",
InferredStandardParameter.class,
"java.lang.Object[]",
"fourtharg");
assertPrototypes(prototype.getInferredParameterTypes(),
new Object[] {
InferredStandardParameter.class,
"java.lang.String",
"firstarg",
InferredStandardParameter.class,
"int",
"secondarg",
InferredValuedParameter.class,
"float",
"thirdarg",
"io.sarl.tests.Stub" + index + "#MYFCT_1",
InferredStandardParameter.class,
"java.lang.Object[]",
"fourtharg",
},
new Object[] {
InferredValuedParameter.class,
"java.lang.String",
"firstarg",
"io.sarl.tests.Stub" + index + "#MYFCT_0",
InferredStandardParameter.class,
"int",
"secondarg",
InferredStandardParameter.class,
"float",
"thirdarg",
InferredStandardParameter.class,
"java.lang.Object[]",
"fourtharg",
},
new Object[] {
InferredValuedParameter.class,
"java.lang.String",
"firstarg",
"io.sarl.tests.Stub" + index + "#MYFCT_0",
InferredStandardParameter.class,
"int",
"secondarg",
InferredValuedParameter.class,
"float",
"thirdarg",
"io.sarl.tests.Stub" + index + "#MYFCT_1",
InferredStandardParameter.class,
"java.lang.Object[]",
"fourtharg",
});
}
@Test
public void createPrototypeFromJvmModel_varArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
//
InferredPrototype prototype = this.provider.createPrototypeFromJvmModel(qn, true, this.jvmParameters);
assertNotNull(prototype);
assertEquals("myfct", prototype.getActionName().getActionName());
assertSameJvmFormalParameters(this.jvmParameters, prototype.getFormalParameters());
assertEquals(
"java.lang.String,int,float,java.lang.Object*",
prototype.getFormalParameterTypes().toString());
assertContainsStrings(
prototype.getParameterTypeAlternatives(),
"java.lang.String,int,float,java.lang.Object*",
"java.lang.String,int,java.lang.Object*",
"int,float,java.lang.Object*",
"int,java.lang.Object*");
assertPrototypes(prototype.getOriginalParameterTypes(),
InferredStandardParameter.class,
"java.lang.String",
"firstarg",
InferredStandardParameter.class,
"int",
"secondarg",
InferredStandardParameter.class,
"float",
"thirdarg",
InferredStandardParameter.class,
"java.lang.Object[]",
"fourtharg");
assertPrototypes(prototype.getInferredParameterTypes(),
new Object[] {
InferredStandardParameter.class,
"java.lang.String",
"firstarg",
InferredStandardParameter.class,
"int",
"secondarg",
InferredValuedParameter.class,
"float",
"thirdarg",
"io.sarl.tests.Stub" + index + "#MYFCT_1",
InferredStandardParameter.class,
"java.lang.Object[]",
"fourtharg",
},
new Object[] {
InferredValuedParameter.class,
"java.lang.String",
"firstarg",
"io.sarl.tests.Stub" + index + "#MYFCT_0",
InferredStandardParameter.class,
"int",
"secondarg",
InferredStandardParameter.class,
"float",
"thirdarg",
InferredStandardParameter.class,
"java.lang.Object[]",
"fourtharg",
},
new Object[] {
InferredValuedParameter.class,
"java.lang.String",
"firstarg",
"io.sarl.tests.Stub" + index + "#MYFCT_0",
InferredStandardParameter.class,
"int",
"secondarg",
InferredValuedParameter.class,
"float",
"thirdarg",
"io.sarl.tests.Stub" + index + "#MYFCT_1",
InferredStandardParameter.class,
"java.lang.Object[]",
"fourtharg",
});
}
@Test
public void getPrototypesQualifiedActionName_noCreatedPrototype() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
//
Iterable<InferredPrototype> iterable = this.provider.getPrototypes(qn);
assertNotNull(iterable);
assertFalse(iterable.iterator().hasNext());
}
@Test
public void getPrototypesQualifiedActionName_createdPrototype_noVarArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
InferredPrototype expected = this.provider.createPrototypeFromSarlModel(qn, false, this.sarlParameters);
//
Iterable<InferredPrototype> iterable = this.provider.getPrototypes(qn);
assertNotNull(iterable);
Iterator<InferredPrototype> iterator = iterable.iterator();
assertTrue(iterator.hasNext());
InferredPrototype prototype = iterator.next();
assertSame(expected, prototype);
assertFalse(iterator.hasNext());
}
@Test
public void getPrototypesQualifiedActionName_createdPrototype_varArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
InferredPrototype expected = this.provider.createPrototypeFromSarlModel(qn, true, this.sarlParameters);
//
Iterable<InferredPrototype> iterable = this.provider.getPrototypes(qn);
assertNotNull(iterable);
Iterator<InferredPrototype> iterator = iterable.iterator();
assertTrue(iterator.hasNext());
InferredPrototype prototype = iterator.next();
assertSame(expected, prototype);
assertFalse(iterator.hasNext());
}
@Test
public void getPrototypesQualifiedActionNameActionParameterTypes_noCreatedPrototype() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
ActionParameterTypes types = this.provider.createParameterTypesFromSarlModel(false, this.sarlParameters);
//
InferredPrototype prototype = this.provider.getPrototypes(qn, types);
assertNull(prototype);
}
@Test
public void getPrototypesQualifiedActionNameActionParameterTypes_createdPrototype_noVarArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
ActionParameterTypes types = this.provider.createParameterTypesFromSarlModel(false, this.sarlParameters);
InferredPrototype expected = this.provider.createPrototypeFromSarlModel(qn, false, this.sarlParameters);
//
InferredPrototype prototype = this.provider.getPrototypes(qn, types);
assertNotNull(prototype);
assertSame(expected, prototype);
}
@Test
public void getPrototypesQualifiedActionNameActionParameterTypes_createdPrototype_varArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
ActionParameterTypes types = this.provider.createParameterTypesFromSarlModel(true, this.sarlParameters);
InferredPrototype expected = this.provider.createPrototypeFromSarlModel(qn, true, this.sarlParameters);
//
InferredPrototype prototype = this.provider.getPrototypes(qn, types);
assertNotNull(prototype);
assertSame(expected, prototype);
}
@Test
public void resetPrototypes_noCreatedProtype() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
ActionParameterTypes types = this.provider.createParameterTypesFromSarlModel(false, this.sarlParameters);
//
assertFalse(this.provider.getPrototypes(qn).iterator().hasNext());
this.provider.clear(container);
assertFalse(this.provider.getPrototypes(qn).iterator().hasNext());
}
@Test
public void resetPrototypes_createdProtype_noVarArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
ActionParameterTypes types = this.provider.createParameterTypesFromSarlModel(false, this.sarlParameters);
InferredPrototype prototype = this.provider.createPrototypeFromSarlModel(qn, false, this.sarlParameters);
//
assertTrue(this.provider.getPrototypes(qn).iterator().hasNext());
this.provider.clear(container);
assertFalse(this.provider.getPrototypes(qn).iterator().hasNext());
}
@Test
public void resetPrototypes_createdProtype_varArg() {
JvmIdentifiableElement container = createJvmIdentifiableElementStub();
QualifiedActionName qn = this.provider.createQualifiedActionName(container, "myfct");
ActionParameterTypes types = this.provider.createParameterTypesFromSarlModel(true, this.sarlParameters);
InferredPrototype prototype = this.provider.createPrototypeFromSarlModel(qn, true, this.sarlParameters);
//
assertTrue(this.provider.getPrototypes(qn).iterator().hasNext());
this.provider.clear(container);
assertFalse(this.provider.getPrototypes(qn).iterator().hasNext());
}
}
}