blob: 4cb29534cb283d0da36080f60c35e709d88db63d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2014 Oracle Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.validation.el.tests.jsp;
import java.util.List;
import org.eclipse.jst.jsf.core.JSFVersion;
import org.eclipse.jst.jsf.core.tests.validation.MockValidationReporter.ReportedProblem;
import org.eclipse.jst.jsf.validation.el.tests.base.ELAssert;
import org.eclipse.jst.jsf.validation.el.tests.base.SingleJSPTestCase;
import org.eclipse.jst.jsf.validation.internal.el.diagnostics.DiagnosticFactory;
/**
* Used to verify that marker offset/lengths are calculated correctly
* for each type error message. This test case should aim for coverage
* of all diagnostic creation for EL. Note that we can't currently get coverage
* on ternaries (parser bug), empty bracket or missing bracket because these things
* are validated outside the EL validator.
*
* @author cbateman
*
*/
public class MarkerOffsetsTestCase extends SingleJSPTestCase
{
public MarkerOffsetsTestCase() {
super("/testdata/jsps/markerOffsets.jsp.data", "/markerOffsets.jsp", JSFVersion.V1_1,FACES_CONFIG_FILE_NAME_1_1);
}
@Override
protected void setUp() throws Exception
{
super.setUp();
}
@Override
public void testSanity()
{
assertEquals("5 + 3", ELAssert.getELText(_structuredDocument,880));
assertEquals("null / null", ELAssert.getELText(_structuredDocument,915));
assertEquals("myBean.integerProperty == null", ELAssert.getELText(_structuredDocument,956));
assertEquals("false && myBean.booleanProperty", ELAssert.getELText(_structuredDocument,1015));
assertEquals("myBean.booleanProperty && false", ELAssert.getELText(_structuredDocument,1075));
assertEquals("!false", ELAssert.getELText(_structuredDocument,1135));
assertEquals("empty 5", ELAssert.getELText(_structuredDocument,1171));
assertEquals("-null", ELAssert.getELText(_structuredDocument,1208));
assertEquals("-myBean.stringProperty", ELAssert.getELText(_structuredDocument,1243));
assertEquals("myBean.integerProperty - (5 + 3)", ELAssert.getELText(_structuredDocument,1376));
assertEquals("myBean.booleanProperty && myBean.integerProperty + 5 == null", ELAssert.getELText(_structuredDocument,1438));
assertEquals("notABean.stringProperty", ELAssert.getELText(_structuredDocument,1569));
assertEquals("myBean.notAProperty", ELAssert.getELText(_structuredDocument,1622));
assertEquals("myBean.integerProperty + 5 + myBean.notAProperty", ELAssert.getELText(_structuredDocument,1671));
assertEquals("myBean.integerProperty++", ELAssert.getELText(_structuredDocument,1769));
assertEquals("myBean.", ELAssert.getELText(_structuredDocument,1823));
assertEquals(" ", ELAssert.getELText(_structuredDocument,1860));
assertEquals("myBean.integerProperty / 0", ELAssert.getELText(_structuredDocument,1978));
assertEquals("myBean.integerProperty + myBean.booleanProperty", ELAssert.getELText(_structuredDocument,2034));
assertEquals("myBean.integerProperty && myBean.booleanProperty", ELAssert.getELText(_structuredDocument,2111));
assertEquals("myBean.booleanProperty >= myBean.collectionProperty", ELAssert.getELText(_structuredDocument,2189));
assertEquals("5 + 'noNumberConversion'", ELAssert.getELText(_structuredDocument,2270));
assertEquals("-true", ELAssert.getELText(_structuredDocument,2324));
assertEquals("!5", ELAssert.getELText(_structuredDocument,2359));
assertEquals("myBean.doubleProperty + myBean.getIntegerProperty", ELAssert.getELText(_structuredDocument,2418));
}
@Override
public void testNoErrorExprs()
{
// marker offset tests are only meaningful for validation warnings and errors
// since we are testing the length and offset values for their corresponding markers
}
@Override
public void testWarningExprs()
{
// UPDATE REMINDER! The third argument in assertContainsProblem is the start
// offset (absolute) of the marker expected. Before updating the assertSemanticWarning
// make a note to the difference
List<ReportedProblem> list = assertSemanticWarning(880, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME_ID, 880, 5);
list = assertSemanticWarning(915, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.BINARY_OP_BOTH_OPERANDS_NULL_ID, 915, 11);
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=235637
// can only call comparison null always same if can verify both
// sides of the expression are null
// list = assertSemanticWarning(956, null, 1);
// assertContainsProblem(list, DiagnosticFactory.BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME_ID, 956, 30);
list = assertSemanticWarning(1015, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS_ID, 1015, 31);
list = assertSemanticWarning(1075, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME_ID, 1075, 31);
list = assertSemanticWarning(1135, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME_ID, 1135, 6);
list = assertSemanticWarning(1171, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE_ID, 1171, 7);
list = assertSemanticWarning(1208, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO_ID, 1208, 5);
list = assertSemanticWarning(1243, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED_ID, 1243, 22);
list = assertSemanticWarning(1376, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME_ID, 1402, 5);
// list = assertSemanticWarning(1438, null, 2);
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=235637
// can only call comparison null always same if can verify both
// sides of the expression are null
// assertContainsProblem(list, DiagnosticFactory.BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME_ID, 1464, 34);
// assertContainsProblem(list, DiagnosticFactory.BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME_ID, 1438, 60);
list = assertSemanticInfo(1569, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.VARIABLE_NOT_FOUND_ID, 1569, 8);
list = assertSemanticWarning(1622, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.MEMBER_NOT_FOUND_ID, 1629, 12);
list = assertSemanticWarning(1671, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.MEMBER_NOT_FOUND_ID, 1707, 12);
list = assertSyntaxWarning(1769, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.GENERAL_SYNTAX_ERROR_ID, 1792, 1);
// Is really correct to have the property offset start on the dot?
list = assertSemanticWarning(1823, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.MEMBER_NOT_FOUND_ID, 1829, 1);
list = assertSyntaxWarning(1860, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.GENERAL_SYNTAX_ERROR_ID, 1860, 1);
}
@Override
public void testErrorExprs()
{
// UPDATE REMINDER! The third argument in assertContainsProblem is the start
// offset (absolute) of the marker expected. Before updating the assertSemanticWarning
// make a note to the difference
List<ReportedProblem> list = assertSemanticError(1978, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.BINARY_OP_POSSIBLE_DIVISION_BY_ZERO_ID, 1978, 26);
list = assertSemanticError(2034, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION_ID, 2034, 47);
list = assertSemanticError(2111, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN_ID, 2111, 48);
list = assertSemanticError(2189, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.BINARY_OP_NO_AVAILABLE_TYPE_COERCION_ID, 2189, 51);
list = assertSemanticError(2270, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS_ID, 2270, 24);
list = assertSemanticError(2324, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION_ID, 2324, 5);
/* reduced to warning for bug 243674
list = assertSemanticError(2359, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN_ID, 2359, 2);
*/
list = assertSemanticError(2418, null, 1);
ELAssert.assertContainsProblem(list, DiagnosticFactory.CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING_ID, 2442, 25);
}
}