/*
* 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.oop;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.eclipse.xtext.common.types.JvmTypeConstraint;
import org.eclipse.xtext.common.types.JvmTypeParameter;
import org.eclipse.xtext.common.types.JvmVisibility;
import org.eclipse.xtext.common.types.TypesPackage;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import io.sarl.lang.SARLVersion;
import io.sarl.lang.sarl.SarlAction;
import io.sarl.lang.sarl.SarlAgent;
import io.sarl.lang.sarl.SarlBehavior;
import io.sarl.lang.sarl.SarlClass;
import io.sarl.lang.sarl.SarlInterface;
import io.sarl.lang.sarl.SarlPackage;
import io.sarl.lang.sarl.SarlScript;
import io.sarl.lang.sarl.SarlSkill;
import io.sarl.tests.api.AbstractSarlTest;
/**
* @author $Author: sgalland$
* @version $Name$ $Revision$ $Date$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@RunWith(Suite.class)
@SuiteClasses({
InterfaceParsingTest.TopInterfaceTest.class,
InterfaceParsingTest.InsideClassTest.class,
InterfaceParsingTest.InsideAgentTest.class,
InterfaceParsingTest.InsideBehaviorTest.class,
InterfaceParsingTest.InsideSkillTest.class,
InterfaceParsingTest.GenericTest.class,
})
@SuppressWarnings("all")
public class InterfaceParsingTest {
public static class TopInterfaceTest extends AbstractSarlTest {
protected SarlInterface getInterface(SarlScript script) {
return (SarlInterface) script.getXtendTypes().get(0);
}
@Test
public void classmodifier_public() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public interface I1 { }"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertFalse(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_none() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1 { }"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertFalse(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_private() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"private interface I1 { }"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, abstract & strictfp are permitted");
}
@Test
public void classmodifier_protected() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"protected interface I1 { }"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, abstract & strictfp are permitted");
}
@Test
public void classmodifier_package() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"package interface I1 { }"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.DEFAULT, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertFalse(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_abstract() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"abstract interface I1 { }"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertFalse(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_static() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"static interface I1 { }"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, abstract & strictfp are permitted");
}
@Test
public void classmodifier_dispatch() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"dispatch interface I1 { }"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, abstract & strictfp are permitted");
}
@Test
public void classmodifier_final() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"final interface I1 { }"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, abstract & strictfp are permitted");
}
@Test
public void classmodifier_strictfp() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"strictfp interface I1 { }"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertFalse(interf.isStatic());
assertTrue(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_native() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"native interface I1 { }"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, abstract & strictfp are permitted");
}
@Test
public void classmodifier_volatile() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"volatile interface I1 { }"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, abstract & strictfp are permitted");
}
@Test
public void classmodifier_synchronized() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"synchronized interface I1 { }"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, abstract & strictfp are permitted");
}
@Test
public void classmodifier_transient() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"transient interface I1 { }"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, abstract & strictfp are permitted");
}
@Test
public void classmodifier_abstract_final() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"abstract final interface I1 { }"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"The interface I1 can either be abstract or final, not both");
}
@Test
public void classmodifier_public_package() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public private interface I1 { }"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"The interface I1 can only set one of public / package / protected / private");
}
@Test
public void method_0() throws Exception {
SarlScript mas = file("interface I1 { def fct(a : int) : float { a + 1f } }");
validate(mas).assertNoErrors();
}
@Test
public void method_5() throws Exception {
SarlScript mas = file("interface I1 { def fct(a : int = 6) : float { a + 1f } }");
validate(mas).assertNoErrors();
}
}
public static class InsideClassTest extends AbstractSarlTest {
protected SarlInterface getInterface(SarlScript script) {
SarlClass enclosing = (SarlClass) script.getXtendTypes().get(0);
return (SarlInterface) enclosing.getMembers().get(0);
}
@Test
public void classmodifier_public() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" public interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_none() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_private() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" private interface I1 { }",
"}"), false);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PRIVATE, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_protected() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" protected interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PROTECTED, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_package() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" package interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.DEFAULT, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_abstract() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" abstract interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_static() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" static interface I1 { }",
"}"), false);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_dispatch() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" dispatch interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_final() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" final interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_strictfp() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" strictfp interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertTrue(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_native() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" native interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_volatile() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" volatile interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_synchronized() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" synchronized interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_transient() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" transient interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_abstract_final() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" abstract final interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"The interface I1 can either be abstract or final, not both");
}
@Test
public void classmodifier_public_package() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public class EnclosingClass {",
" public private interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"The interface I1 can only set one of public / package / protected / private");
}
}
public static class InsideAgentTest extends AbstractSarlTest {
protected SarlInterface getInterface(SarlScript script) {
SarlAgent enclosing = (SarlAgent) script.getXtendTypes().get(0);
return (SarlInterface) enclosing.getMembers().get(0);
}
@Test
public void classmodifier_public() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" public interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER);
}
@Test
public void classmodifier_none() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PROTECTED, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_private() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" private interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PRIVATE, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_protected() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" protected interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PROTECTED, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_package() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" package interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.DEFAULT, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_abstract() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" abstract interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PROTECTED, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_static() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" static interface I1 { }",
"}"), false);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PROTECTED, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_dispatch() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" dispatch interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER);
}
@Test
public void classmodifier_final() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" final interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER);
}
@Test
public void classmodifier_strictfp() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" strictfp interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER);
}
@Test
public void classmodifier_native() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" native interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER);
}
@Test
public void classmodifier_volatile() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" volatile interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER);
}
@Test
public void classmodifier_synchronized() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" synchronized interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER);
}
@Test
public void classmodifier_transient() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" transient interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER);
}
@Test
public void classmodifier_abstract_final() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" abstract final interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"abstract or final, not both");
}
@Test
public void classmodifier_public_package() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public agent EnclosingAgent {",
" public private interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"public / package / protected / private");
}
}
public static class InsideBehaviorTest extends AbstractSarlTest {
protected SarlInterface getInterface(SarlScript script) {
SarlBehavior enclosing = (SarlBehavior) script.getXtendTypes().get(0);
return (SarlInterface) enclosing.getMembers().get(0);
}
@Test
public void classmodifier_public() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" public interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_none() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_private() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" private interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PRIVATE, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_protected() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" protected interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PROTECTED, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_package() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" package interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.DEFAULT, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_abstract() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" abstract interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_static() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" static interface I1 { }",
"}"), false);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_dispatch() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" dispatch interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_final() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" final interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_strictfp() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" strictfp interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertTrue(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_native() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" native interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_volatile() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" volatile interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_synchronized() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" synchronized interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_transient() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" transient interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_abstract_final() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" abstract final interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"The interface I1 can either be abstract or final, not both");
}
@Test
public void classmodifier_public_package() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public behavior EnclosingBehavior {",
" public private interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"The interface I1 can only set one of public / package / protected / private");
}
}
public static class InsideSkillTest extends AbstractSarlTest {
protected SarlInterface getInterface(SarlScript script) {
SarlSkill enclosing = (SarlSkill) script.getXtendTypes().get(1);
return (SarlInterface) enclosing.getMembers().get(0);
}
@Test
public void classmodifier_public() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" public interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_none() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_private() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" private interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PRIVATE, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_protected() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" protected interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PROTECTED, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_package() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" package interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.DEFAULT, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_abstract() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" abstract interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_static() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" static interface I1 { }",
"}"), false);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertFalse(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_dispatch() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" dispatch interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_final() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" final interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_strictfp() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" strictfp interface I1 { }",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = getInterface(mas);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertNullOrEmpty(interf.getExtends());
assertEquals(JvmVisibility.PUBLIC, interf.getVisibility());
assertEquals(0, interf.getMembers().size());
assertFalse(interf.isAnonymous());
assertFalse(interf.isFinal());
assertFalse(interf.isLocal());
assertTrue(interf.isStatic());
assertTrue(interf.isStrictFloatingPoint());
}
@Test
public void classmodifier_native() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" native interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_volatile() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" volatile interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_synchronized() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" synchronized interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_transient() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" transient interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"Illegal modifier for the interface I1; only public, package, protected, private, static, abstract & strictfp are permitted");
}
@Test
public void classmodifier_abstract_final() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" abstract final interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"The interface I1 can either be abstract or final, not both");
}
@Test
public void classmodifier_public_package() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"public capacity C1 { }",
"public skill EnclosingSkill implements C1 {",
" public private interface I1 { }",
"}"), false);
validate(mas).assertError(
SarlPackage.eINSTANCE.getSarlInterface(),
org.eclipse.xtend.core.validation.IssueCodes.INVALID_MODIFIER,
"The interface I1 can only set one of public / package / protected / private");
}
}
public static class GenericTest extends AbstractSarlTest {
@Test
public void interfaceGeneric_X() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1<X> {",
" def setX(param : X)",
" def getX : X",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = (SarlInterface) mas.getXtendTypes().get(0);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
//
assertEquals(1, interf.getTypeParameters().size());
//
JvmTypeParameter parameter = interf.getTypeParameters().get(0);
assertEquals("X", parameter.getName());
assertNullOrEmpty(parameter.getConstraints());
}
@Test
public void interfaceGeneric_XextendsNumber() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1<X extends Number> {",
" def setX(param : X)",
" def getX : X",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = (SarlInterface) mas.getXtendTypes().get(0);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
//
assertEquals(1, interf.getTypeParameters().size());
//
JvmTypeParameter parameter = interf.getTypeParameters().get(0);
assertEquals("X", parameter.getName());
assertEquals(1, parameter.getConstraints().size());
//
JvmTypeConstraint constraint = parameter.getConstraints().get(0);
assertEquals("java.lang.Number", constraint.getTypeReference().getIdentifier());
assertTrue(constraint.getIdentifier().startsWith("extends"));
}
@Test
public void interfaceGeneric_XY() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1<X,Y> {",
" def getY : Y",
" def setX(param : X)",
" def getX : X",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = (SarlInterface) mas.getXtendTypes().get(0);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
//
assertEquals(2, interf.getTypeParameters().size());
//
JvmTypeParameter parameter1 = interf.getTypeParameters().get(0);
assertEquals("X", parameter1.getName());
assertNullOrEmpty(parameter1.getConstraints());
//
JvmTypeParameter parameter2 = interf.getTypeParameters().get(1);
assertEquals("Y", parameter2.getName());
assertNullOrEmpty(parameter2.getConstraints());
}
@Test
public void interfaceGeneric_XYextendsX() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1<X,Y extends X> {",
" def getY : Y",
" def setX(param : X)",
" def getX : X",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = (SarlInterface) mas.getXtendTypes().get(0);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
//
assertEquals(2, interf.getTypeParameters().size());
//
JvmTypeParameter parameter1 = interf.getTypeParameters().get(0);
assertEquals("X", parameter1.getName());
assertNullOrEmpty(parameter1.getConstraints());
//
JvmTypeParameter parameter2 = interf.getTypeParameters().get(1);
assertEquals("Y", parameter2.getName());
assertEquals(1, parameter2.getConstraints().size());
//
JvmTypeConstraint constraint = parameter2.getConstraints().get(0);
assertEquals("X", constraint.getTypeReference().getIdentifier());
assertTrue(constraint.getIdentifier().startsWith("extends"));
}
@Test
public void interfaceGeneric_XextendsYY() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1<X extends Y,Y> {",
" def getY : Y",
" def setX(param : X)",
" def getX : X",
"}"), false);
validate(mas).assertError(
TypesPackage.eINSTANCE.getJvmParameterizedTypeReference(),
org.eclipse.xtext.xbase.validation.IssueCodes.TYPE_PARAMETER_FORWARD_REFERENCE,
"Illegal forward reference to type parameter Y");
}
@Test
public void functionGeneric_X_sarlNotation() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1 {",
" def setX(param : X) : void with X",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = (SarlInterface) mas.getXtendTypes().get(0);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertEquals(1, interf.getMembers().size());
//
SarlAction action = (SarlAction) interf.getMembers().get(0);
assertEquals("setX", action.getName());
assertEquals(1, action.getTypeParameters().size());
//
JvmTypeParameter parameter = action.getTypeParameters().get(0);
assertEquals("X", parameter.getName());
assertNullOrEmpty(parameter.getConstraints());
}
@Test
public void functionGeneric_X_javaNotation() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1 {",
" def <X> setX(param : X) : void",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = (SarlInterface) mas.getXtendTypes().get(0);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertEquals(1, interf.getMembers().size());
//
SarlAction action = (SarlAction) interf.getMembers().get(0);
assertEquals("setX", action.getName());
assertEquals(1, action.getTypeParameters().size());
//
JvmTypeParameter parameter = action.getTypeParameters().get(0);
assertEquals("X", parameter.getName());
assertNullOrEmpty(parameter.getConstraints());
}
@Test
public void functionGeneric_XextendsNumber_sarlNotation() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1 {",
" def setX(param : X) : void with X extends Number",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = (SarlInterface) mas.getXtendTypes().get(0);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertEquals(1, interf.getMembers().size());
//
SarlAction action = (SarlAction) interf.getMembers().get(0);
assertEquals("setX", action.getName());
assertEquals(1, action.getTypeParameters().size());
//
JvmTypeParameter parameter = action.getTypeParameters().get(0);
assertEquals("X", parameter.getName());
assertEquals(1, parameter.getConstraints().size());
//
JvmTypeConstraint constraint = parameter.getConstraints().get(0);
assertEquals("java.lang.Number", constraint.getTypeReference().getIdentifier());
assertTrue(constraint.getIdentifier().startsWith("extends"));
}
@Test
public void functionGeneric_XextendsNumber_javaNotation() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1 {",
" def <X extends Number> setX(param : X) : void",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = (SarlInterface) mas.getXtendTypes().get(0);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertEquals(1, interf.getMembers().size());
//
SarlAction action = (SarlAction) interf.getMembers().get(0);
assertEquals("setX", action.getName());
assertEquals(1, action.getTypeParameters().size());
//
JvmTypeParameter parameter = action.getTypeParameters().get(0);
assertEquals("X", parameter.getName());
assertEquals(1, parameter.getConstraints().size());
//
JvmTypeConstraint constraint = parameter.getConstraints().get(0);
assertEquals("java.lang.Number", constraint.getTypeReference().getIdentifier());
assertTrue(constraint.getIdentifier().startsWith("extends"));
}
@Test
public void functionGeneric_XY_sarlNotation() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1 {",
" def setX(param : X) : void with X, Y",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = (SarlInterface) mas.getXtendTypes().get(0);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertEquals(1, interf.getMembers().size());
//
SarlAction action = (SarlAction) interf.getMembers().get(0);
assertEquals("setX", action.getName());
assertEquals(2, action.getTypeParameters().size());
//
JvmTypeParameter parameter1 = action.getTypeParameters().get(0);
assertEquals("X", parameter1.getName());
assertNullOrEmpty(parameter1.getConstraints());
//
JvmTypeParameter parameter2 = action.getTypeParameters().get(1);
assertEquals("Y", parameter2.getName());
assertNullOrEmpty(parameter2.getConstraints());
}
@Test
public void functionGeneric_XY_javaNotation() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1 {",
" def <X, Y> setX(param : X) : void",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = (SarlInterface) mas.getXtendTypes().get(0);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertEquals(1, interf.getMembers().size());
//
SarlAction action = (SarlAction) interf.getMembers().get(0);
assertEquals("setX", action.getName());
assertEquals(2, action.getTypeParameters().size());
//
JvmTypeParameter parameter1 = action.getTypeParameters().get(0);
assertEquals("X", parameter1.getName());
assertNullOrEmpty(parameter1.getConstraints());
//
JvmTypeParameter parameter2 = action.getTypeParameters().get(1);
assertEquals("Y", parameter2.getName());
assertNullOrEmpty(parameter2.getConstraints());
}
@Test
public void functionGeneric_XYextendsX_sarlNotation() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1 {",
" def setX(param : X) : void with X, Y extends X",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = (SarlInterface) mas.getXtendTypes().get(0);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertEquals(1, interf.getMembers().size());
//
SarlAction action = (SarlAction) interf.getMembers().get(0);
assertEquals("setX", action.getName());
assertEquals(2, action.getTypeParameters().size());
//
JvmTypeParameter parameter1 = action.getTypeParameters().get(0);
assertEquals("X", parameter1.getName());
assertNullOrEmpty(parameter1.getConstraints());
//
JvmTypeParameter parameter2 = action.getTypeParameters().get(1);
assertEquals("Y", parameter2.getName());
assertEquals(1, parameter2.getConstraints().size());
//
JvmTypeConstraint constraint = parameter2.getConstraints().get(0);
assertEquals("X", constraint.getTypeReference().getIdentifier());
assertTrue(constraint.getIdentifier().startsWith("extends"));
}
@Test
public void functionGeneric_XYextendsX_javaNotation() throws Exception {
SarlScript mas = file(multilineString(
"package io.sarl.lang.tests.test",
"interface I1 {",
" def <X, Y extends X> setX(param : X) : void",
"}"), true);
assertEquals("io.sarl.lang.tests.test", mas.getPackage());
SarlInterface interf = (SarlInterface) mas.getXtendTypes().get(0);
assertNotNull(interf);
//
assertEquals("I1", interf.getName());
assertEquals(1, interf.getMembers().size());
//
SarlAction action = (SarlAction) interf.getMembers().get(0);
assertEquals("setX", action.getName());
assertEquals(2, action.getTypeParameters().size());
//
JvmTypeParameter parameter1 = action.getTypeParameters().get(0);
assertEquals("X", parameter1.getName());
assertNullOrEmpty(parameter1.getConstraints());
//
JvmTypeParameter parameter2 = action.getTypeParameters().get(1);
assertEquals("Y", parameter2.getName());
assertEquals(1, parameter2.getConstraints().size());
//
JvmTypeConstraint constraint = parameter2.getConstraints().get(0);
assertEquals("X", constraint.getTypeReference().getIdentifier());
assertTrue(constraint.getIdentifier().startsWith("extends"));
}
}
}