blob: 0e8f5b973d8383c7d7313ef2d11b30dfd97f6cb3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 Obeo.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.acceleo.query.services.tests;
import com.google.common.collect.ImmutableSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import org.eclipse.acceleo.query.parser.tests.ValidationTest;
import org.eclipse.acceleo.query.runtime.IQueryBuilderEngine.AstResult;
import org.eclipse.acceleo.query.runtime.IValidationResult;
import org.eclipse.acceleo.query.runtime.ValidationMessageLevel;
import org.eclipse.acceleo.query.validation.type.IType;
import org.eclipse.acceleo.query.validation.type.NothingType;
import org.eclipse.acceleo.query.validation.type.SequenceType;
import org.eclipse.acceleo.query.validation.type.SetType;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcorePackage;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class CollectionServicesAstValidationTest extends AbstractServicesValidationTest {
@Test
public void testConcatEmptyListEmptyList() {
final IValidationResult validationResult = validate("Sequence{}->concat(Sequence{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after concat:\n Empty Sequence defined in extension\n Empty Sequence defined in extension",
10, 30);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after concat:\n Empty Sequence defined in extension\n"
+ " Empty Sequence defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testConcatIntListRealList() {
final IValidationResult validationResult = validate("Sequence{1, 2, 3}->concat(Sequence{2.0})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(Double.class))), types);
}
@Test
public void testConcatEmptyListEmptySet() {
final IValidationResult validationResult = validate("Sequence{}->concat(OrderedSet{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after concat:\n Empty Sequence defined in extension\n Empty OrderedSet defined in extension",
10, 32);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after concat:\n Empty Sequence defined in extension\n"
+ " Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testConcatIntListRealSet() {
final IValidationResult validationResult = validate("Sequence{1, 2, 3}->concat(OrderedSet{2.0})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(Double.class))), types);
}
@Test
public void testConcatListNull() {
final IValidationResult validationResult = validate("Sequence{}->concat(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after concat:\n Empty Sequence defined in extension\n concat can only be called on collections, but null was used as its argument.",
10, 24);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after concat:\n Empty Sequence defined in extension\n"
+ " concat can only be called on collections, but null was used as its argument.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testConcatListNullAsList() {
final IValidationResult validationResult = validate("Sequence{}->concat(null->asSequence())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
23, 37);
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(1),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after concat:\n Empty Sequence defined in extension\n The Collection was empty due to a null value being wrapped as a Collection.",
10, 38);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after concat:\n Empty Sequence defined in extension\n"
+ " The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testConcatListNullAsSet() {
final IValidationResult validationResult = validate("Sequence{}->concat(null->asSet())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
23, 32);
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(1),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after concat:\n Empty Sequence defined in extension\n The Collection was empty due to a null value being wrapped as a Collection.",
10, 33);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after concat:\n Empty Sequence defined in extension\n"
+ " The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testConcatNullList() {
final IValidationResult validationResult = validate("null->concat(Sequence{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after concat:\n The Collection was empty due to a null value being wrapped as a Collection.\n Empty Sequence defined in extension",
4, 24);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after concat:\n The Collection was empty due to a null value being wrapped as a Collection.\n"
+ " Empty Sequence defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testConcatNullSet() {
final IValidationResult validationResult = validate("null->concat(OrderedSet{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after concat:\n The Collection was empty due to a null value being wrapped as a Collection.\n Empty OrderedSet defined in extension",
4, 26);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after concat:\n The Collection was empty due to a null value being wrapped as a Collection.\n"
+ " Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testConcatEmptySetEmptySet() {
final IValidationResult validationResult = validate("OrderedSet{}->concat(OrderedSet{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after concat:\n Empty OrderedSet defined in extension\n Empty OrderedSet defined in extension",
12, 34);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after concat:\n Empty OrderedSet defined in extension\n"
+ " Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testConcatIntSetRealSet() {
final IValidationResult validationResult = validate("OrderedSet{1, 2, 3}->concat(OrderedSet{2.0})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(Double.class))),
types);
}
@Test
public void testConcatEmptySetEmptyList() {
final IValidationResult validationResult = validate("OrderedSet{}->concat(Sequence{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after concat:\n Empty OrderedSet defined in extension\n Empty Sequence defined in extension",
12, 32);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after concat:\n Empty OrderedSet defined in extension\n"
+ " Empty Sequence defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testConcatIntSetRealList() {
final IValidationResult validationResult = validate("OrderedSet{1, 2, 3}->concat(Sequence{2.0})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(Double.class))),
types);
}
@Test
public void testConcatSetNull() {
final IValidationResult validationResult = validate("OrderedSet{}->concat(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after concat:\n Empty OrderedSet defined in extension\n concat can only be called on collections, but null was used as its argument.",
12, 26);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after concat:\n Empty OrderedSet defined in extension\n"
+ " concat can only be called on collections, but null was used as its argument.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testConcatSetNullAsList() {
final IValidationResult validationResult = validate("OrderedSet{}->concat(null->asSequence())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
25, 39);
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(1),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after concat:\n Empty OrderedSet defined in extension\n The Collection was empty due to a null value being wrapped as a Collection.",
12, 40);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after concat:\n Empty OrderedSet defined in extension\n"
+ " The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testConcatSetNullAsSet() {
final IValidationResult validationResult = validate("OrderedSet{}->concat(null->asSet())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
25, 34);
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(1),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after concat:\n Empty OrderedSet defined in extension\n The Collection was empty due to a null value being wrapped as a Collection.",
12, 35);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after concat:\n Empty OrderedSet defined in extension\n"
+ " The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testUnionEmptyListEmptyList() {
final IValidationResult validationResult = validate("Sequence{}->union(Sequence{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after union:\n Empty Sequence defined in extension\n Empty Sequence defined in extension",
10, 29);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after union:\n Empty Sequence defined in extension\n"
+ " Empty Sequence defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testUnionIntListRealList() {
final IValidationResult validationResult = validate("Sequence{1, 2, 3}->union(Sequence{2.0})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(Double.class))), types);
}
@Test
public void testUnionListNull() {
final IValidationResult validationResult = validate("Sequence{}->union(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after union:\n Empty Sequence defined in extension\n union can only be called on collections, but null was used as its argument.",
10, 23);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after union:\n Empty Sequence defined in extension\n"
+ " union can only be called on collections, but null was used as its argument.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testUnionListNullAsList() {
final IValidationResult validationResult = validate("Sequence{}->union(null->asSequence())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
22, 36);
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(1),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after union:\n Empty Sequence defined in extension\n The Collection was empty due to a null value being wrapped as a Collection.",
10, 37);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after union:\n Empty Sequence defined in extension\n"
+ " The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testUnionNullSet() {
final IValidationResult validationResult = validate("null->union(OrderedSet{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after union:\n The Collection was empty due to a null value being wrapped as a Collection.\n Empty OrderedSet defined in extension",
4, 25);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after union:\n The Collection was empty due to a null value being wrapped as a Collection.\n"
+ " Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testUnionEmptySetEmptySet() {
final IValidationResult validationResult = validate("OrderedSet{}->union(OrderedSet{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after union:\n Empty OrderedSet defined in extension\n Empty OrderedSet defined in extension",
12, 33);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after union:\n Empty OrderedSet defined in extension\n"
+ " Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testUnionIntSetRealSet() {
final IValidationResult validationResult = validate("OrderedSet{1, 2, 3}->union(OrderedSet{2.0})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(Double.class))),
types);
}
@Test
public void testUnionSetNull() {
final IValidationResult validationResult = validate("OrderedSet{}->union(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after union:\n Empty OrderedSet defined in extension\n union can only be called on collections, but null was used as its argument.",
12, 25);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after union:\n Empty OrderedSet defined in extension\n"
+ " union can only be called on collections, but null was used as its argument.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testUnionSetNullAsSet() {
final IValidationResult validationResult = validate("OrderedSet{}->union(null->asSet())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
24, 33);
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(1),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after union:\n Empty OrderedSet defined in extension\n The Collection was empty due to a null value being wrapped as a Collection.",
12, 34);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after union:\n Empty OrderedSet defined in extension\n"
+ " The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testAddImplicitSetNothingStringAsSequence() {
VariableBuilder variables = new VariableBuilder().addVar("self", nothingType("Empty"));
final IValidationResult validationResult = validate("self->add('hello'->asSequence())", variables
.build());
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, "Empty", 0, 4);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertTrue(types.isEmpty());
}
@Test
public void testAddImplicitSetNothingStringAsSet() {
VariableBuilder variables = new VariableBuilder().addVar("self", nothingType("Empty"));
final IValidationResult validationResult = validate("self->add('hello'->asSet())", variables.build());
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, "Empty", 0, 4);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertTrue(types.isEmpty());
}
@Test
public void testAddImplicitSetStringSequenceOfNothing() {
VariableBuilder variables = new VariableBuilder().addVar("self", sequenceType(nothingType("Empty")));
final IValidationResult validationResult = validate("'hello'->add(self)", variables.build());
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, "Empty collection: Empty", 13, 17);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testAddImplicitSetStringSetOfNothing() {
VariableBuilder variables = new VariableBuilder().addVar("self", setType(nothingType("Empty")));
final IValidationResult validationResult = validate("'hello'->add(self)", variables.build());
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, "Empty collection: Empty", 13, 17);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testAddImplicitSet() {
final IValidationResult validationResult = validate("'hello'->add(Sequence{1,2,3})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class)), setType(classType(Integer.class))),
types);
}
@Test
public void testAddSetNothingString() {
VariableBuilder variables = new VariableBuilder().addVar("self", setType(nothingType("Empty")));
final IValidationResult validationResult = validate("self->add('hello')", variables.build());
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, "Empty collection: Empty", 0, 4);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAddSetStringNothing() {
VariableBuilder variables = new VariableBuilder().addVar("self", nothingType("Empty"));
final IValidationResult validationResult = validate("OrderedSet{'hello'}->add(self)", variables
.build());
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, "Empty", 25, 29);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertTrue(types.isEmpty());
}
@Test
public void testAddSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->add(OrderedSet{1,2,3})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class)), setType(classType(Integer.class))),
types);
}
@Test
public void testAddListNothingString() {
VariableBuilder variables = new VariableBuilder().addVar("self", sequenceType(nothingType("Empty")));
final IValidationResult validationResult = validate("self->add('hello')", variables.build());
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, "Empty collection: Empty", 0, 4);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAddListStringNothing() {
VariableBuilder variables = new VariableBuilder().addVar("self", nothingType("Empty"));
final IValidationResult validationResult = validate("Sequence{'hello'}->add(self)", variables.build());
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, "Empty", 23, 27);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertTrue(types.isEmpty());
}
@Test
public void testAddList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->add(Sequence{1,2,3})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class)),
sequenceType(classType(Integer.class))), types);
}
@Test
public void testSubEmptyListEmptyList() {
final IValidationResult validationResult = validate("Sequence{}->sub(Sequence{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, "Empty collection: Empty Sequence defined in extension", 0, 27);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Empty Sequence defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testSubIntListRealList() {
final IValidationResult validationResult = validate("Sequence{1, 2, 3}->sub(Sequence{2.0})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class))), types);
}
@Test
public void testSubEmptyListEmptySet() {
final IValidationResult validationResult = validate("Sequence{}->sub(OrderedSet{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, "Empty collection: Empty Sequence defined in extension", 0, 29);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Empty Sequence defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testSubIntListRealSet() {
final IValidationResult validationResult = validate("Sequence{1, 2, 3}->sub(OrderedSet{2.0})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class))), types);
}
@Test
public void testSubListNull() {
final IValidationResult validationResult = validate("Sequence{}->sub(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, "Empty collection: Empty Sequence defined in extension", 0, 21);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Empty Sequence defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testSubListNullAsList() {
final IValidationResult validationResult = validate("Sequence{}->sub(null->asSequence())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
20, 34);
ValidationTest.assertValidationMessage(validationResult.getMessages().get(1),
ValidationMessageLevel.INFO, "Empty collection: Empty Sequence defined in extension", 0, 35);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Empty Sequence defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testSubListNullAsSet() {
final IValidationResult validationResult = validate("Sequence{}->sub(null->asSet())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
20, 29);
ValidationTest.assertValidationMessage(validationResult.getMessages().get(1),
ValidationMessageLevel.INFO, "Empty collection: Empty Sequence defined in extension", 0, 30);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Empty Sequence defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testSubNullList() {
final IValidationResult validationResult = validate("null->sub(Sequence{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
0, 21);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testSubNullSet() {
final IValidationResult validationResult = validate("null->sub(OrderedSet{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
0, 23);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testSubEmptySetEmptySet() {
final IValidationResult validationResult = validate("OrderedSet{}->sub(OrderedSet{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(validationResult.getMessages().get(0), ValidationMessageLevel.INFO,
"Empty collection: Empty OrderedSet defined in extension", 0, 31);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testSubIntSetRealSet() {
final IValidationResult validationResult = validate("OrderedSet{1, 2, 3}->sub(OrderedSet{2.0})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class))), types);
}
@Test
public void testSubEmptySetEmptyList() {
final IValidationResult validationResult = validate("OrderedSet{}->sub(Sequence{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(validationResult.getMessages().get(0), ValidationMessageLevel.INFO,
"Empty collection: Empty OrderedSet defined in extension", 0, 29);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testSubIntSetRealList() {
final IValidationResult validationResult = validate("OrderedSet{1, 2, 3}->sub(Sequence{2.0})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class))), types);
}
@Test
public void testSubSetNull() {
final IValidationResult validationResult = validate("OrderedSet{}->sub(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(validationResult.getMessages().get(0), ValidationMessageLevel.INFO,
"Empty collection: Empty OrderedSet defined in extension", 0, 23);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testSubSetNullAsList() {
final IValidationResult validationResult = validate("OrderedSet{}->sub(null->asSequence())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
22, 36);
ValidationTest
.assertValidationMessage(validationResult.getMessages().get(1), ValidationMessageLevel.INFO,
"Empty collection: Empty OrderedSet defined in extension", 0, 37);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testSubSetNullAsSet() {
final IValidationResult validationResult = validate("OrderedSet{}->sub(null->asSet())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
22, 31);
ValidationTest
.assertValidationMessage(validationResult.getMessages().get(1), ValidationMessageLevel.INFO,
"Empty collection: Empty OrderedSet defined in extension", 0, 32);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testIncludingList() {
final IValidationResult validationResult = validate("Sequence{1}->including(2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class))), types);
}
@Test
public void testIncludingListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{1}->including('hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class))), types);
}
@Test
public void testIncludingListNull() {
final IValidationResult validationResult = validate("Sequence{1}->including(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)), sequenceType(classType(null))),
types);
}
@Test
public void testIncludingOnNull() {
final IValidationResult validationResult = validate("null->including(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(null))), types);
}
@Test
public void testIncludingSet() {
final IValidationResult validationResult = validate("OrderedSet{1}->including(2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class))), types);
}
@Test
public void testIncludingSetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{1}->including('hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(String.class))),
types);
}
@Test
public void testIncludingSetNull() {
final IValidationResult validationResult = validate("OrderedSet{1}->including(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(null))), types);
}
@Test
public void testExcludingList() {
final IValidationResult validationResult = validate("Sequence{1}->excluding(2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class))), types);
}
@Test
public void testExcludingListNull() {
final IValidationResult validationResult = validate("Sequence{1}->excluding(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class))), types);
}
@Test
public void testExcludingOnNull() {
final IValidationResult validationResult = validate("null->excluding(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
4, 21);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testExcludingSet() {
final IValidationResult validationResult = validate("OrderedSet{1}->excluding(2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class))), types);
}
@Test
public void testExcludingSetNull() {
final IValidationResult validationResult = validate("OrderedSet{1}->excluding(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class))), types);
}
@Test
public void testReverseList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->reverse()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testReverseOnNull() {
final IValidationResult validationResult = validate("null->reverse()");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
4, 15);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testReverseSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->reverse()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testIsEmptyList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->isEmpty()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsEmptyOnNull() {
final IValidationResult validationResult = validate("null->isEmpty()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsEmptySet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->isEmpty()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testNotEmptyList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->notEmpty()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testNotEmptyOnNull() {
final IValidationResult validationResult = validate("null->notEmpty()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testNotEmptySet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->notEmpty()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testFirstList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->first()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testFirstEmptyList() {
final IValidationResult validationResult = validate("Sequence{}->first()");
String message = "Empty Sequence defined in extension";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, message, 10, 19);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testFirstListMultipleTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 1}->first()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class), classType(Integer.class)), types);
}
@Test
public void testFirstOnNull() {
final IValidationResult validationResult = validate("null->first()");
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, message, 4, 13);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testFirstSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->first()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testFirstSetMultipleTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 1}->first()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class), classType(Integer.class)), types);
}
@Test
public void testFirstEmptySet() {
final IValidationResult validationResult = validate("OrderedSet{}->first()");
String message = "Empty OrderedSet defined in extension";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, message, 12, 21);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testAtList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->at(1)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAtListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 1}->at(1)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class), classType(Integer.class)), types);
}
@Test
public void testAtListOutOfBounds() {
final IValidationResult validationResult = validate("Sequence{'hello'}->at(3)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAtListZero() {
final IValidationResult validationResult = validate("Sequence{'hello'}->at(0)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAtListNull() {
final IValidationResult validationResult = validate("Sequence{1}->at(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testAtOnNull() {
final IValidationResult validationResult = validate("null->asSequence()->at(0)");
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
4, 18);
ValidationTest.assertValidationMessage(validationResult.getMessages().get(1),
ValidationMessageLevel.ERROR, message, 18, 25);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testSizeList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->size()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testSizeEmptyList() {
final IValidationResult validationResult = validate("Sequence{}->size()");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testSizeOnNull() {
final IValidationResult validationResult = validate("Sequence{}->size()");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testSizeSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->size()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testSizeEmptySet() {
final IValidationResult validationResult = validate("OrderedSet{}->size()");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testAsSetSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->asSet()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testAsSetList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->asSet()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testAsSetSetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 1}->asSet()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class)), setType(classType(Integer.class))),
types);
}
@Test
public void testAsSetListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 1}->asSet()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class)), setType(classType(Integer.class))),
types);
}
@Test
public void testAsOrderedSetSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->asOrderedSet()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testAsOrderedSetList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->asOrderedSet()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testAsOrderedSetSetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 1}->asOrderedSet()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class)), setType(classType(Integer.class))),
types);
}
@Test
public void testAsOrderedSetListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 1}->asOrderedSet()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class)), setType(classType(Integer.class))),
types);
}
@Test
public void testAsSequenceSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->asSequence()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testAsSequenceList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->asSequence()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testAsSequenceSetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 1}->asSequence()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class)),
sequenceType(classType(Integer.class))), types);
}
@Test
public void testAsSequenceListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 1}->asSequence()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class)),
sequenceType(classType(Integer.class))), types);
}
@Test
public void testSortedBySet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->sortedBy(i | i.size())");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testSortedBySetContainingNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', null, 'world'}->sortedBy(i | i.size())");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class)), setType(classType(null))), types);
}
@Test
public void testSortedBySetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 1, 1.5}->sortedBy(i | i)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class)), setType(classType(Integer.class)),
setType(classType(Double.class))), types);
}
@Test
public void testSortedBySetEObjectName() {
final EPackage ePkg = EcorePackage.eINSTANCE.getEcoreFactory().createEPackage();
ePkg.setName("ePkg");
ePkg.setNsPrefix("ePkg");
final EClass eCls1 = EcorePackage.eINSTANCE.getEcoreFactory().createEClass();
eCls1.setName("eCls1");
ePkg.getEClassifiers().add(eCls1);
final EClass eCls2 = EcorePackage.eINSTANCE.getEcoreFactory().createEClass();
eCls2.setName("eCls2");
ePkg.getEClassifiers().add(eCls2);
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
VariableBuilder variables = new VariableBuilder().addVar("eCls1",
eClassifierType(EcorePackage.eINSTANCE.getEClass())).addVar("eCls2",
eClassifierType(EcorePackage.eINSTANCE.getEClass()));
final IValidationResult validationResult = validate("OrderedSet{eCls1, eCls2}->sortedBy(i | i.name)",
variables.build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(eClassifierType(EcorePackage.eINSTANCE.getEClass()))), types);
}
@Test
public void testSortedBySetNoComparableLambda() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->sortedBy(i | i->asSequence())");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testSortedBySetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->sortedBy(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testSortedByOnNull() {
// FIXME "null.size()" shouldn't have been found
final IValidationResult validationResult = validate("null->sortedBy(i | i.size())");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
4, 28);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testSortedByList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->sortedBy(i | i.size())");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testSortedByListContainingNull() {
final IValidationResult validationResult = validate("Sequence{'hello', null, 'world'}->sortedBy(i | i.size())");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class)), sequenceType(classType(null))),
types);
}
@Test
public void testSortedByListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 1, 1.5}->sortedBy(i | i)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class)),
sequenceType(classType(Integer.class)), sequenceType(classType(Double.class))), types);
}
@Test
public void testSortedByListEObjectName() {
final EPackage ePkg = EcorePackage.eINSTANCE.getEcoreFactory().createEPackage();
ePkg.setName("ePkg");
ePkg.setNsPrefix("ePkg");
final EClass eCls1 = EcorePackage.eINSTANCE.getEcoreFactory().createEClass();
eCls1.setName("eCls1");
ePkg.getEClassifiers().add(eCls1);
final EClass eCls2 = EcorePackage.eINSTANCE.getEcoreFactory().createEClass();
eCls2.setName("eCls2");
ePkg.getEClassifiers().add(eCls2);
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
VariableBuilder variables = new VariableBuilder().addVar("eCls1",
eClassifierType(EcorePackage.eINSTANCE.getEClass())).addVar("eCls2",
eClassifierType(EcorePackage.eINSTANCE.getEClass()));
final IValidationResult validationResult = validate("Sequence{eCls1, eCls2}->sortedBy(i | i.name)",
variables.build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(eClassifierType(EcorePackage.eINSTANCE.getEClass()))),
types);
}
@Test
public void testSortedByListNoComparableLambda() {
final IValidationResult validationResult = validate("Sequence{'hello'}->sortedBy(i | i->asSequence())");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testSortedByListNull() {
final IValidationResult validationResult = validate("Sequence{'hello'}->sortedBy(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testSelectList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->select(i | i.size() = 5)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testSelectListAlwaysTrue() {
final IValidationResult validationResult = validate("Sequence{'hello'}->select(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, message, 30, 51);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testSelectListAlwaysFalse() {
final IValidationResult validationResult = validate("Sequence{'hello'}->select(i | not i.oclIsKindOf(Integer))");
String message = "Always false:\nNothing inferred when i (java.lang.String) is kind of java.lang.Integer";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, message, 34, 56);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testSelectListNull() {
final IValidationResult validationResult = validate("Sequence{'hello'}->select(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: expression in a select must return a boolean", 17, 31);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "expression in a select must return a boolean";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testSelectListNotBooleanLambda() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->select(i | i.size())");
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: expression in a select must return a boolean", 26, 48);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "expression in a select must return a boolean";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testSelectOnNull() {
final IValidationResult validationResult = validate("null->select(i | i <> null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
4, 27);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testSelectSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->select(i | i.size() = 5)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testSelectSetAlwaysTrue() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->select(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, message, 32, 53);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testSelectSetAlwaysFalse() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->select(i | i.oclIsKindOf(Integer))");
String message = "Always false:\nNothing inferred when i (java.lang.String) is kind of java.lang.Integer";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, message, 32, 54);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testSelectSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->select(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: expression in a select must return a boolean", 19, 33);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "expression in a select must return a boolean";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testSelectSetNotBooleanLambda() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->select(i | i.size())");
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: expression in a select must return a boolean", 28, 50);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "expression in a select must return a boolean";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testRejectList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->reject(i | i.size() = 5)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testRejectListNull() {
final IValidationResult validationResult = validate("Sequence{'hello'}->reject(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: expression in a reject must return a boolean", 17, 31);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "expression in a reject must return a boolean";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testRejectListNotBooleanLambda() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->reject(i | i.size())");
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: expression in a reject must return a boolean", 26, 48);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "expression in a reject must return a boolean";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testRejectOnNull() {
final IValidationResult validationResult = validate("null->reject(i | i.size() = 5)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
4, 30);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testRejectSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->reject(i | i.size() = 5)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testRejectSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->reject(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: expression in a reject must return a boolean", 19, 33);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "expression in a reject must return a boolean";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testRejectSetNotBooleanLambda() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->reject(i | i.size())");
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: expression in a reject must return a boolean", 28, 50);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "expression in a reject must return a boolean";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testCollectList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->collect(i | i.size())");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class))), types);
}
@Test
public void testCollectListImplicitFlatten() {
final IValidationResult validationResult = validate("Sequence{Sequence{'hello'}, Sequence{OrderedSet{1}}}->collect(i | i)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class)),
sequenceType(classType(Integer.class))), types);
}
@Test
public void testCollectListNull() {
final IValidationResult validationResult = validate("Sequence{'hello'}->collect(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
// FIXME this shouldn't even parse in the first place
assertEquals(ImmutableSet.of(), types);
// String message = "expression in a reject must return a boolean";
// assertEquals(1, types.size());
// IType type = types.iterator().next();
// assertTrue(type instanceof SequenceType);
// assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
// assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testCollectListNullPruned() {
final IValidationResult validationResult = validate("Sequence{'hello', 1, 3.1}->collect(i | if i.oclIsKindOf(String) then i else null endif)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testCollectListAlwaysTrueBoolean() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->collect(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, message, 40, 61);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Boolean.class))), types);
}
@Test
public void testCollectListAlwaysFalseBoolean() {
final IValidationResult validationResult = validate("Sequence{1, 2}->collect(i | i.oclIsKindOf(String))");
String message = "Always false:\nNothing inferred when i (java.lang.Integer) is kind of java.lang.String";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, message, 28, 49);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Boolean.class))), types);
}
@Test
public void testCollectOnNull() {
final IValidationResult validationResult = validate("null->collect(i | i.size())");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
4, 27);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testCollectSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->collect(i | i.size())");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class))), types);
}
@Test
public void testCollectSetImplicitFlatten() {
final IValidationResult validationResult = validate("OrderedSet{Sequence{'hello'}, Sequence{OrderedSet{1}}}->collect(i | i)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class)), setType(classType(Integer.class))),
types);
}
@Test
public void testCollectSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->collect(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
// FIXME this shouldn't even parse in the first place
assertEquals(ImmutableSet.of(), types);
// String message = "expression in a reject must return a boolean";
// assertEquals(1, types.size());
// IType type = types.iterator().next();
// assertTrue(type instanceof SetType);
// assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
// assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testCollectSetNullPruned() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 1, 3.1}->collect(i | if i.oclIsKindOf(String) then i else null endif)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testCollectSetAlwaysTrueBoolean() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->collect(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, message, 42, 63);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Boolean.class))), types);
}
@Test
public void testCollectSetAlwaysFalseBoolean() {
final IValidationResult validationResult = validate("OrderedSet{1, 2}->collect(i | i.oclIsKindOf(String))");
String message = "Always false:\nNothing inferred when i (java.lang.Integer) is kind of java.lang.String";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.INFO, message, 30, 51);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Boolean.class))), types);
}
@Test
public void testClosureList() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate("Sequence{pkg}->closure(i | i.eSubpackages)",
new VariableBuilder().addVar("pkg", eClassifierType(EcorePackage.eINSTANCE.getEPackage()))
.build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(eClassifierType(EcorePackage.eINSTANCE.getEPackage()))), types);
}
@Test
public void testClosureListMultipleTypes() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate(
"Sequence{pkg}->closure(i | i.eSubpackages->union(i.eClassifiers))", new VariableBuilder()
.addVar("pkg", eClassifierType(EcorePackage.eINSTANCE.getEPackage())).build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(eClassifierType(EcorePackage.eINSTANCE.getEPackage())),
setType(eClassifierType(EcorePackage.eINSTANCE.getEClassifier()))), types);
}
@Test
public void testClosureListNull() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate("Sequence{pkg}->closure(null)",
new VariableBuilder().addVar("pkg", eClassifierType(EcorePackage.eINSTANCE.getEPackage()))
.build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
// FIXME shouldn't parse
assertEquals(ImmutableSet.of(setType(classType(null))), types);
}
@Test
public void testClosureOnNull() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate("null->closure(i : ecore::EPackage | i.eSubpackages)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
4, 51);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testClosureSet() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate("OrderedSet{pkg}->closure(i | i.eSubpackages)",
new VariableBuilder().addVar("pkg", eClassifierType(EcorePackage.eINSTANCE.getEPackage()))
.build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(eClassifierType(EcorePackage.eINSTANCE.getEPackage()))), types);
}
@Test
public void testClosureSetMultipleTypes() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate(
"OrderedSet{pkg}->closure(i | i.eSubpackages->union(i.eClassifiers))", new VariableBuilder()
.addVar("pkg", eClassifierType(EcorePackage.eINSTANCE.getEPackage())).build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(eClassifierType(EcorePackage.eINSTANCE.getEPackage())),
setType(eClassifierType(EcorePackage.eINSTANCE.getEClassifier()))), types);
}
@Test
public void testClosureSetNull() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate("OrderedSet{pkg}->closure(null)",
new VariableBuilder().addVar("pkg", eClassifierType(EcorePackage.eINSTANCE.getEPackage()))
.build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
// FIXME shouldn't parse
assertEquals(ImmutableSet.of(setType(classType(null))), types);
}
@Test
public void testFilterList() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate(
"Sequence{pkg}.eClassifiers->filter(ecore::EClass)", new VariableBuilder().addVar("pkg",
eClassifierType(EcorePackage.eINSTANCE.getEPackage())).build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(eClassifierType(EcorePackage.eINSTANCE.getEClass()))),
types);
}
@Test
public void testFilterListMultipleTypes() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate(
"Sequence{pkg}.eClassifiers->filter({ecore::EClass | ecore::EDataType})",
new VariableBuilder().addVar("pkg", eClassifierType(EcorePackage.eINSTANCE.getEPackage()))
.build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(eClassifierType(EcorePackage.eINSTANCE.getEClass())),
sequenceType(eClassifierType(EcorePackage.eINSTANCE.getEDataType()))), types);
}
@Test
public void testFilterListMultipleTypesSameHierarchy() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate(
"Sequence{pkg}.eClassifiers->filter({ecore::EClass | ecore::EClassifier})",
new VariableBuilder().addVar("pkg", eClassifierType(EcorePackage.eINSTANCE.getEPackage()))
.build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(eClassifierType(EcorePackage.eINSTANCE.getEClass())),
sequenceType(eClassifierType(EcorePackage.eINSTANCE.getEClassifier()))), types);
}
@Test
public void testFilterListNull() {
final IValidationResult validationResult = validate("Sequence{'hello'}->filter(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing will be left after calling filter:\nEClassifier on filter cannot be null.",
17, 31);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing will be left after calling filter:\nEClassifier on filter cannot be null.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testFilterOnNull() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate("null->filter(ecore::EClass)",
new VariableBuilder().addVar("pkg", eClassifierType(EcorePackage.eINSTANCE.getEPackage()))
.build());
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing will be left after calling filter:\nThe Collection was empty due to a null value being wrapped as a Collection.",
4, 27);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing will be left after calling filter:\nThe Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testFilterSet() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate(
"OrderedSet{pkg}.eClassifiers->filter(ecore::EClass)", new VariableBuilder().addVar("pkg",
eClassifierType(EcorePackage.eINSTANCE.getEPackage())).build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(eClassifierType(EcorePackage.eINSTANCE.getEClass()))), types);
}
@Test
public void testFilterSetMultipleTypes() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate(
"OrderedSet{pkg}.eClassifiers->filter({ecore::EClass | ecore::EDataType})",
new VariableBuilder().addVar("pkg", eClassifierType(EcorePackage.eINSTANCE.getEPackage()))
.build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(eClassifierType(EcorePackage.eINSTANCE.getEClass())),
setType(eClassifierType(EcorePackage.eINSTANCE.getEDataType()))), types);
}
@Test
public void testFilterSetMultipleTypesSameHierarchy() {
getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
final IValidationResult validationResult = validate(
"OrderedSet{pkg}.eClassifiers->filter({ecore::EClass | ecore::EClassifier})",
new VariableBuilder().addVar("pkg", eClassifierType(EcorePackage.eINSTANCE.getEPackage()))
.build());
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(eClassifierType(EcorePackage.eINSTANCE.getEClass())),
setType(eClassifierType(EcorePackage.eINSTANCE.getEClassifier()))), types);
}
@Test
public void testFilterSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->filter(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing will be left after calling filter:\nEClassifier on filter cannot be null.",
19, 33);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing will be left after calling filter:\nEClassifier on filter cannot be null.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testSepList() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->sep(' ')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testSepListNull() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->sep(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class)), sequenceType(classType(null))),
types);
}
@Test
public void testSepOnNull() {
final IValidationResult validationResult = validate("null->sep(' ')");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
4, 14);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(2, types.size());
Iterator<IType> typeItr = types.iterator();
IType type = typeItr.next();
if (!type.equals(sequenceType(classType(String.class)))) {
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
type = typeItr.next();
assertEquals(sequenceType(classType(String.class)), type);
} else {
type = typeItr.next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
}
@Test
public void testSepSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->sep(' ')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testSepSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->sep(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class)), sequenceType(classType(null))),
types);
}
@Test
public void testSepPrefixSuffixListNullPrefixNullSeparatorNullSuffix() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->sep(null, null, null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class)), sequenceType(classType(null))),
types);
}
@Test
public void testSepPrefixSuffixListNullSeparatorNullSuffix() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->sep(1, null, null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class)), sequenceType(classType(null))), types);
}
@Test
public void testSepPrefixSuffixListNullSuffix() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->sep(1, 2, null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class)), sequenceType(classType(null))), types);
}
@Test
public void testSepPrefixSuffixListNullSeparator() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->sep(1, null, 3)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class)), sequenceType(classType(null))), types);
}
@Test
public void testSepPrefixSuffixListNullPrefixNullSuffix() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->sep(null, 2, null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class)), sequenceType(classType(null))), types);
}
@Test
public void testSepPrefixSuffixListNullPrefixNullSeparator() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->sep(null, null, 3)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class)), sequenceType(classType(null))), types);
}
@Test
public void testSepPrefixSuffixListNullPrefix() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->sep(null, 2, 3)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class)), sequenceType(classType(null))), types);
}
@Test
public void testSepPrefixSuffixList() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->sep(1, 2, 3)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class))), types);
}
@Test
public void testSepPrefixSuffixOnNull() {
final IValidationResult validationResult = validate("null->sep(1, 2, 3)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
4, 18);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(2, types.size());
Iterator<IType> typeItr = types.iterator();
IType type = typeItr.next();
if (!type.equals(sequenceType(classType(Integer.class)))) {
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
type = typeItr.next();
assertEquals(sequenceType(classType(Integer.class)), type);
} else {
type = typeItr.next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
}
@Test
public void testSepPrefixSuffixSetNullPrefixNullSeparatorNullSuffix() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->sep(null, null, null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class)), sequenceType(classType(null))),
types);
}
@Test
public void testSepPrefixSuffixSetNullSeparatorNullSuffix() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->sep(1, null, null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class)), sequenceType(classType(null))), types);
}
@Test
public void testSepPrefixSuffixSetNullSuffix() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->sep(1, 2, null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class)), sequenceType(classType(null))), types);
}
@Test
public void testSepPrefixSuffixSetNullSeparator() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->sep(1, null, 3)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class)), sequenceType(classType(null))), types);
}
@Test
public void testSepPrefixSuffixSetNullPrefixNullSuffix() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->sep(null, 2, null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class)), sequenceType(classType(null))), types);
}
@Test
public void testSepPrefixSuffixSetNullPrefixNullSeparator() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->sep(null, null, 3)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class)), sequenceType(classType(null))), types);
}
@Test
public void testSepPrefixSuffixSetNullPrefix() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->sep(null, 2, 3)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class)), sequenceType(classType(null))), types);
}
@Test
public void testSepPrefixSuffixSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->sep(1, 2, 3)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(String.class))), types);
}
@Test
public void testLastList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->last()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testLastEmptyList() {
final IValidationResult validationResult = validate("Sequence{}->last()");
String message = "Empty Sequence defined in extension";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, message, 10, 18);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testLastListMultipleTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 1}->last()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class), classType(Integer.class)), types);
}
@Test
public void testLastOnNull() {
final IValidationResult validationResult = validate("null->last()");
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testLastSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->last()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testLastSetMultipleTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 1}->last()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class), classType(Integer.class)), types);
}
@Test
public void testLastEmptySet() {
final IValidationResult validationResult = validate("OrderedSet{}->last()");
String message = "Empty OrderedSet defined in extension";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, message, 12, 20);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testExcludesList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->excludes('hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesEmptyList() {
final IValidationResult validationResult = validate("Sequence{}->excludes('hello')");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesListMultipleTypes() {
final IValidationResult validationResult = validate("Sequence{1, 'hello', 2.0}->excludes('world')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesListNull() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->excludes(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesOnNull() {
final IValidationResult validationResult = validate("null->excludes('hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->excludes('hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesSetList() {
final IValidationResult validationResult = validate("OrderedSet{}->excludes('hello')");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesSetMultipleTypes() {
final IValidationResult validationResult = validate("OrderedSet{1, 'hello', 2.0}->excludes('world')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->excludes(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->includes('hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesEmptyList() {
final IValidationResult validationResult = validate("Sequence{}->includes('hello')");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesListMultipleTypes() {
final IValidationResult validationResult = validate("Sequence{1, 'hello', 2.0}->includes('world')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesListNull() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->includes(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesOnNull() {
final IValidationResult validationResult = validate("null->includes('hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->includes('hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesSetList() {
final IValidationResult validationResult = validate("OrderedSet{}->includes('hello')");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesSetMultipleTypes() {
final IValidationResult validationResult = validate("OrderedSet{1, 'hello', 2.0}->includes('world')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->includes(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testAnyList() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->any(i | i.size() > 2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAnyListAlwaysTrue() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->any(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAnyListAlwaysFalse() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->any(i | i.oclIsKindOf(Integer))");
String message = "Always false:\nNothing inferred when i (java.lang.String) is kind of java.lang.Integer";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAnyListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 1, 2.0}->any(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class), classType(Integer.class),
classType(Double.class)), types);
}
@Test
public void testAnyListDifferentTypesNarrowing() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 1, 2.0}->any(i | i.oclIsKindOf(String))");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAnyListNotBooleanLambda() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->any(i | i.size())");
String message = "expression in an any must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testAnyListNull() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->any(null)");
String message = "expression in an any must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testAnyOnNull() {
final IValidationResult validationResult = validate("null->any(i | i <> null)");
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testAnySet() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->any(i | i.size() > 2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAnySetAlwaysTrue() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->any(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAnySetAlwaysFalse() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->any(i | i.oclIsKindOf(Integer))");
String message = "Always false:\nNothing inferred when i (java.lang.String) is kind of java.lang.Integer";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAnySetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 1, 2.0}->any(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class), classType(Integer.class),
classType(Double.class)), types);
}
@Test
public void testAnySetDifferentTypesNarrowing() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 1, 2.0}->any(i | i.oclIsKindOf(String))");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(String.class)), types);
}
@Test
public void testAnySetNotBooleanLambda() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->any(i | i.size())");
String message = "expression in an any must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testAnySetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->any(null)");
String message = "expression in an any must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testCountList() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 'map', 'map', 'hello'}->count('map')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testCountListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 1, 2, 1, 3}->count(1)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testCountListNull() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 'map', 'map', 'hello'}->count(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testCountOnNull() {
final IValidationResult validationResult = validate("null->count(1)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testCountSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 'map', 'map', 'hello'}->count('map')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testCountSetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 1, 2, 1, 3}->count(1)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testCountSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 'map', 'map', 'hello'}->count(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testExistsList() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->exists(i | i.size() > 2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExistsListAlwaysTrue() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->exists(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExistsListAlwaysFalse() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->exists(i | i.oclIsKindOf(Integer))");
String message = "Always false:\nNothing inferred when i (java.lang.String) is kind of java.lang.Integer";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExistsListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 1, 2.0}->exists(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExistsListDifferentTypesNarrowing() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 1, 2.0}->exists(i | i.oclIsKindOf(String))");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExistsListNotBooleanLambda() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->exists(i | i.size())");
String message = "expression in exists must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testExistsListNull() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->exists(null)");
String message = "expression in exists must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testExistsOnNull() {
final IValidationResult validationResult = validate("null->exists(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExistsSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->exists(i | i.size() > 2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExistsSetAlwaysTrue() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->exists(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExistsSetAlwaysFalse() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->exists(i | i.oclIsKindOf(Integer))");
String message = "Always false:\nNothing inferred when i (java.lang.String) is kind of java.lang.Integer";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExistsSetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 1, 2.0}->exists(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExistsSetDifferentTypesNarrowing() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 1, 2.0}->exists(i | i.oclIsKindOf(String))");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExistsSetNotBooleanLambda() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->exists(i | i.size())");
String message = "expression in exists must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testExistsSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->exists(null)");
String message = "expression in exists must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testForAllList() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->forAll(i | i.size() > 2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testForAllListAlwaysTrue() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->forAll(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testForAllListAlwaysFalse() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->forAll(i | i.oclIsKindOf(Integer))");
String message = "Always false:\nNothing inferred when i (java.lang.String) is kind of java.lang.Integer";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testForAllListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 1, 2.0}->forAll(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testForAllListDifferentTypesNarrowing() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 1, 2.0}->forAll(i | i.oclIsKindOf(String))");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testForAllListNotBooleanLambda() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->forAll(i | i.size())");
String message = "expression in forAll must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testForAllListNull() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->forAll(null)");
String message = "expression in forAll must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testForAllOnNull() {
final IValidationResult validationResult = validate("null->forAll(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testForAllSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->forAll(i | i.size() > 2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testForAllSetAlwaysTrue() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->forAll(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testForAllSetAlwaysFalse() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->forAll(i | i.oclIsKindOf(Integer))");
String message = "Always false:\nNothing inferred when i (java.lang.String) is kind of java.lang.Integer";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testForAllSetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 1, 2.0}->forAll(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testForAllSetDifferentTypesNarrowing() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 1, 2.0}->forAll(i | i.oclIsKindOf(String))");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testForAllSetNotBooleanLambda() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->forAll(i | i.size())");
String message = "expression in forAll must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testForAllSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->forAll(null)");
String message = "expression in forAll must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testExcludesAllListList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->excludesAll(Sequence{'hello', 'world'})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllListSet() {
final IValidationResult validationResult = validate("Sequence{'hello'}->excludesAll(OrderedSet{'hello', 'world'})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllEmptyListList() {
final IValidationResult validationResult = validate("Sequence{}->excludesAll(Sequence{'hello', 'world'})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllEmptyListSet() {
final IValidationResult validationResult = validate("Sequence{}->excludesAll(OrderedSet{'hello', 'world'})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllListEmptyList() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->excludesAll(Sequence{})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllListEmptySet() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->excludesAll(OrderedSet{})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllListListMultipleTypes() {
final IValidationResult validationResult = validate("Sequence{1, 'hello', 2.0}->excludesAll(Sequence{'world', null})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllListSetMultipleTypes() {
final IValidationResult validationResult = validate("Sequence{1, 'hello', 2.0}->excludesAll(OrderedSet{'world', null})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllListNull() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->excludesAll(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllOnNullList() {
final IValidationResult validationResult = validate("null->excludesAll(Sequence{'hello'})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllOnNullSet() {
final IValidationResult validationResult = validate("null->excludesAll(OrderedSet{'hello'})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllSetList() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->excludesAll(Sequence{'hello', 'world'})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllSetSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->excludesAll(OrderedSet{'hello', 'world'})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllEmptySetList() {
final IValidationResult validationResult = validate("OrderedSet{}->excludesAll(Sequence{'hello', 'world'})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllEmptySetSet() {
final IValidationResult validationResult = validate("OrderedSet{}->excludesAll(OrderedSet{'hello', 'world'})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllSetEmptyList() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->excludesAll(Sequence{})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllSetEmptySet() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->excludesAll(OrderedSet{})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllSetListMultipleTypes() {
final IValidationResult validationResult = validate("OrderedSet{1, 'hello', 2.0}->excludesAll(Sequence{'world', null})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllSetSetMultipleTypes() {
final IValidationResult validationResult = validate("OrderedSet{1, 'hello', 2.0}->excludesAll(OrderedSet{'world', null})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testExcludesAllSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->excludesAll(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllListList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->includesAll(Sequence{'hello', 'world'})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllListSet() {
final IValidationResult validationResult = validate("Sequence{'hello'}->includesAll(OrderedSet{'hello', 'world'})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllEmptyListList() {
final IValidationResult validationResult = validate("Sequence{}->includesAll(Sequence{'hello', 'world'})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllEmptyListSet() {
final IValidationResult validationResult = validate("Sequence{}->includesAll(OrderedSet{'hello', 'world'})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllListEmptyList() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->includesAll(Sequence{})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllListEmptySet() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->includesAll(OrderedSet{})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllListListMultipleTypes() {
final IValidationResult validationResult = validate("Sequence{1, 'hello', 2.0}->includesAll(Sequence{'world', null})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllListSetMultipleTypes() {
final IValidationResult validationResult = validate("Sequence{1, 'hello', 2.0}->includesAll(OrderedSet{'world', null})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllListNull() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->includesAll(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllOnNullList() {
final IValidationResult validationResult = validate("null->includesAll(Sequence{'hello'})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllOnNullSet() {
final IValidationResult validationResult = validate("null->includesAll(OrderedSet{'hello'})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllSetList() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->includesAll(Sequence{'hello', 'world'})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllSetSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->includesAll(OrderedSet{'hello', 'world'})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllEmptySetList() {
final IValidationResult validationResult = validate("OrderedSet{}->includesAll(Sequence{'hello', 'world'})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllEmptySetSet() {
final IValidationResult validationResult = validate("OrderedSet{}->includesAll(OrderedSet{'hello', 'world'})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllSetEmptyList() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->includesAll(Sequence{})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllSetEmptySet() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->includesAll(OrderedSet{})");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllSetListMultipleTypes() {
final IValidationResult validationResult = validate("OrderedSet{1, 'hello', 2.0}->includesAll(Sequence{'world', null})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllSetSetMultipleTypes() {
final IValidationResult validationResult = validate("OrderedSet{1, 'hello', 2.0}->includesAll(OrderedSet{'world', null})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIncludesAllSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->includesAll(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueList() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->isUnique(i | i.size() > 2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueListAlwaysTrue() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->isUnique(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueListAlwaysFalse() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->isUnique(i | i.oclIsKindOf(Integer))");
String message = "Always false:\nNothing inferred when i (java.lang.String) is kind of java.lang.Integer";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 1, 2.0}->isUnique(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueListDifferentTypesNarrowing() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 1, 2.0}->isUnique(i | i.oclIsKindOf(String))");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueListNotBooleanLambda() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->isUnique(i | i.size())");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueListNull() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->isUnique(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueOnNull() {
final IValidationResult validationResult = validate("null->isUnique(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->isUnique(i | i.size() > 2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueSetAlwaysTrue() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->isUnique(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueSetAlwaysFalse() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->isUnique(i | i.oclIsKindOf(Integer))");
String message = "Always false:\nNothing inferred when i (java.lang.String) is kind of java.lang.Integer";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueSetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 1, 2.0}->isUnique(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueSetDifferentTypesNarrowing() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 1, 2.0}->isUnique(i | i.oclIsKindOf(String))");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueSetNotBooleanLambda() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->isUnique(i | i.size())");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testIsUniqueSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->isUnique(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testOneList() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->one(i | i.size() > 2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testOneListAlwaysTrue() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->one(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testOneListAlwaysFalse() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->one(i | i.oclIsKindOf(Integer))");
String message = "Always false:\nNothing inferred when i (java.lang.String) is kind of java.lang.Integer";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testOneListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 1, 2.0}->one(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testOneListDifferentTypesNarrowing() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world', 1, 2.0}->one(i | i.oclIsKindOf(String))");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testOneListNotBooleanLambda() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->one(i | i.size())");
String message = "expression in one must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testOneListNull() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->one(null)");
String message = "expression in one must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testOneOnNull() {
final IValidationResult validationResult = validate("null->one(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testOneSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->one(i | i.size() > 2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testOneSetAlwaysTrue() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->one(i | i.oclIsKindOf(String))");
String message = "Always true:\nNothing inferred when i (java.lang.String) is not kind of java.lang.String";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testOneSetAlwaysFalse() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->one(i | i.oclIsKindOf(Integer))");
String message = "Always false:\nNothing inferred when i (java.lang.String) is kind of java.lang.Integer";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.INFO, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testOneSetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 1, 2.0}->one(i | i <> null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testOneSetDifferentTypesNarrowing() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world', 1, 2.0}->one(i | i.oclIsKindOf(String))");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Boolean.class)), types);
}
@Test
public void testOneSetNotBooleanLambda() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->one(i | i.size())");
String message = "expression in one must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testOneSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->one(null)");
String message = "expression in one must return a boolean";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testSumListIntegers() {
final IValidationResult validationResult = validate("Sequence{1, 2, 3}->sum()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Long.class)), types);
}
@Test
public void testSumListTypeMix() {
final IValidationResult validationResult = validate("Sequence{1, 2, 3.0, 4.0}->sum()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Double.class)), types);
}
@Test
public void testSumListNotNumber() {
final IValidationResult validationResult = validate("Sequence{1, 'potatoes', 2.0}->sum()");
String message = "Sum can only be used on a collection of numbers.";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testSumOnNull() {
final IValidationResult validationResult = validate("null->sum()");
String message = "Sum can only be used on a collection of numbers.";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testSumSetIntegers() {
final IValidationResult validationResult = validate("OrderedSet{1, 2, 3}->sum()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Long.class)), types);
}
@Test
public void testSumSetTypeMix() {
final IValidationResult validationResult = validate("OrderedSet{1, 2, 3.0, 4.0}->sum()");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Double.class)), types);
}
@Test
public void testSumSetNotNumber() {
final IValidationResult validationResult = validate("OrderedSet{1, 'potatoes', 2.0}->sum()");
String message = "Sum can only be used on a collection of numbers.";
assertFalse(validationResult.getMessages().isEmpty());
assertEquals(1, validationResult.getMessages().size());
assertEquals(message, validationResult.getMessages().get(0).getMessage());
assertEquals(ValidationMessageLevel.ERROR, validationResult.getMessages().get(0).getLevel());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof NothingType);
assertEquals(message, ((NothingType)type).getMessage());
}
@Test
public void testIndexOfList() {
final IValidationResult validationResult = validate("Sequence{'hello'}->indexOf('hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testIndexOfEmptyList() {
final IValidationResult validationResult = validate("Sequence{}->indexOf('hello')");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testIndexOfListMultipleTypes() {
final IValidationResult validationResult = validate("Sequence{1, 'hello', 2.0}->indexOf('world')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testIndexOfListNull() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->indexOf(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testIndexOfOnNull() {
final IValidationResult validationResult = validate("null->indexOf('hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testIndexOfSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello'}->indexOf('hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testIndexOfSetList() {
final IValidationResult validationResult = validate("OrderedSet{}->indexOf('hello')");
assertEquals(0, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testIndexOfSetMultipleTypes() {
final IValidationResult validationResult = validate("OrderedSet{1, 'hello', 2.0}->indexOf('world')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testIndexOfSetNull() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->indexOf(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(classType(Integer.class)), types);
}
@Test
public void testInsertAtList() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->insertAt(1, ' ')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testInsertAtListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->insertAt(1, 1)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class)),
sequenceType(classType(Integer.class))), types);
}
@Test
public void testInsertAtListUnderLowerBound() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->insertAt(-1, 'newString')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testInsertAtListOverUpperBound() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->insertAt(3, 'newString')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testInsertAtListLowerBound() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->insertAt(0, 'newString')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testInsertAtListUpperBound() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->insertAt(2, 'newString')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testInsertAtListNull() {
final IValidationResult validationResult = validate("Sequence{1, 2}->insertAt(1, null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)), sequenceType(classType(null))),
types);
}
@Test
public void testInsertAtOnNull() {
final IValidationResult validationResult = validate("null->insertAt(0, 'hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testInsertAtSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->insertAt(1, ' ')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testInsertAtSetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->insertAt(1, 1)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class)), setType(classType(Integer.class))),
types);
}
@Test
public void testInsertAtSetUnderLowerBound() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->insertAt(-1, 'newString')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testInsertAtSetOverUpperBound() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->insertAt(3, 'newString')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testInsertAtSetLowerBound() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->insertAt(0, 'newString')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testInsertAtSetUpperBound() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->insertAt(2, 'newString')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testInsertAtSetNull() {
final IValidationResult validationResult = validate("OrderedSet{1, 2}->insertAt(1, null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(null))), types);
}
@Test
public void testPrependList() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->prepend(' ')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class))), types);
}
@Test
public void testPrependListDifferentTypes() {
final IValidationResult validationResult = validate("Sequence{'hello', 'world'}->prepend(1)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(String.class)),
sequenceType(classType(Integer.class))), types);
}
@Test
public void testPrependListNull() {
final IValidationResult validationResult = validate("Sequence{1, 2}->prepend(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)), sequenceType(classType(null))),
types);
}
@Test
public void testPrependOnNull() {
final IValidationResult validationResult = validate("null->prepend('hello')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testPrependSet() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->prepend(' ')");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class))), types);
}
@Test
public void testPrependSetDifferentTypes() {
final IValidationResult validationResult = validate("OrderedSet{'hello', 'world'}->prepend(1)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(String.class)), setType(classType(Integer.class))),
types);
}
@Test
public void testPrependSetNull() {
final IValidationResult validationResult = validate("OrderedSet{1, 2}->prepend(null)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(null))), types);
}
@Test
public void testIntersectionListList() {
final IValidationResult validationResult = validate("Sequence{1, 2, 3}->intersection(Sequence{2})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class))), types);
}
@Test
public void testIntersectionEmptyListEmptyList() {
final IValidationResult validationResult = validate("Sequence{}->intersection(Sequence{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Empty Sequence defined in extension\n Empty Sequence defined in extension",
10, 36);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Empty Sequence defined in extension\n"
+ " Empty Sequence defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionIntListRealList() {
final IValidationResult validationResult = validate("Sequence{1, 2, 3}->intersection(Sequence{2.0})");
assertEquals(1, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Nothing left after intersection of Sequence(java.lang.Integer) and Sequence(java.lang.Double)";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionListListIncompatibleTypes() {
final IValidationResult validationResult = validate("Sequence{1.0, 2.0, 3.0}->intersection(Sequence{'hello'})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Nothing left after intersection of Sequence(java.lang.Double) and Sequence(java.lang.String)",
23, 56);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n"
+ " Nothing left after intersection of Sequence(java.lang.Double) and Sequence(java.lang.String)";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionListListMixedTypes() {
final IValidationResult validationResult = validate("Sequence{1, 2.0, 3}->intersection(Sequence{'hello', 3})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class))), types);
}
@Test
public void testIntersectionListSet() {
final IValidationResult validationResult = validate("Sequence{1, 2, 3}->intersection(OrderedSet{2})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class))), types);
}
@Test
public void testIntersectionEmptyListEmptySet() {
final IValidationResult validationResult = validate("Sequence{}->intersection(OrderedSet{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Empty Sequence defined in extension\n Empty OrderedSet defined in extension",
10, 38);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Empty Sequence defined in extension\n"
+ " Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionIntListRealSet() {
final IValidationResult validationResult = validate("Sequence{1, 2, 3}->intersection(OrderedSet{2.0})");
assertEquals(1, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Nothing left after intersection of Sequence(java.lang.Integer) and Set(java.lang.Double)";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionListSetIncompatibleTypes() {
final IValidationResult validationResult = validate("Sequence{1.0, 2.0, 3.0}->intersection(OrderedSet{'hello'})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Nothing left after intersection of Sequence(java.lang.Double) and Set(java.lang.String)",
23, 58);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n"
+ " Nothing left after intersection of Sequence(java.lang.Double) and Set(java.lang.String)";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionListSetMixedTypes() {
final IValidationResult validationResult = validate("Sequence{1, 2.0, 3}->intersection(OrderedSet{'hello', 3})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class))), types);
}
@Test
public void testIntersectionListNull() {
final IValidationResult validationResult = validate("Sequence{}->intersection(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Empty Sequence defined in extension\n intersection can only be called on collections, but null was used as its argument.",
10, 30);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Empty Sequence defined in extension\n"
+ " intersection can only be called on collections, but null was used as its argument.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionListNullAsList() {
final IValidationResult validationResult = validate("Sequence{}->intersection(null->asSequence())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
29, 43);
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(1),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Empty Sequence defined in extension\n The Collection was empty due to a null value being wrapped as a Collection.",
10, 44);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Empty Sequence defined in extension\n"
+ " The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionListNullAsSet() {
final IValidationResult validationResult = validate("Sequence{}->intersection(null->asSet())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
29, 38);
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(1),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Empty Sequence defined in extension\n The Collection was empty due to a null value being wrapped as a Collection.",
10, 39);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Empty Sequence defined in extension\n"
+ " The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SequenceType);
assertTrue(((SequenceType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SequenceType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionNullList() {
final IValidationResult validationResult = validate("null->intersection(Sequence{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n The Collection was empty due to a null value being wrapped as a Collection.\n Empty Sequence defined in extension",
4, 30);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n The Collection was empty due to a null value being wrapped as a Collection.\n"
+ " Empty Sequence defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionNullSet() {
final IValidationResult validationResult = validate("null->intersection(OrderedSet{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n The Collection was empty due to a null value being wrapped as a Collection.\n Empty OrderedSet defined in extension",
4, 32);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n The Collection was empty due to a null value being wrapped as a Collection.\n"
+ " Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionSetSet() {
final IValidationResult validationResult = validate("OrderedSet{1, 2, 3}->intersection(OrderedSet{2})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class))), types);
}
@Test
public void testIntersectionEmptySetEmptySet() {
final IValidationResult validationResult = validate("OrderedSet{}->intersection(OrderedSet{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Empty OrderedSet defined in extension\n Empty OrderedSet defined in extension",
12, 40);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Empty OrderedSet defined in extension\n"
+ " Empty OrderedSet defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionIntSetRealSet() {
final IValidationResult validationResult = validate("OrderedSet{1, 2, 3}->intersection(OrderedSet{2.0})");
assertEquals(1, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Nothing left after intersection of Set(java.lang.Integer) and Set(java.lang.Double)";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionSetSetIncompatibleTypes() {
final IValidationResult validationResult = validate("OrderedSet{1.0, 2.0, 3.0}->intersection(OrderedSet{'hello'})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Nothing left after intersection of Set(java.lang.Double) and Set(java.lang.String)",
25, 60);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n"
+ " Nothing left after intersection of Set(java.lang.Double) and Set(java.lang.String)";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionSetSetMixedTypes() {
final IValidationResult validationResult = validate("OrderedSet{1, 2.0, 3}->intersection(OrderedSet{'hello', 3})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class))), types);
}
@Test
public void testIntersectionSetList() {
final IValidationResult validationResult = validate("OrderedSet{1, 2, 3}->intersection(Sequence{2})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class))), types);
}
@Test
public void testIntersectionEmptySetEmptyList() {
final IValidationResult validationResult = validate("OrderedSet{}->intersection(Sequence{})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Empty OrderedSet defined in extension\n Empty Sequence defined in extension",
12, 38);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Empty OrderedSet defined in extension\n"
+ " Empty Sequence defined in extension";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionIntSetRealList() {
final IValidationResult validationResult = validate("OrderedSet{1, 2, 3}->intersection(Sequence{2.0})");
assertEquals(1, validationResult.getMessages().size());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Nothing left after intersection of Set(java.lang.Integer) and Sequence(java.lang.Double)";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionSetListIncompatibleTypes() {
final IValidationResult validationResult = validate("OrderedSet{1.0, 2.0, 3.0}->intersection(Sequence{'hello'})");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Nothing left after intersection of Set(java.lang.Double) and Sequence(java.lang.String)",
25, 58);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n"
+ " Nothing left after intersection of Set(java.lang.Double) and Sequence(java.lang.String)";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionSetListMixedTypes() {
final IValidationResult validationResult = validate("OrderedSet{1, 2.0, 3}->intersection(Sequence{'hello', 3})");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class))), types);
}
@Test
public void testIntersectionSetNull() {
final IValidationResult validationResult = validate("OrderedSet{}->intersection(null)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Empty OrderedSet defined in extension\n intersection can only be called on collections, but null was used as its argument.",
12, 32);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Empty OrderedSet defined in extension\n"
+ " intersection can only be called on collections, but null was used as its argument.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionSetNullAsList() {
final IValidationResult validationResult = validate("OrderedSet{}->intersection(null->asSequence())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
31, 45);
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(1),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Empty OrderedSet defined in extension\n The Collection was empty due to a null value being wrapped as a Collection.",
12, 46);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Empty OrderedSet defined in extension\n"
+ " The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testIntersectionSetNullAsSet() {
final IValidationResult validationResult = validate("OrderedSet{}->intersection(null->asSet())");
assertEquals(2, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
31, 40);
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(1),
ValidationMessageLevel.INFO,
"Empty collection: Nothing left after intersection:\n Empty OrderedSet defined in extension\n The Collection was empty due to a null value being wrapped as a Collection.",
12, 41);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "Nothing left after intersection:\n Empty OrderedSet defined in extension\n"
+ " The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testSubOrderedSet() {
final IValidationResult validationResult = validate("OrderedSet{1, 2.0, 3}->subOrderedSet(2,3)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(Double.class))),
types);
}
@Test
public void testSubOrderedSetStartUnderLowerBound() {
final IValidationResult validationResult = validate("OrderedSet{1, 2.0, 3}->subOrderedSet(0,2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(Double.class))),
types);
}
@Test
public void testSubOrderedSetStartAboveUpperBound() {
final IValidationResult validationResult = validate("OrderedSet{1, 2.0, 3}->subOrderedSet(4,2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(Double.class))),
types);
}
@Test
public void testSubOrderedSetEndUnderLowerBound() {
final IValidationResult validationResult = validate("OrderedSet{1, 2.0, 3}->subOrderedSet(2,0)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(Double.class))),
types);
}
@Test
public void testSubOrderedSetEndAboveUpperBound() {
final IValidationResult validationResult = validate("OrderedSet{1, 2.0, 3}->subOrderedSet(2,4)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(Double.class))),
types);
}
@Test
public void testSubOrderedSetStartHigherThanEnd() {
final IValidationResult validationResult = validate("OrderedSet{1, 2.0, 3}->subOrderedSet(3,2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(Double.class))),
types);
}
@Test
public void testSubOrderedSetStartEqualsEnd() {
final IValidationResult validationResult = validate("OrderedSet{1, 2.0, 3}->subOrderedSet(2,2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(setType(classType(Integer.class)), setType(classType(Double.class))),
types);
}
@Test
public void testSubOrderedSetOnNull() {
final IValidationResult validationResult = validate("null->subOrderedSet(1,1)");
assertEquals(1, validationResult.getMessages().size());
ValidationTest
.assertValidationMessage(
validationResult.getMessages().get(0),
ValidationMessageLevel.INFO,
"Empty collection: The Collection was empty due to a null value being wrapped as a Collection.",
4, 24);
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
String message = "The Collection was empty due to a null value being wrapped as a Collection.";
assertEquals(1, types.size());
IType type = types.iterator().next();
assertTrue(type instanceof SetType);
assertTrue(((SetType)type).getCollectionType() instanceof NothingType);
assertEquals(message, ((NothingType)((SetType)type).getCollectionType()).getMessage());
}
@Test
public void testSubSequence() {
final IValidationResult validationResult = validate("Sequence{1, 2.0, 3}->subSequence(2,3)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(Double.class))), types);
}
@Test
public void testSubSequenceStartUnderLowerBound() {
final IValidationResult validationResult = validate("Sequence{1, 2.0, 3}->subSequence(0,2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(Double.class))), types);
}
@Test
public void testSubSequenceStartAboveUpperBound() {
final IValidationResult validationResult = validate("Sequence{1, 2.0, 3}->subSequence(4,2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(Double.class))), types);
}
@Test
public void testSubSequenceEndUnderLowerBound() {
final IValidationResult validationResult = validate("Sequence{1, 2.0, 3}->subSequence(2,0)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(Double.class))), types);
}
@Test
public void testSubSequenceEndAboveUpperBound() {
final IValidationResult validationResult = validate("Sequence{1, 2.0, 3}->subSequence(2,4)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(Double.class))), types);
}
@Test
public void testSubSequenceStartHigherThanEnd() {
final IValidationResult validationResult = validate("Sequence{1, 2.0, 3}->subSequence(3,2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(Double.class))), types);
}
@Test
public void testSubSequenceStartEqualsEnd() {
final IValidationResult validationResult = validate("Sequence{1, 2.0, 3}->subSequence(2,2)");
assertTrue(validationResult.getMessages().isEmpty());
AstResult ast = validationResult.getAstResult();
Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(ImmutableSet.of(sequenceType(classType(Integer.class)),
sequenceType(classType(Double.class))), types);
}
private static class VariableBuilder {
private Map<String, Set<IType>> variables;
public VariableBuilder() {
variables = new LinkedHashMap<String, Set<IType>>();
}
public VariableBuilder addVar(String name, IType... types) {
variables.put(name, ImmutableSet.copyOf(types));
return this;
}
public Map<String, Set<IType>> build() {
return variables;
}
}
}