blob: fd2aacc0baf51046619fec054735d22645cbcbdc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015, 2021 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 java.util.Collections;
import java.util.Iterator;
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.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class BooleanServicesAstValidationTest extends AbstractServicesValidationTest {
@Test
public void testOrNullNull() {
final IValidationResult validationResult = validate("null or null");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testOrBooleanNull() {
final IValidationResult validationResult = validate("false or null");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testOrNullBoolean() {
final IValidationResult validationResult = validate("null or false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testOrIntegerInteger() {
final IValidationResult validationResult = validate("1 or 1");
final String expectedMessage = "Couldn't find the 'or(java.lang.Integer,java.lang.Integer)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 6);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testOrBooleanInteger() {
final IValidationResult validationResult = validate("false or 1");
final String expectedMessage = "Couldn't find the 'or(java.lang.Boolean,java.lang.Integer)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 10);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testOrIntegerBoolean() {
final IValidationResult validationResult = validate("1 or false");
final String expectedMessage = "Couldn't find the 'or(java.lang.Integer,java.lang.Boolean)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 10);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testOrFalseFalse() {
final IValidationResult validationResult = validate("false or false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testOrFalseTrue() {
final IValidationResult validationResult = validate("false or true");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testOrTrueFalse() {
final IValidationResult validationResult = validate("true or false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testOrTrueTrue() {
final IValidationResult validationResult = validate("true or true");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testAndNullNull() {
final IValidationResult validationResult = validate("null and null");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testAndBooleanNull() {
final IValidationResult validationResult = validate("false and null");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testAndNullBoolean() {
final IValidationResult validationResult = validate("null and false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testAndIntegerInteger() {
final IValidationResult validationResult = validate("1 and 1");
final String expectedMessage = "Couldn't find the 'and(java.lang.Integer,java.lang.Integer)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 7);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testAndBooleanInteger() {
final IValidationResult validationResult = validate("false and 1");
final String expectedMessage = "Couldn't find the 'and(java.lang.Boolean,java.lang.Integer)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 11);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testAndIntegerBoolean() {
final IValidationResult validationResult = validate("1 and false");
final String expectedMessage = "Couldn't find the 'and(java.lang.Integer,java.lang.Boolean)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 11);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testAndFalseFalse() {
final IValidationResult validationResult = validate("false and false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testAndFalseTrue() {
final IValidationResult validationResult = validate("false and true");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testAndTrueFalse() {
final IValidationResult validationResult = validate("true and false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testAndTrueTrue() {
final IValidationResult validationResult = validate("true and true");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testNotNull() {
final IValidationResult validationResult = validate("not null");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testNotInteger() {
final IValidationResult validationResult = validate("not 1");
final String expectedMessage = "Couldn't find the 'not(java.lang.Integer)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 5);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testNotFalse() {
final IValidationResult validationResult = validate("not false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testNotTrue() {
final IValidationResult validationResult = validate("not true");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testImpliesNullNull() {
final IValidationResult validationResult = validate("null implies null");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testImpliesBooleanNull() {
final IValidationResult validationResult = validate("false implies null");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testImpliesNullBoolean() {
final IValidationResult validationResult = validate("null implies false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testImpliesIntegerInteger() {
final IValidationResult validationResult = validate("1 implies 1");
final String expectedMessage = "Couldn't find the 'implies(java.lang.Integer,java.lang.Integer)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 11);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testImpliesBooleanInteger() {
final IValidationResult validationResult = validate("false implies 1");
final String expectedMessage = "Couldn't find the 'implies(java.lang.Boolean,java.lang.Integer)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 15);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testImpliesIntegerBoolean() {
final IValidationResult validationResult = validate("1 implies false");
final String expectedMessage = "Couldn't find the 'implies(java.lang.Integer,java.lang.Boolean)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 15);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testImpliesFalseFalse() {
final IValidationResult validationResult = validate("false implies false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testImpliesFalseTrue() {
final IValidationResult validationResult = validate("false implies true");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testImpliesTrueFalse() {
final IValidationResult validationResult = validate("true implies false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testImpliesTrueTrue() {
final IValidationResult validationResult = validate("true implies true");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testXorNullNull() {
final IValidationResult validationResult = validate("null xor null");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testXorBooleanNull() {
final IValidationResult validationResult = validate("false xor null");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testXorNullBoolean() {
final IValidationResult validationResult = validate("null xor false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testXorIntegerInteger() {
final IValidationResult validationResult = validate("1 xor 1");
final String expectedMessage = "Couldn't find the 'xor(java.lang.Integer,java.lang.Integer)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 7);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testXorBooleanInteger() {
final IValidationResult validationResult = validate("false xor 1");
final String expectedMessage = "Couldn't find the 'xor(java.lang.Boolean,java.lang.Integer)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 11);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testXorIntegerBoolean() {
final IValidationResult validationResult = validate("1 xor false");
final String expectedMessage = "Couldn't find the 'xor(java.lang.Integer,java.lang.Boolean)' service";
assertEquals(1, validationResult.getMessages().size());
ValidationTest.assertValidationMessage(validationResult.getMessages().get(0),
ValidationMessageLevel.ERROR, expectedMessage, 0, 11);
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(1, types.size());
final Iterator<IType> it = types.iterator();
final IType type = it.next();
assertTrue(type instanceof NothingType);
assertEquals(expectedMessage, ((NothingType)type).getMessage());
}
@Test
public void testXorFalseFalse() {
final IValidationResult validationResult = validate("false xor false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testXorFalseTrue() {
final IValidationResult validationResult = validate("false xor true");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testXorTrueFalse() {
final IValidationResult validationResult = validate("true xor false");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
@Test
public void testXorTrueTrue() {
final IValidationResult validationResult = validate("true xor true");
assertTrue(validationResult.getMessages().isEmpty());
final AstResult ast = validationResult.getAstResult();
final Set<IType> types = validationResult.getPossibleTypes(ast.getAst());
assertEquals(Collections.singleton(classType(Boolean.class)), types);
}
}