| /*******************************************************************************
|
| * 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);
|
| }
|
|
|
| } |