#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common Development
# and Distribution License("CDDL") (collectively, the "License").  You
# may not use this file except in compliance with the License.  You can
# obtain a copy of the License at
# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
# or packager/legal/LICENSE.txt.  See the License for the specific
# language governing permissions and limitations under the License.
#
# When distributing the software, include this License Header Notice in each
# file and include the License file at packager/legal/LICENSE.txt.
#
# GPL Classpath Exception:
# Oracle designates this particular file as subject to the "Classpath"
# exception as provided by Oracle in the GPL Version 2 section of the License
# file that accompanied this code.
#
# Modifications:
# If applicable, add the following below the License Header, with the fields
# enclosed by brackets [] replaced by your own identifying information:
# "Portions Copyright [year] [name of copyright owner]"
#
# Contributor(s):
# If you wish your version of this file to be governed by only the CDDL or
# only the GPL Version 2, indicate your decision by adding "[Contributor]
# elects to include this software in this distribution under the [CDDL or GPL
# Version 2] license."  If you don't indicate a single choice of license, a
# recipient has the option to distribute your version of this file under
# either the CDDL, the GPL Version 2 or to extend the choice of license to
# its licensees as provided above.  However, if you add GPL Version 2 code
# and therefore, elected the GPL Version 2 license, then the option applies
# only if the new code is made subject to such option by the copyright
# holder.
#

# Note! The parser is a modified JSP 2.0 parser that uses the JSP
# delimiters rather than the JSF delimiters. 
#
# Even though the JSP spec states that only a single expression must
# be parsable, the Apache Jakarta Commons EL parser used by Jasper2
# handles parsing and evaluation of mixed literal and expression values
# as well. While the JSF RI uses a modified version of the Commons EL parser,
# it's only used for single expressions; mixed literal/expression
# values are handled by the MixedELValueBinding class instead.
# Hence, all mixed literal/expression tests have been moved to
# the evaluationTests test case for JSF

# literal tests
${1}
${-12}
${true}
${false}
${null}
${4.2}
${-21.3}
${4.}
${.21}
${3e-1}
${.2222222222}

# string literals with "
${"abc"}
${""}
${"a"}
${"         "}
${" some string ''' "}
${" with escaping \\"}
${" with escaping \""}
${" with escaping \"\\\""}
${" bad \ escaping"}
${" bad \' escaping"}

# string literals with '
${'abc'}
${''}
${'a'}
${'         '}
${' some string """ '}
${' with escaping \\'}
${' with escaping \''}
${' with escaping \'\\\''}
${' bad \ escaping'}
${' bad \" escaping'}

# identifiers
${abc}
${abc123}
${abc_123}
${bad*identifier}

# property accessors
${a .b .c}
${ abc . 'def.ghi' . ghi . "jkl \"" }

# array accessors
${ a[14] }
${ abc [def]}
${ def ["yesthisisallowed"]}

# mixed property/array accessors
${ a.b.c[d. e.  f]}
${ a[14].b[32].c[24][ 261] [24]}
${ a[b[c[d[e[f]]]].g] }

# mixed operators
${ 1 + 3 - 2 * 1 == 4}
${ 1 + 3 - 2 * 1 == 4 / 1.2}
${ 1 + 3 - 2 * 1 == 4 / 1.2 and abc}
${ 1 + 3 - 2 * 1 == 4 / 1.2 and abc or def or ghi and true}

# unary operators
${ --not abc.def }

# array accessors of non-integer types
${  a ["hello"]."12" [17.5] }

# making sure unicode escapes are not recognized
\u0040
"\u0040"

# relational operators
${ a > b }
${ a gt b }
${ a < b }
${ a lt b }
${ a >= b }
${ a ge b }
${ a <= b }
${ a le b }
${ a == b }
${ a eq b }
${ a != b }
${ a ne b }

# logical operators
${ a and b}
${ a && b}
${ a or b}
${ a || b}
${ !a }
${ not a }

# empty operator
${ empty "A"}
${ empty "" }
${ empty null }
${ empty false}
${ empty 0}
${ not empty 0}
${ not empty empty 0}
${ empty }

