/* * 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.general.parsing.general; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import org.eclipse.xtext.diagnostics.Diagnostic; import org.eclipse.xtext.xbase.XNumberLiteral; import org.eclipse.xtext.xbase.XStringLiteral; import org.eclipse.xtext.xbase.XbasePackage; import org.eclipse.xtext.xbase.validation.IssueCodes; import org.junit.Test; import io.sarl.lang.sarl.SarlAction; import io.sarl.lang.sarl.SarlAgent; import io.sarl.lang.sarl.SarlField; import io.sarl.lang.sarl.SarlScript; import io.sarl.tests.api.AbstractSarlTest; /** * @author $Author: srodriguez$ * @author $Author: sgalland$ * @version $Name$ $Revision$ $Date$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ @SuppressWarnings("all") public class SARLMapExtensionsParsingTest extends AbstractSarlTest { @Test public void operator_addMapPair_0() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map : Map<String, Integer>", "var str = \"a\"", "var num = 4", "def myaction0 : Object {", " map += str -> num", "}", "}" ), true); assertEquals(1, mas.getXtendTypes().size()); // assertEquals("test", mas.getPackage()); // SarlAgent agent = (SarlAgent) mas.getXtendTypes().get(0); assertEquals("A1", agent.getName()); assertNull(agent.getExtends()); assertEquals(4, agent.getMembers().size()); // SarlField attr1 = (SarlField) agent.getMembers().get(0); assertEquals("map", attr1.getName()); assertTypeReferenceIdentifier(attr1.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr1.getInitialValue()); // SarlField attr2 = (SarlField) agent.getMembers().get(1); assertEquals("str", attr2.getName()); assertNull(attr2.getType()); assertXExpression(attr2.getInitialValue(), XStringLiteral.class, "a"); // SarlField attr3 = (SarlField) agent.getMembers().get(2); assertEquals("num", attr3.getName()); assertNull(attr3.getType()); assertXExpression(attr3.getInitialValue(), XNumberLiteral.class, "4"); // SarlAction action = (SarlAction) agent.getMembers().get(3); assertEquals("myaction0", action.getName()); assertTypeReferenceIdentifiers(action.getFiredEvents()); assertParameterNames(action.getParameters()); assertTypeReferenceIdentifier(action.getReturnType(), "java.lang.Object"); } @Test public void operator_addMapPair_1() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map : Map<String, Integer>", "var str = \"a\"", "var num = 4", "def myaction1 : Object {", " var p = str -> num", " map += p", "}", "}" ), true); assertEquals(1, mas.getXtendTypes().size()); // assertEquals("test", mas.getPackage()); // SarlAgent agent = (SarlAgent) mas.getXtendTypes().get(0); assertEquals("A1", agent.getName()); assertNull(agent.getExtends()); assertEquals(4, agent.getMembers().size()); // SarlField attr1 = (SarlField) agent.getMembers().get(0); assertEquals("map", attr1.getName()); assertTypeReferenceIdentifier(attr1.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr1.getInitialValue()); // SarlField attr2 = (SarlField) agent.getMembers().get(1); assertEquals("str", attr2.getName()); assertNull(attr2.getType()); assertXExpression(attr2.getInitialValue(), XStringLiteral.class, "a"); // SarlField attr3 = (SarlField) agent.getMembers().get(2); assertEquals("num", attr3.getName()); assertNull(attr3.getType()); assertXExpression(attr3.getInitialValue(), XNumberLiteral.class, "4"); // SarlAction action = (SarlAction) agent.getMembers().get(3); assertEquals("myaction1", action.getName()); assertTypeReferenceIdentifiers(action.getFiredEvents()); assertParameterNames(action.getParameters()); assertTypeReferenceIdentifier(action.getReturnType(), "java.lang.Object"); } @Test public void operator_addMapMap_0() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map1 : Map<String, Number>", "var map2 : Map<String, Integer>", "def myaction0 {", " map1 += map2", "}", "}" ), true); assertEquals(1, mas.getXtendTypes().size()); // assertEquals("test", mas.getPackage()); // SarlAgent agent = (SarlAgent) mas.getXtendTypes().get(0); assertEquals("A1", agent.getName()); assertNull(agent.getExtends()); assertEquals(3, agent.getMembers().size()); // SarlField attr1 = (SarlField) agent.getMembers().get(0); assertEquals("map1", attr1.getName()); assertTypeReferenceIdentifier(attr1.getType(), "java.util.Map<java.lang.String, java.lang.Number>"); assertNull(attr1.getInitialValue()); // SarlField attr2 = (SarlField) agent.getMembers().get(1); assertEquals("map2", attr2.getName()); assertTypeReferenceIdentifier(attr2.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr2.getInitialValue()); // SarlAction action = (SarlAction) agent.getMembers().get(2); assertEquals("myaction0", action.getName()); assertTypeReferenceIdentifiers(action.getFiredEvents()); assertParameterNames(action.getParameters()); assertTypeReferenceIdentifier(action.getReturnType(), "void"); } @Test public void operator_addMapMap_1() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map1 : Map<String, Number>", "var map2 : Map<String, Integer>", "def myaction0 : Object {", " map2 += map1", "}", "}" )); validate(mas).assertError( XbasePackage.eINSTANCE.getXFeatureCall(), IssueCodes.INCOMPATIBLE_TYPES, "Type mismatch: cannot convert from Map<String, Number> to Pair<? extends String, ? extends Integer>"); } @Test public void operator_plusMapPair_0() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map : Map<String, Integer>", "var r : Map<String, Integer>", "var str = \"a\"", "var num = 4", "def myaction0 : Object {", " r = map + (str -> num)", "}", "}" ), true); assertEquals(1, mas.getXtendTypes().size()); // assertEquals("test", mas.getPackage()); // SarlAgent agent = (SarlAgent) mas.getXtendTypes().get(0); assertEquals("A1", agent.getName()); assertNull(agent.getExtends()); assertEquals(5, agent.getMembers().size()); // SarlField attr1 = (SarlField) agent.getMembers().get(0); assertEquals("map", attr1.getName()); assertTypeReferenceIdentifier(attr1.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr1.getInitialValue()); // SarlField attr2 = (SarlField) agent.getMembers().get(1); assertEquals("r", attr2.getName()); assertTypeReferenceIdentifier(attr2.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr2.getInitialValue()); // SarlField attr3 = (SarlField) agent.getMembers().get(2); assertEquals("str", attr3.getName()); assertNull(attr3.getType()); assertXExpression(attr3.getInitialValue(), XStringLiteral.class, "a"); // SarlField attr4 = (SarlField) agent.getMembers().get(3); assertEquals("num", attr4.getName()); assertNull(attr4.getType()); assertXExpression(attr4.getInitialValue(), XNumberLiteral.class, "4"); // SarlAction action = (SarlAction) agent.getMembers().get(4); assertEquals("myaction0", action.getName()); assertTypeReferenceIdentifiers(action.getFiredEvents()); assertParameterNames(action.getParameters()); assertTypeReferenceIdentifier(action.getReturnType(), "java.lang.Object"); } @Test public void operator_plusMapPair_1() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map : Map<String, Integer>", "var r : Map<String, Integer>", "var str = \"a\"", "var num = 4", "def myaction0 : Object {", " var p = str -> num", " r = map + p", "}", "}" ), true); assertEquals(1, mas.getXtendTypes().size()); // assertEquals("test", mas.getPackage()); // SarlAgent agent = (SarlAgent) mas.getXtendTypes().get(0); assertEquals("A1", agent.getName()); assertNull(agent.getExtends()); assertEquals(5, agent.getMembers().size()); // SarlField attr1 = (SarlField) agent.getMembers().get(0); assertEquals("map", attr1.getName()); assertTypeReferenceIdentifier(attr1.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr1.getInitialValue()); // SarlField attr2 = (SarlField) agent.getMembers().get(1); assertEquals("r", attr2.getName()); assertTypeReferenceIdentifier(attr2.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr2.getInitialValue()); // SarlField attr3 = (SarlField) agent.getMembers().get(2); assertEquals("str", attr3.getName()); assertNull(attr3.getType()); assertXExpression(attr3.getInitialValue(), XStringLiteral.class, "a"); // SarlField attr4 = (SarlField) agent.getMembers().get(3); assertEquals("num", attr4.getName()); assertNull(attr4.getType()); assertXExpression(attr4.getInitialValue(), XNumberLiteral.class, "4"); // SarlAction action = (SarlAction) agent.getMembers().get(4); assertEquals("myaction0", action.getName()); assertTypeReferenceIdentifiers(action.getFiredEvents()); assertParameterNames(action.getParameters()); assertTypeReferenceIdentifier(action.getReturnType(), "java.lang.Object"); } @Test public void operator_plusMapMap_0() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map1 : Map<String, Integer>", "var map2 : Map<String, Integer>", "var r : Map<String, Integer>", "def myaction0 : Object {", " r = map1 + map2", "}", "}" ), true); assertEquals(1, mas.getXtendTypes().size()); // assertEquals("test", mas.getPackage()); // SarlAgent agent = (SarlAgent) mas.getXtendTypes().get(0); assertEquals("A1", agent.getName()); assertNull(agent.getExtends()); assertEquals(4, agent.getMembers().size()); // SarlField attr1 = (SarlField) agent.getMembers().get(0); assertEquals("map1", attr1.getName()); assertTypeReferenceIdentifier(attr1.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr1.getInitialValue()); // SarlField attr2 = (SarlField) agent.getMembers().get(1); assertEquals("map2", attr2.getName()); assertTypeReferenceIdentifier(attr2.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr2.getInitialValue()); // SarlField attr3 = (SarlField) agent.getMembers().get(2); assertEquals("r", attr3.getName()); assertTypeReferenceIdentifier(attr3.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr3.getInitialValue()); // SarlAction action = (SarlAction) agent.getMembers().get(3); assertEquals("myaction0", action.getName()); assertTypeReferenceIdentifiers(action.getFiredEvents()); assertParameterNames(action.getParameters()); assertTypeReferenceIdentifier(action.getReturnType(), "java.lang.Object"); } @Test public void operator_plusMapMap_1() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map1 : Map<String, Integer>", "var map2 : Map<String, Integer>", "var r : Map<String, Integer>", "def myaction0 : Object {", " r = map2 + map1", "}", "}" ), true); assertEquals(1, mas.getXtendTypes().size()); // assertEquals("test", mas.getPackage()); // SarlAgent agent = (SarlAgent) mas.getXtendTypes().get(0); assertEquals("A1", agent.getName()); assertNull(agent.getExtends()); assertEquals(4, agent.getMembers().size()); // SarlField attr1 = (SarlField) agent.getMembers().get(0); assertEquals("map1", attr1.getName()); assertTypeReferenceIdentifier(attr1.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr1.getInitialValue()); // SarlField attr2 = (SarlField) agent.getMembers().get(1); assertEquals("map2", attr2.getName()); assertTypeReferenceIdentifier(attr2.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr2.getInitialValue()); // SarlField attr3 = (SarlField) agent.getMembers().get(2); assertEquals("r", attr3.getName()); assertTypeReferenceIdentifier(attr3.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr3.getInitialValue()); // SarlAction action = (SarlAction) agent.getMembers().get(3); assertEquals("myaction0", action.getName()); assertTypeReferenceIdentifiers(action.getFiredEvents()); assertParameterNames(action.getParameters()); } @Test public void operator_plusMapMap_2() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map1 : Map<String, Integer>", "var map2 : Map<String, Number>", "var r : Map<String, Integer>", "def myaction0 : Object {", " r = map1 + map2", "}", "}" )); validate(mas).assertError( XbasePackage.eINSTANCE.getXFeatureCall(), IssueCodes.INCOMPATIBLE_TYPES, "Type mismatch: cannot convert from Map<String, Number> to Pair<? extends String, ? extends Integer>"); } @Test public void operator_plusMapMap_3() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map1 : Map<String, Integer>", "var map2 : Map<String, Number>", "var r : Map<String, Number>", "def myaction0 : Object {", " r = map2 + map1", "}", "}" ), true); assertEquals(1, mas.getXtendTypes().size()); // assertEquals("test", mas.getPackage()); // SarlAgent agent = (SarlAgent) mas.getXtendTypes().get(0); assertEquals("A1", agent.getName()); assertNull(agent.getExtends()); assertEquals(4, agent.getMembers().size()); // SarlField attr1 = (SarlField) agent.getMembers().get(0); assertEquals("map1", attr1.getName()); assertTypeReferenceIdentifier(attr1.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr1.getInitialValue()); // SarlField attr2 = (SarlField) agent.getMembers().get(1); assertEquals("map2", attr2.getName()); assertTypeReferenceIdentifier(attr2.getType(), "java.util.Map<java.lang.String, java.lang.Number>"); assertNull(attr2.getInitialValue()); // SarlField attr3 = (SarlField) agent.getMembers().get(2); assertEquals("r", attr3.getName()); assertTypeReferenceIdentifier(attr3.getType(), "java.util.Map<java.lang.String, java.lang.Number>"); assertNull(attr3.getInitialValue()); // SarlAction action = (SarlAction) agent.getMembers().get(3); assertEquals("myaction0", action.getName()); assertTypeReferenceIdentifiers(action.getFiredEvents()); assertParameterNames(action.getParameters()); assertTypeReferenceIdentifier(action.getReturnType(), "java.lang.Object"); } @Test public void operator_plusMapMap_4() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map1 : Map<String, Integer>", "var map2 : Map<String, Number>", "var r : Map<String, Integer>", "def myaction0 : Object {", " r = map2 + map1", "}", "}" )); validate(mas).assertError( XbasePackage.eINSTANCE.getXBinaryOperation(), IssueCodes.INCOMPATIBLE_TYPES, "Type mismatch: cannot convert from Map<String, Number> to Map<String, Integer>"); } @Test public void operator_removeMapK_0() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map : Map<String, Integer>", "var r : Map<String, Integer>", "var str = \"a\"", "var num = 4", "def myaction0 : Object {", " map -= str", "}", "}" )); assertEquals(1, mas.getXtendTypes().size()); // assertEquals("test", mas.getPackage()); // SarlAgent agent = (SarlAgent) mas.getXtendTypes().get(0); assertEquals("A1", agent.getName()); assertNull(agent.getExtends()); assertEquals(5, agent.getMembers().size()); // SarlField attr1 = (SarlField) agent.getMembers().get(0); assertEquals("map", attr1.getName()); assertTypeReferenceIdentifier(attr1.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr1.getInitialValue()); // SarlField attr2 = (SarlField) agent.getMembers().get(1); assertEquals("r", attr2.getName()); assertTypeReferenceIdentifier(attr2.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr2.getInitialValue()); // SarlField attr3 = (SarlField) agent.getMembers().get(2); assertEquals("str", attr3.getName()); assertNull(attr3.getType()); assertXExpression(attr3.getInitialValue(), XStringLiteral.class, "a"); // SarlField attr4 = (SarlField) agent.getMembers().get(3); assertEquals("num", attr4.getName()); assertNull(attr4.getType()); assertXExpression(attr4.getInitialValue(), XNumberLiteral.class, "4"); // SarlAction action = (SarlAction) agent.getMembers().get(4); assertEquals("myaction0", action.getName()); assertTypeReferenceIdentifiers(action.getFiredEvents()); assertParameterNames(action.getParameters()); assertTypeReferenceIdentifier(action.getReturnType(), "java.lang.Object"); } @Test public void operator_removeMapK_1() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map : Map<String, Integer>", "var r : Map<String, Integer>", "var str = \"a\"", "var num = 4", "def myaction0 {", " map -= num", "}", "}" )); validate(mas).assertError( XbasePackage.eINSTANCE.getXFeatureCall(), IssueCodes.INCOMPATIBLE_TYPES, "Type mismatch: cannot convert from int to Pair"); } @Test public void operator_minusMapK_0() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map : Map<String, Integer>", "var r : Map<String, Integer>", "var str = \"a\"", "var num = 4", "def myaction0 : Object {", " r = map - str", "}", "}" ), true); assertEquals(1, mas.getXtendTypes().size()); // assertEquals("test", mas.getPackage()); // SarlAgent agent = (SarlAgent) mas.getXtendTypes().get(0); assertEquals("A1", agent.getName()); assertNull(agent.getExtends()); assertEquals(5, agent.getMembers().size()); // SarlField attr1 = (SarlField) agent.getMembers().get(0); assertEquals("map", attr1.getName()); assertTypeReferenceIdentifier(attr1.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr1.getInitialValue()); // SarlField attr2 = (SarlField) agent.getMembers().get(1); assertEquals("r", attr2.getName()); assertTypeReferenceIdentifier(attr2.getType(), "java.util.Map<java.lang.String, java.lang.Integer>"); assertNull(attr2.getInitialValue()); // SarlField attr3 = (SarlField) agent.getMembers().get(2); assertEquals("str", attr3.getName()); assertNull(attr3.getType()); assertXExpression(attr3.getInitialValue(), XStringLiteral.class, "a"); // SarlField attr4 = (SarlField) agent.getMembers().get(3); assertEquals("num", attr4.getName()); assertNull(attr4.getType()); assertXExpression(attr4.getInitialValue(), XNumberLiteral.class, "4"); // SarlAction action = (SarlAction) agent.getMembers().get(4); assertEquals("myaction0", action.getName()); assertTypeReferenceIdentifiers(action.getFiredEvents()); assertParameterNames(action.getParameters()); assertTypeReferenceIdentifier(action.getReturnType(), "java.lang.Object"); } @Test public void operator_minusMapK_1() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map : Map<String, Integer>", "var r : Map<String, Integer>", "var str = \"a\"", "var num = 4", "def myaction0 : Object {", " r = str - map", "}", "}" )); validate(mas).assertError( XbasePackage.eINSTANCE.getXBinaryOperation(), Diagnostic.LINKING_DIAGNOSTIC, "- cannot be resolved"); } @Test public void operator_minusMapK_2() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map : Map<String, Integer>", "var r : Map<String, Integer>", "var str = \"a\"", "var num = 4", "def myaction0 : Object {", " r = map - num", "}", "}" )); validate(mas).assertError( XbasePackage.eINSTANCE.getXFeatureCall(), IssueCodes.INCOMPATIBLE_TYPES, "Type mismatch: cannot convert from int to Pair"); } @Test public void operator_minusMapK_3() throws Exception { SarlScript mas = file(multilineString( "package test", "import java.util.Map", "agent A1 {", "var map : Map<String, Integer>", "var r : Map<String, Integer>", "var str = \"a\"", "var num = 4", "def myaction0 : Object {", " r = num - map", "}", "}" )); validate(mas).assertError( XbasePackage.eINSTANCE.getXBinaryOperation(), IssueCodes.INCOMPATIBLE_TYPES, "Type mismatch: cannot convert from int to Map<String, Integer>"); } }