| <?xml version = "1.0" encoding = "US-ASCII"?> | |
| <!DOCTYPE spec SYSTEM "https://raw.githubusercontent.com/eclipse-ee4j/jakartaee-tck-tools/refs/heads/master/docs/dtd/assertions/spec_assertions.dtd"> | |
| <!-- | |
| Copyright (c) 2018, 2022 Oracle and/or its affiliates and others. | |
| All rights reserved. | |
| This program and the accompanying materials are made available under the | |
| terms of the Eclipse Public License v. 2.0, which is available at | |
| http://www.eclipse.org/legal/epl-2.0. | |
| This Source Code may also be made available under the following Secondary | |
| Licenses when the conditions for such availability set forth in the | |
| Eclipse Public License v. 2.0 are satisfied: GNU General Public License, | |
| version 2 with the GNU Classpath Exception, which is available at | |
| https://www.gnu.org/software/classpath/license.html. | |
| SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 | |
| --> | |
| <?xml-stylesheet href = 'file:///files/workspaces/tools/docs/xsl/assertions/spec_assertions_comments.xsl' type = 'text/xsl'?> | |
| <spec> | |
| <!-- @(#)ELSpecAssertions.xml 1.0 03/23/06 --> | |
| <next-available-id>82</next-available-id> | |
| <previous-id>48</previous-id> | |
| <technology>EL</technology> | |
| <id>EL</id> | |
| <name>Expression Language</name> | |
| <version>5.0</version> | |
| <location-names> | |
| <chapters> | |
| <chapter id="1" name="Language Syntax and Semantics"> | |
| <sections> | |
| <section id="1" name="Overview" /> | |
| <section id="1.1" name="EL in a nutshell" /> | |
| <section id="2" name="EL Expressions" /> | |
| <section id="2.1" name="Eval-expression" /> | |
| <section id="2.1.1" name="Eval-expressions as value expressions" /> | |
| <section id="2.1.2" name="Eval-expressions as method expressions" /> | |
| <section id="2.2" name="Literal-expression" /> | |
| <section id="2.3" name="Composite expressions" /> | |
| <section id="2.4" name="Syntax restrictions" /> | |
| <section id="3" name="Literals" /> | |
| <section id="4" name="Errors, Warnings, Default Values" /> | |
| <section id="5" name="Resolution of Model Objects and their Properties" /> | |
| <section id="6" name="Operators [] and ." /> | |
| <section id="7" name="Arithmetic Operators" /> | |
| <section id="7.1" name="Binary operators - A {+,-,*} B" /> | |
| <section id="7.2" name="Binary operator - A {/,div} B" /> | |
| <section id="7.3" name="Binary operator - A {%,mod} B" /> | |
| <section id="7.4" name="Unary minus operator - -A" /> | |
| <section id="8" name="String Concatenation Operator - A {+,cat} B" /> | |
| <section id="9" name="Relational Operators" /> | |
| <section id="9.1" name="A {<,>,<=,>=,lt,gt,le,ge} B" /> | |
| <section id="9.2" name="A {==,!=,eq,ne} B" /> | |
| <section id="10" name="Logical Operators" /> | |
| <section id="10.1" name="Binary operator - A {&&,||,and,or} B" /> | |
| <section id="11" name="Empty Operator - empty A" /> | |
| <section id="12" name="Conditional Operator - A ? B : C" /> | |
| <section id="13" name="Assignment Operator - A = B" /> | |
| <section id="14" name="Semicolon Operator - A ; B" /> | |
| <section id="15" name="Parentheses" /> | |
| <section id="16" name="Operator Precedence" /> | |
| <section id="17" name="Reserved Words" /> | |
| <section id="18" name="Functions" /> | |
| <section id="19" name="Variables" /> | |
| <section id="20" name="Lambda Expressions" /> | |
| <section id="21" name="Enums" /> | |
| <section id="22" name="Static Field and Method Reference" /> | |
| <section id="22.1" name="Access Restrictions and Imports" /> | |
| <section id="22.2" name="Imports of Classes and Packages" /> | |
| <section id="22.3" name="Special Fields and Methods" /> | |
| <section id="23" name="Type Conversion" /> | |
| <section id="23.1" name="To Coerce a Value X to Type Y" /> | |
| <section id="23.2" name="Coerce A to String" /> | |
| <section id="23.3" name="Coerce A to Number type N" /> | |
| <section id="23.4" name="Coerce A to Character" /> | |
| <section id="23.5" name="Coerce A to Boolean or boolean" /> | |
| <section id="23.6" name="Coerce A to an Enum Type T" /> | |
| <section id="23.7" name="Coerce A to an array of Type T" /> | |
| <section id="23.8" name="Coerce A to functional interface method invocation" /> | |
| <section id="23.9" name="Coerce A to Any Other Type T" /> | |
| <section id="24" name="Collected Syntax " /> | |
| </sections> | |
| </chapter> | |
| <chapter id="2" name="Operations on Collection Objects"> | |
| <sections> | |
| <section id="2" name="Construction of Collection Objects" /> | |
| <section id="2.1" name="Set Construction" /> | |
| <section id="2.2" name="List Construction" /> | |
| <section id="2.3" name="Map Construction" /> | |
| <section id="3" name="Collection Operations" /> | |
| <section id="3.1" name="Stream and Pipeline" /> | |
| <section id="3.2" name="Operator Syntax Description" /> | |
| <section id="3.3" name="Implementation Classes" /> | |
| <section id="3.4" name="Functions" /> | |
| <section id="3.5" name="filter" /> | |
| <section id="3.6" name="map" /> | |
| <section id="3.7" name="flatMap" /> | |
| <section id="3.8" name="distinct" /> | |
| <section id="3.9" name="sorted" /> | |
| <section id="3.10" name="forEach" /> | |
| <section id="3.11" name="peek" /> | |
| <section id="3.12" name="iterator" /> | |
| <section id="3.13" name="limit" /> | |
| <section id="3.14" name="substream" /> | |
| <section id="3.15" name="toArray" /> | |
| <section id="3.16" name="toList" /> | |
| <section id="3.17" name="reduce" /> | |
| <section id="3.18" name="max" /> | |
| <section id="3.19" name="min" /> | |
| <section id="3.20" name="average" /> | |
| <section id="3.21" name="sum" /> | |
| <section id="3.22" name="count" /> | |
| <section id="3.23" name="anyMatch" /> | |
| <section id="3.24" name="allMatch" /> | |
| <section id="3.25" name="noneMatch" /> | |
| <section id="3.26" name="findFirst" /> | |
| </sections> | |
| </chapter> | |
| </chapters> | |
| </location-names> | |
| <assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:45</id> | |
| <description>Once parsed, an expression can optionally be evaluated | |
| one or | |
| more times. [ExprParsedEvalMany]</description> | |
| <location chapter="1" section="2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:1</id> | |
| <description>An eval-expression is formed by using the constructs | |
| ${expr} or | |
| #{expr}. Both constructs are parsed and evaluated in | |
| exactly the same way by | |
| the EL, even though they might carry | |
| different meanings in the technology | |
| that is using the EL. | |
| [PoundDollarSameMeaning]</description> | |
| <location chapter="1" section="2.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:2</id> | |
| <description>Nested eval-expressions, such as ${item[${i}]}, are | |
| illegal. | |
| [NestedEvalExprIllegal]</description> | |
| <location chapter="1" section="2.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:3</id> | |
| <description>When parsing a value expression, an expected type is | |
| provided. In | |
| the case of an rvalue, the expected type is what the | |
| result of the expression | |
| evaluation is coerced to. [RValueCoercion]</description> | |
| <location chapter="1" section="2.1.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:4</id> | |
| <description>When parsing lvalues, the expected type is ignored and | |
| the | |
| provided value is coerced to the actual type of the property the | |
| expression | |
| points to, before that property is set. [LValueCoercion]</description> | |
| <location chapter="1" section="2.1.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:5</id> | |
| <description>There is no coercion performed by method expressions. | |
| [MethodExprSignature]</description> | |
| <location chapter="1" section="2.1.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:80</id> | |
| <description>Identification of methods in method expressions from | |
| parameter types follows the rules of the JLS with the addition | |
| that coercion resolution is less specific than overload | |
| resolution. [MethodExpressionMatch]</description> | |
| <location chapter="1" section="2.1.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:6</id> | |
| <description>A literal-expression does not use the ${expr} or #{expr} | |
| constructs, and simply evaluates to the text of the expression, of | |
| type | |
| String. Upon evaluation, an expected type of something other | |
| than String can | |
| be provided. [LiteralExprEval]</description> | |
| <location chapter="1" section="2.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:7</id> | |
| <description>To generate literal values that include the character | |
| sequence | |
| "${" or ?#{?, the developer can choose to use a composite | |
| expression as shown | |
| in the example: [ELSyntaxAsLiteral]</description> | |
| <location chapter="1" section="2.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:8</id> | |
| <description>The escape characters \$ and \# can be used to escape | |
| what would | |
| otherwise be treated as an eval-expression. | |
| [ELSyntaxEscape]</description> | |
| <location chapter="1" section="2.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:9</id> | |
| <description>A literal-expression can be used anywhere a value | |
| expression can | |
| be used. [LiteralExprAnywhereValueExprUsed]</description> | |
| <location chapter="1" section="2.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:10</id> | |
| <description>A literal-expression can also be used as a method | |
| expression that | |
| returns a non-void return value. The standard EL | |
| coercion rules then apply if | |
| the return type of the method | |
| expression is not java.lang.String. | |
| [LiteralExprAsMethodExpr]</description> | |
| <location chapter="1" section="2.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:11</id> | |
| <description>With composite expressions, eval-expressions are | |
| evaluated from | |
| left to right, coerced to Strings (according to the | |
| EL type conversion | |
| rules), and concatenated with any intervening | |
| literal-expressions. | |
| [CompositeExprEval]</description> | |
| <location chapter="1" section="2.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:12</id> | |
| <description>It is illegal to mix ${} and #{} constructs in a | |
| composite | |
| expression. [CannotMixTwoSyntax]</description> | |
| <location chapter="1" section="2.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:13</id> | |
| <description>There are literals for boolean, integer, floating point, | |
| string, | |
| and null in an eval-expression. [EvalExpressionLiterals]</description> | |
| <location chapter="1" section="3" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:13.1</id> | |
| <description>The boolean literal has values true and false</description> | |
| <location chapter="1" section="3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:13.2</id> | |
| <description>The integer literal is defined by the IntegerLiteral | |
| construct.</description> | |
| <location chapter="1" section="3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:13.3</id> | |
| <description>The floating point literal is defined by the | |
| FloatingPointLiteral construct</description> | |
| <location chapter="3" section="1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:13.4</id> | |
| <description>The string literal is defined with single and double | |
| quotes</description> | |
| <location chapter="3" section="1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:13.5</id> | |
| <description>In a string literal, " is escaped as \", ' is escaped | |
| as \', | |
| and \ is escaped as \\. Quotes only need to be escaped in a | |
| string value | |
| enclosed in the same type of quote</description> | |
| <location chapter="3" section="1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:13.6</id> | |
| <description>The null literal has a null value.</description> | |
| <location chapter="3" section="1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:14</id> | |
| <description>The EL does not provide warnings, just default values | |
| and errors. | |
| Default values are type-correct values that are assigned | |
| to a subexpression | |
| when there is some problem. An error is an | |
| exception thrown (to be handled by | |
| the environment where the EL is | |
| used). [DefaultValuesAndErrors]</description> | |
| <location chapter="1" section="4" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:15</id> | |
| <description>The dot and index operators have equivalent | |
| functionality. | |
| [DotAndIndexOperatorsSame]</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16</id> | |
| <description>To evaluate expr-a[expr-b]:</description> | |
| <location chapter="1" section="6" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.1</id> | |
| <description>Evaluate expr-a into value-a</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.2</id> | |
| <description>If value-a is null:</description> | |
| <location chapter="1" section="6" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.2.1</id> | |
| <description>If expr-a[expr-b] is the last property being | |
| resolved:</description> | |
| <location chapter="1" section="6" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.2.1.1</id> | |
| <description>If the expression is a value expression and | |
| ValueExpression.getValue(context) was called to initiate this | |
| expression evaluation, return null.</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.2.1.2</id> | |
| <description>Otherwise, throw PropertyNotFoundException</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.2.2</id> | |
| <description>Otherwise, return null.</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.3</id> | |
| <description>Evaluate expr-b into value-b </description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.4</id> | |
| <description>If value-b is null</description> | |
| <location chapter="1" section="6" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.4.1</id> | |
| <description>If expr-a[expr-b] is the last property being | |
| resolved:</description> | |
| <location chapter="1" section="6" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.4.1.1</id> | |
| <description>If the expression is a value expression and | |
| ValueExpression.getValue(context) was called to initiate this | |
| expression evaluation, return null.</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.4.1.2</id> | |
| <description>Otherwise, throw PropertyNotFoundException</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.4.2</id> | |
| <description>Otherwise, return null.</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.5</id> | |
| <description>If the expression is a value expression:</description> | |
| <location chapter="1" section="6" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.5.1</id> | |
| <description>If expr-a[expr-b] is the last property being | |
| resolved:</description> | |
| <location chapter="1" section="6" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.5.1.1</id> | |
| <description>If ValueExpression.getValue(context) was called to | |
| initiate this expression evaluation, invoke | |
| elResolver.getValue(context, value-a, value-b)</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.5.1.2</id> | |
| <description>If ValueExpression.getType(context) was called, | |
| invoke | |
| elResolver.getType(context, value-a, value-b).</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.5.1.3</id> | |
| <description>If ValueExpression.isReadOnly(context) was called, | |
| invoke | |
| elResolver.isReadOnly(context, value-a, value-b).</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.5.1.4</id> | |
| <description>If ValueExpression.setValue(context, val) was | |
| called, | |
| invoke elResolver.setValue(context, value-a, value-b, | |
| val).</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.5.2</id> | |
| <description>Otherwise, invoke elResolver.getValue(value-a, | |
| value-b)</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.6</id> | |
| <description>Otherwise, the expression is a method expression</description> | |
| <location chapter="1" section="6" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.6.1</id> | |
| <description>If expr-a[expr-b] is the last property being | |
| resolved:</description> | |
| <location chapter="1" section="6" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.6.1.1</id> | |
| <description>Coerce value-b to String</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.6.1.2</id> | |
| <description>Find the method on object value-a with name | |
| value-b and | |
| with the set of expected parameter types provided | |
| at parse time. If the | |
| method does not exist, or the return | |
| type does not match the expected | |
| return type provided at parse | |
| time, throw MethodNotFoundException.</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.6.1.3</id> | |
| <description>If MethodExpression.invoke(context, params) was | |
| called, | |
| invoke the found method with the parameters passed to | |
| the invoke method</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.6.1.4</id> | |
| <description>If MethodExpression.getMethodInfo(context) was | |
| called, | |
| construct and return a new MethodInfo object.</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:16.6.2</id> | |
| <description>Otherwise invoke elResolver.getValue(value-a, | |
| value-b).</description> | |
| <location chapter="1" section="6" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:17</id> | |
| <description>Binary operators - A { +,-,* } B</description> | |
| <location chapter="1" section="7.1" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:46</id> | |
| <description>If the operator is a +, and either A or B is a | |
| String, | |
| then + is | |
| a string concatenation operator.</description> | |
| <location chapter="1" section="7.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:17.1</id> | |
| <description>If A and B are null, return (Long) 0</description> | |
| <location chapter="1" section="7.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:17.2</id> | |
| <description>If A or B is a BigDecimal, coerce both to BigDecimal | |
| and then:</description> | |
| <location chapter="1" section="7.1" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:17.2.1</id> | |
| <description>If operator is +, return A.add(B)</description> | |
| <location chapter="1" section="7.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:17.2.2</id> | |
| <description>If operator is -, return A.subtract(B)</description> | |
| <location chapter="1" section="7.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:17.2.3</id> | |
| <description>If operator is *, return A.multiply(B)</description> | |
| <location chapter="1" section="7.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:17.3</id> | |
| <description>If A or B is Float, Double, or a String containing | |
| ".", "e", or | |
| "E":</description> | |
| <location chapter="1" section="7.1" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:17.3.1</id> | |
| <description>If A or B is BigInteger, coerce both A and B to | |
| BigDecimal | |
| and apply operator.</description> | |
| <location chapter="1" section="7.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:17.3.2</id> | |
| <description>Otherwise, coerce both A and B to Double and apply | |
| operator</description> | |
| <location chapter="1" section="7.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:17.4</id> | |
| <description>If A or B is BigInteger, coerce both to BigInteger and | |
| then:</description> | |
| <location chapter="1" section="7.1" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:17.4.1</id> | |
| <description>If operator is +, return A.add(B)</description> | |
| <location chapter="1" section="7.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:17.4.2</id> | |
| <description>If operator is -, return A.subtract(B)</description> | |
| <location chapter="1" section="7.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:17.4.3</id> | |
| <description>If operator is *, return A.multiply(B)</description> | |
| <location chapter="1" section="7.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:17.5</id> | |
| <description>Otherwise coerce both A and B to Long and apply | |
| operator.</description> | |
| <location chapter="1" section="7.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:17.6</id> | |
| <description>If application of operator against A and B results in | |
| an | |
| exception, error.</description> | |
| <location chapter="1" section="7.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:18</id> | |
| <description>Binary operator - A { / or div } B</description> | |
| <location chapter="1" section="7.2" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:18.1</id> | |
| <description>If A and B are null, return (Long) 0</description> | |
| <location chapter="1" section="7.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:18.2</id> | |
| <description>If A or B is a BigDecimal or a BigInteger, coerce both | |
| to | |
| BigDecimal and return A.divide(B, BigDecimal.ROUND_HALF_UP)</description> | |
| <location chapter="1" section="7.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:18.3</id> | |
| <description>Otherwise, coerce both A and B to Double and apply | |
| operator.</description> | |
| <location chapter="1" section="7.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:23.4</id> | |
| <description>If application of operator against A and B results in | |
| an | |
| exception, error.</description> | |
| <location chapter="1" section="7.2" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:19</id> | |
| <description>Binary Operator - A { % or mod } B</description> | |
| <location chapter="1" section="7.3" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:19.1</id> | |
| <description>If A and B are null, return (Long)0</description> | |
| <location chapter="1" section="7.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:19.2</id> | |
| <description>If A or B is a BigDecimal, Float, Double, or String | |
| containing | |
| ., e, or E, coerce both A and B to Double and apply | |
| operator</description> | |
| <location chapter="1" section="7.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:19.3</id> | |
| <description>If A or B is a BigInteger, coerce both to BigInteger | |
| and return | |
| A.remainder(B).</description> | |
| <location chapter="1" section="7.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:19.4</id> | |
| <description>Otherwise coerce both A and B to Long and apply | |
| operator.</description> | |
| <location chapter="1" section="7.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:19.5</id> | |
| <description>If operator results in exception, error</description> | |
| <location chapter="1" section="7.3" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:20</id> | |
| <description>Unary minus operator - -A</description> | |
| <location chapter="1" section="7.4" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:20.1</id> | |
| <description>If A is null, return (Long) 0</description> | |
| <location chapter="1" section="7.4" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:20.2</id> | |
| <description>If A is a BigDecimal or BigInteger, return A.negate()</description> | |
| <location chapter="1" section="7.4" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:20.3</id> | |
| <description>If A is a String:</description> | |
| <location chapter="1" section="7.4" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:20.3.1</id> | |
| <description>If A contains ".", "e", or "E", coerce to a Double | |
| and apply | |
| operator.</description> | |
| <location chapter="1" section="7.4" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:20.3.2</id> | |
| <description>Otherwise, coerce to a Long and apply operator</description> | |
| <location chapter="1" section="7.4" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:20.3.3</id> | |
| <description>If operation results in exception, error.</description> | |
| <location chapter="1" section="7.4" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:20.4</id> | |
| <description>If A is Byte, Short, Integer, Long, Float, Double:</description> | |
| <location chapter="1" section="7.4" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:20.4.1</id> | |
| <description>retain the type and apply the operator.</description> | |
| <location chapter="1" section="7.4" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:20.4.2</id> | |
| <description>If application of operator results in exception, | |
| error.</description> | |
| <location chapter="1" section="7.4" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:20.5</id> | |
| <description>Otherwise, error</description> | |
| <location chapter="1" section="7.4" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:47</id> | |
| <description>String Concatenation Operator - A {+, cat} B</description> | |
| <location chapter="1" section="8" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:47.1</id> | |
| <description>The + operator is a string concatenation | |
| operator if | |
| and only if | |
| at least one of the operands | |
| is a String.</description> | |
| <location chapter="1" section="8.1" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:47.1.1</id> | |
| <description>Coerce A and B to String.</description> | |
| <location chapter="1" section="8.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:47.1.2</id> | |
| <description>Return the concatenated string of A and B.</description> | |
| <location chapter="1" section="8.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:21</id> | |
| <description>Relational operators - A { <,>,<=,=>,lt,gt,le,ge } | |
| B</description> | |
| <location chapter="1" section="9.1" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:21.1</id> | |
| <description>If A==B, and operator is <=, le, >=, or ge, return | |
| true</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:21.2</id> | |
| <description>If A or B is null, return false.</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:21.3</id> | |
| <description>If A or B is BigDecimal, coerce both A and B to | |
| BigDecimal and | |
| use the return value of A.compareTo(B).</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:21.4</id> | |
| <description>If A or B is Float or Double coerce both A and B to | |
| Double and | |
| apply operator.</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:21.5</id> | |
| <description>If A or B is BigInteger, coerce both A and B to | |
| BigInteger and | |
| use the return value of A.compareTo(B)</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:21.6</id> | |
| <description>If A or B is Byte, Short, Character, Integer, or Long, | |
| coerce | |
| both A and B to Long and apply operator.</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:21.7</id> | |
| <description>If A or B is String coerce both A and B to String, | |
| compare | |
| lexically.</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:21.8</id> | |
| <description>If A is Comparable: </description> | |
| <location chapter="1" section="9.1" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:21.8.1</id> | |
| <description>If A.compareTo(B) throws an exception, error</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:21.8.2</id> | |
| <description>Otherwise return the result of A.compareTo(B)</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:21.9</id> | |
| <description>If B is Comparable, then:</description> | |
| <location chapter="1" section="9.1" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:21.9.1</id> | |
| <description>If B.compareTo(A) throws exception, error</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:21.9.2</id> | |
| <description>Otherwise use result of B.compareTo(A)</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:21.10</id> | |
| <description>Otherwise, error</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:22</id> | |
| <description>Relational Operators - A { ==, !=, eq, ne } B</description> | |
| <location chapter="1" section="9.2" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.1</id> | |
| <description>If A == B, apply operator.</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.2</id> | |
| <description>If A or B is null, return false for == or eq, true for | |
| != or ne</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:22.3</id> | |
| <description>If A or B is BigDecimal, coerce both A and B to | |
| BigDecimal and | |
| then:</description> | |
| <location chapter="1" section="9.2" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.3.1</id> | |
| <description>If operator is == or eq, return A.equals(B)</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.3.2</id> | |
| <description>If operator is != or ne, return !A.equals(B)</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.4</id> | |
| <description>If A or B is Float or Double coerce both A and B to | |
| Double and | |
| apply operator.</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:22.5</id> | |
| <description>If A or B is BigInteger, coerce both A and B to | |
| BigInteger and | |
| then:</description> | |
| <location chapter="1" section="9.2" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.5.1</id> | |
| <description>If operator is == or eq, return A.equals(B)</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.5.2</id> | |
| <description>If operator is != or ne, return !A.equals(B)</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.6</id> | |
| <description>If A or B is Byte, Short, Character, Integer, or Long, | |
| coerce | |
| both A and B to Long and apply operator.</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.7</id> | |
| <description>If A or B is Boolean coerce both A and B to Boolean, | |
| apply | |
| operator.</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.8</id> | |
| <description>If A or B is an enum, coerce both A and B to enum, | |
| apply | |
| operator</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.9</id> | |
| <description>If A or B is String coerce both A and B to String and | |
| compare | |
| lexically</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.10</id> | |
| <description>If error occurs calling A.equals(B), error</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:22.11</id> | |
| <description>Otherwise apply operator to result of A.equals(B).</description> | |
| <location chapter="1" section="9.2" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:23</id> | |
| <description>Binary Operator - A { &&, ||, and, or } B</description> | |
| <location chapter="1" section="9.1" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:23.1</id> | |
| <description>Coerce both A and B to Boolean and apply operator.</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:23.2</id> | |
| <description>The operator stops as soon as the expression can be | |
| determined, i.e., A and B and C and D ? if B is false, then only A | |
| and B is | |
| evaluated.</description> | |
| <location chapter="1" section="9.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:24</id> | |
| <description>Logical Operators</description> | |
| <location chapter="1" section="10" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:24.2</id> | |
| <description>Binary operator - A {&&,||,and,or} B</description> | |
| <location chapter="1" section="10.1" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:24.2.1</id> | |
| <description>Coerce both A and B to Boolean, apply operator.</description> | |
| <location chapter="1" section="10.2" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:24.1</id> | |
| <description>Unary operator - { !, not } A</description> | |
| <location chapter="1" section="10.2" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:24.1.1</id> | |
| <description>Coerce A to Boolean and apply operator.</description> | |
| <location chapter="1" section="10.2" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:25</id> | |
| <description>Empty operator - empty A</description> | |
| <location chapter="1" section="11" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:25.1</id> | |
| <description>If A is null, return true</description> | |
| <location chapter="1" section="11" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:25.2</id> | |
| <description>If A is an emtpy String, return true.</description> | |
| <location chapter="1" section="11" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:25.3</id> | |
| <description>If A is an empty array, then return true.</description> | |
| <location chapter="1" section="11" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:25.4</id> | |
| <description>If A is an emtpy Map, then return true.</description> | |
| <location chapter="1" section="11" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:25.5</id> | |
| <description>If A is an empty Collection, then return true.</description> | |
| <location chapter="1" section="11" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:25.6</id> | |
| <description>Otherwise return false</description> | |
| <location chapter="1" section="11" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:26</id> | |
| <description>Conditional Operator - A ? B : C</description> | |
| <location chapter="1" section="12" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:26.1</id> | |
| <description>Evaluate B or C, depending on the result of the | |
| evaluation of | |
| A. | |
| Coerce A to Boolean: | |
| </description> | |
| <location chapter="1" section="12" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:26.1.1</id> | |
| <description>If A is true, evaluate and return B</description> | |
| <location chapter="1" section="12" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:26.1.2</id> | |
| <description>If A is false, evaluate and return C</description> | |
| <location chapter="1" section="12" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:48</id> | |
| <description>Assignment Operator - A = B</description> | |
| <location chapter="1" section="13" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:48.1</id> | |
| <description>Assign the value of B to A. A must be a lvalue, | |
| otherwise, a | |
| PropertyNotWritableException will be thrown. | |
| </description> | |
| <location chapter="1" section="13" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:48.1.1</id> | |
| <description>Evluate expr-a, up to the last property reolution, | |
| to | |
| (base-a, prop-a)</description> | |
| <location chapter="1" section="13" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:48.1.2</id> | |
| <description>Evaluate expr-b, to value-b</description> | |
| <location chapter="1" section="13" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:48.1.3</id> | |
| <description>Invoke ELResolver.setValue(base-a, prop-a, value-b)</description> | |
| <location chapter="1" section="13" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:48.1.4</id> | |
| <description>Return value-b</description> | |
| <location chapter="1" section="13" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:49</id> | |
| <description>Semicolon Operator - A ; B</description> | |
| <location chapter="1" section="14" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:49.1</id> | |
| <description>To evaluate A;B, A is first evaluated, and its value | |
| is | |
| discarded. B is then evaluated and its value is returned.</description> | |
| <location chapter="1" section="14" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:27</id> | |
| <description>Parentheses can be used to change precedence</description> | |
| <location chapter="1" section="15" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:28</id> | |
| <description>Operator precedence (highest to lowest) - [] . then (), | |
| then | |
| -(unary) not ! empty, then * / div % mod, then + - (binary), | |
| then < > | |
| <= >= lt gt le ge, then == != eq ne, then && | |
| and, then || or, then | |
| ? : then -> then = then ;</description> | |
| <location chapter="1" section="16" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:29</id> | |
| <description>Qualified functions with a namespace prefix have | |
| precedence over | |
| the operators. [FunctionPrecedenceOverOperators]</description> | |
| <location chapter="1" section="16" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:30</id> | |
| <description>The following words are reserved for the language and | |
| must not be | |
| used as identifiers. | |
| and eq gt true instanceof | |
| or ne le | |
| false empty | |
| not lt ge | |
| null div mod | |
| </description> | |
| <location chapter="1" section="17" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:31</id> | |
| <description>EL functions are mapped, resolved and bound at parse | |
| time. | |
| [ELFunctionsBinding]</description> | |
| <location chapter="1" section="18" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:32</id> | |
| <description>It is the responsibility of the FunctionMapper class to | |
| provide | |
| the mapping of namespace-qualified functions to static | |
| methods of specific | |
| classes when expressions are created. | |
| [FunctionMapperMapping]</description> | |
| <location chapter="1" section="18" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:33</id> | |
| <description>If no FunctionMapper is provided (by passing in null), | |
| functions | |
| are disabled. [FunctionMapperNull]</description> | |
| <location chapter="1" section="" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:34</id> | |
| <description>EL variables are mapped, resolved and bound at parse | |
| time. | |
| [ELVariablesBinding]</description> | |
| <location chapter="1" section="19" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:35</id> | |
| <description>It is the responsibility of the VariableMapper class to | |
| provide | |
| the mapping of EL variables to ValueExpressions when | |
| expressions are created. | |
| [VariableMapperMapping]</description> | |
| <location chapter="1" section="19" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:36</id> | |
| <description>If no VariableMapper is provided to a ValueExpression, | |
| variable | |
| mapping is disabled. [VariableMapperNull]</description> | |
| <location chapter="1" section="19" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:50</id> | |
| <description>Lambda Expressions</description> | |
| <location chapter="1" section="20" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:50.1</id> | |
| <description>x->x+1</description> | |
| <location chapter="1" section="20" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:50.2</id> | |
| <description>(x,y)->x+y</description> | |
| <location chapter="1" section="20" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:50.3</id> | |
| <description>((x,y)->x+y)(3,4) evaluates to 7.</description> | |
| <location chapter="1" section="20" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:50.4</id> | |
| <description>v = (x,y)->x+y</description> | |
| <location chapter="1" section="20" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:50.5</id> | |
| <description>v(3,4) evaluates to 7</description> | |
| <location chapter="1" section="20" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:50.6</id> | |
| <description>fact = n -> n==0? 1: n*fact(n-1); fact(5) evaluates to | |
| 120</description> | |
| <location chapter="1" section="20" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:50.7</id> | |
| <description>It can also be passed as an argument to a method, and | |
| be | |
| invoked in the method, by invoking | |
| jakarta.el.LambdaExpression.invoke(), such | |
| as | |
| employees.where(e->e.firstName == 'Larry')</description> | |
| <location chapter="1" section="20" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:50.8</id> | |
| <description>A Lambda expression can be nested within another | |
| Lambda | |
| expression, like | |
| customers.select(c->[c.name, | |
| c.orders.sum(o->o.total)])</description> | |
| <location chapter="1" section="20" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:37</id> | |
| <description>To coerce a value X to type Y</description> | |
| <location chapter="1" section="23.1" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:37.1</id> | |
| <description>If X is of a primitive type, Let X' be the equivalent | |
| 'boxed | |
| form' of X, otherwise, Let X' be the same as X.</description> | |
| <location chapter="1" section="23.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:37.2</id> | |
| <description>If Y is of a primitive type, Let Y' be the equivalent | |
| 'boxed | |
| form' of Y. Otherwise, let Y' be the same as Y.</description> | |
| <location chapter="1" section="23.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:37.3</id> | |
| <description>Apply the rules in Sections 1.18.2-1.18.7 for coercing | |
| X' to Y'</description> | |
| <location chapter="1" section="23.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:37.4</id> | |
| <description>If Y is a primitive type, then the result is found by | |
| 'unboxing' the result of the coercion. If the result of the | |
| coercion is | |
| null, then error.</description> | |
| <location chapter="1" section="23.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:37.5</id> | |
| <description>If Y is not a primitive type, then the result is the | |
| result of | |
| the coercion.</description> | |
| <location chapter="1" section="23.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:38</id> | |
| <description>Coerce A to String</description> | |
| <location chapter="1" section="23.2" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:38.1</id> | |
| <description>If A is a String: return A</description> | |
| <location chapter="1" section="23.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:38.2</id> | |
| <description>If A is null, return an empty String ("").</description> | |
| <location chapter="1" section="23.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:38.3</id> | |
| <description>If A is Enum, return A.name()</description> | |
| <location chapter="1" section="23.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:38.4</id> | |
| <description>If A.toString() throws exception, error.</description> | |
| <location chapter="1" section="23.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:38.5</id> | |
| <description>Otherwise return A.toString()</description> | |
| <location chapter="1" section="23.2" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:39</id> | |
| <description>Coerce A to Number type N</description> | |
| <location chapter="1" section="23.3" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.1</id> | |
| <description>If A is null or "", return 0</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.2</id> | |
| <description>If A is Character, convert to short, apply numeric | |
| rules below.</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.3</id> | |
| <description>If A is a Boolean, then error.</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.4</id> | |
| <description>If A is Number type N, return A</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="true" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:39.5</id> | |
| <description>If A is a Number, coerce quietly to type N using the | |
| following | |
| algorithm:</description> | |
| <location chapter="1" section="23.3" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:39.5.1</id> | |
| <description>If N is BigInteger:</description> | |
| <location chapter="1" section="23.3" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.5.1.1</id> | |
| <description>If A is a BigDecimal, return A.toBigInteger()</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.5.1.2</id> | |
| <description>Otherwise, return | |
| BigInteger.valueOf(A.longValue())</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:39.5.2</id> | |
| <description>If N is BigDecimal</description> | |
| <location chapter="1" section="23.3" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.5.2.1</id> | |
| <description>If A is a BigInteger, return new BigDecimal(A)</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.5.2.2</id> | |
| <description>Otherwise, return new BigDecimal(A.doubleValue())</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.5.3</id> | |
| <description>If N is Byte, return new Byte(A.byteValue())</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.5.4</id> | |
| <description>If N is Short, return new Short(A.shortValue())</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.5.5</id> | |
| <description>If N is Integer, return new Integer(A.intValue())</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.5.6</id> | |
| <description>If N is Long, return new Long(A.longValue())</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.5.7</id> | |
| <description>If N is Float, return new Float(A.floatValue())</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.5.8</id> | |
| <description>If N is Double, return new Double(A.doubleValue())</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.5.9</id> | |
| <description>Otherwise, error.</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:39.6</id> | |
| <description>If A is String, then:</description> | |
| <location chapter="1" section="23.3" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:39.6.1</id> | |
| <description>If N is BigDecimal then:</description> | |
| <location chapter="1" section="23.3" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.6.1.1</id> | |
| <description>If new BigDecimal(A) throws an exception then | |
| error.</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.6.1.2</id> | |
| <description>Otherwise, return new BigDecimal(A).</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:39.7</id> | |
| <description>If N is BigInteger then</description> | |
| <location chapter="1" section="23.3" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.7.1</id> | |
| <description>If new BigInteger(A) throws an exception then error.</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.7.2</id> | |
| <description>Otherwise, return new BigInteger(A).</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.7.3</id> | |
| <description>If N.valueOf(A) throws an exception, then error.</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.7.4</id> | |
| <description>Otherwise, return N.valueOf(A).</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:39.8</id> | |
| <description>Otherwise error.</description> | |
| <location chapter="1" section="23.3" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:40</id> | |
| <description>Coerce A to Character</description> | |
| <location chapter="1" section="23.4" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:40.1</id> | |
| <description>If A is null or "". return (char) 0</description> | |
| <location chapter="1" section="23.4" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:40.2</id> | |
| <description>If A is Character, then return A</description> | |
| <location chapter="1" section="23.4" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:40.3</id> | |
| <description>If A is Boolean, error.</description> | |
| <location chapter="1" section="23.4" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:40.4</id> | |
| <description>If A is Number, coerce quietly to type Short, then | |
| return a | |
| Character whose numeric value is equivalent to that | |
| Short.</description> | |
| <location chapter="1" section="23.4" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:40.5</id> | |
| <description>If A is String, return A.charAt(0)</description> | |
| <location chapter="1" section="23.4" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:40.6</id> | |
| <description>All other types will result in an error.</description> | |
| <location chapter="1" section="23.4" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:41</id> | |
| <description>Coerce A to Boolean</description> | |
| <location chapter="1" section="23.5" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:41.1</id> | |
| <description>If A is null or "", return false</description> | |
| <location chapter="1" section="23.5" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:41.2</id> | |
| <description>Otherwise if A is Boolean, return A</description> | |
| <location chapter="1" section="23.5" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:41.3</id> | |
| <description>Otherwise if A is String, and Boolean.valueOf(A) does | |
| not throw | |
| an exception, return it.</description> | |
| <location chapter="1" section="23.5" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:41.4</id> | |
| <description>Otherwise error.</description> | |
| <location chapter="1" section="23.5" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:42</id> | |
| <description>Coerce A to an Enum Type T</description> | |
| <location chapter="1" section="23.6" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:42.1</id> | |
| <description>If A is null, return null</description> | |
| <location chapter="1" section="23.6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:42.2</id> | |
| <description>If A is assignable to T, coerce quietly</description> | |
| <location chapter="1" section="23.6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:42.3</id> | |
| <description>If A is "", return null.</description> | |
| <location chapter="1" section="23.6" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:42.4</id> | |
| <description>If A is a String call Enum.valueOf(T.getClass(), A) | |
| and return | |
| the result.</description> | |
| <location chapter="1" section="23.6" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:81</id> | |
| <description>Coerce A to array of type T</description> | |
| <location chapter="1" section="23.7" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:81.1</id> | |
| <description>If A is null, return null</description> | |
| <location chapter="1" section="23.7" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:81.2</id> | |
| <description>If A is assignable to an array of type T, coerce | |
| quietly</description> | |
| <location chapter="1" section="23.7" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:81.3</id> | |
| <description>If A is an array, return a copy of the array where | |
| each element has been coerced to type T using these | |
| rules</description> | |
| <location chapter="1" section="23.7" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:81.4</id> | |
| <description>If A is an array but at least one element of the | |
| array cannot be coerced to type T, error</description> | |
| <location chapter="1" section="23.7" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:81.5</id> | |
| <description>If A is not an array, error</description> | |
| <location chapter="1" section="23.7" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:79</id> | |
| <description>Coerce A to functional interface method invocation</description> | |
| <location chapter="1" section="23.8" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:79.1</id> | |
| <description>If A is LamdaEXpression and parameters are an exact match, coerce to functional interface invocation.</description> | |
| <location chapter="1" section="23.8" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:79.2</id> | |
| <description>If A is not LamdaEXpression, follow 1.23.9 and throw an exception.</description> | |
| <location chapter="1" section="23.8" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:79.3</id> | |
| <description>If A is LamdaEXpression and parameters match if coerced, coerce to functional interface invocation.</description> | |
| <location chapter="1" section="23.8" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:43</id> | |
| <description>Coerce A to any other type T</description> | |
| <location chapter="1" section="23.9" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:43.1</id> | |
| <description>If A is null, return null.</description> | |
| <location chapter="1" section="23.9" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:43.2</id> | |
| <description>If A is assignable to T, coerce quietly.</description> | |
| <location chapter="1" section="23.9" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:43.3</id> | |
| <description>If A is String, and T has no Property Editor, then if | |
| A is "" | |
| return null, otherwise error.</description> | |
| <location chapter="1" section="23.9" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:43.4</id> | |
| <description>If A is String, and T's PropertyEditor throws | |
| exception, then | |
| if A is "" return null, otherwise error.</description> | |
| <location chapter="1" section="23.9" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:43.5</id> | |
| <description>Otherwise, apply T's PropertyEditor</description> | |
| <location chapter="1" section="23.9" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:43.6</id> | |
| <description>Otherwise, error</description> | |
| <location chapter="1" section="23.9" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <!-- Start Chapter 2, Operations on Collection Objects --> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:44</id> | |
| <description>All Expressions must be Serializable</description> | |
| <location chapter="2" section="1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:51</id> | |
| <description> | |
| Construct an instance of java.lang.util.Set<Object>. | |
| </description> | |
| <location chapter="2" section="2.2.1" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:51.1</id> | |
| <description>SetData := '{' DataList '}'</description> | |
| <location chapter="2" section="2.2.1.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:51.2</id> | |
| <description>DataList := (expression (',' expression)* )?</description> | |
| <location chapter="2" section="2.2.1.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:52</id> | |
| <description> | |
| Construct an instance of java.lang.util.List<Object>. | |
| </description> | |
| <location chapter="2" section="2.2.2" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:52.1</id> | |
| <description>ListData := '{' DataList '}'</description> | |
| <location chapter="2" section="2.2.2.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:52.2</id> | |
| <description>DataList := (expression (',' expression)* )?</description> | |
| <location chapter="2" section="2.2.2.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:53</id> | |
| <description> | |
| Construct an instance of java.lang.util.Map<Object>. | |
| </description> | |
| <location chapter="2" section="2.2.3" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:53.1</id> | |
| <description>Map := '{' MapEntries '}'</description> | |
| <location chapter="2" section="2.2.3.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:53.2</id> | |
| <description>MapEntries := (MapEntry (',' MapEntry)* )?</description> | |
| <location chapter="2" section="2.2.3.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:53.3</id> | |
| <description>MapEntry := expression ':' expression</description> | |
| <location chapter="2" section="2.2.3.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:54</id> | |
| <description>Some methods have optional parameters. The | |
| declarations | |
| of the | |
| methods with all possible combinations of the | |
| parameters are | |
| listed in the | |
| syntax sections, as if they are | |
| overloaded. A null | |
| parameter is not allowed, | |
| and will result in | |
| NullPointerException.</description> | |
| <location chapter="2" section="2.3.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:55</id> | |
| <description> | |
| An instant of Stream is obtained by calling the method | |
| stream() | |
| of a collection. The methods in this class support the | |
| stream | |
| operations and | |
| are described in Section 2.3.5 to Section | |
| 2.3.24. | |
| </description> | |
| <location chapter="2" section="2.3.3.1" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="false"> | |
| <id>EL:SPEC:56</id> | |
| <description> | |
| The following are methods in an Optional<T> </description> | |
| <location chapter="2" section="2.3.3.2" /> | |
| <sub-assertions> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:56.1</id> | |
| <description> | |
| T get() Returns the value held by the Optional, or | |
| throws an | |
| ELException if the Optional is empty. | |
| </description> | |
| <location chapter="2" section="2.3.3.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:56.2</id> | |
| <description> | |
| T orElse(T other) Returns the value held by the | |
| Optional, or | |
| the value other if the Optional is empty. | |
| </description> | |
| <location chapter="2" section="2.3.3.2" /> | |
| </assertion> | |
| <assertion required="true" impl-spec="false" defined-by="technology" | |
| status="active" testable="true"> | |
| <id>EL:SPEC:56.3</id> | |
| <description> | |
| T orElseGet((()->T) other) Returns the value held by the | |
| Optional, or the value returned by the lambda expression | |
| other if | |
| the | |
| Optional is empty. | |
| </description> | |
| <location chapter="2" section="2.3.3.2" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:57</id> | |
| <description>Some operations takes functions (lambda expressions) as | |
| parameters. Again, we used the notion (arg1Type, | |
| ...)->returnType | |
| to | |
| describe the argument types and the | |
| return type of a function.</description> | |
| <location chapter="2" section="2.3.4" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:57.1</id> | |
| <description>predicate S -> boolean | |
| This function takes the input | |
| argument, usually the element of the | |
| source stream, and determines | |
| if it | |
| satisfies some criteria</description> | |
| <location chapter="2" section="2.3.4.1" /> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:57.2</id> | |
| <description>booleanSupplier () -> boolean | |
| This function takes | |
| noarguments, and returns a boolean | |
| value.</description> | |
| <location chapter="2" section="2.3.4.2" /> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:57.3</id> | |
| <description>mapper S -> R | |
| This function maps, or transforms the | |
| input | |
| argument, usually the | |
| element of the source stream, to the | |
| result.</description> | |
| <location chapter="2" section="2.3.4.3" /> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:57.4</id> | |
| <description> | |
| comparator | |
| (S, S) -> int | |
| This function compares two | |
| arguments, usually the elements of the | |
| source stream, and returns a | |
| negative integer, zero, or a positive | |
| integer, if the first | |
| argument is | |
| respectively less than, equal | |
| to, or greater than the | |
| second argument. | |
| </description> | |
| <location chapter="2" section="2.3.4.4" /> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:57.5</id> | |
| <description> | |
| consumer S -> void | |
| This function processes the input | |
| argument, usually the element of the | |
| source stream, and returns | |
| nothing. | |
| </description> | |
| <location chapter="2" section="2.3.4.5" /> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:57.6</id> | |
| <description> | |
| binaryOperator (S, S) -> S | |
| This function applies a | |
| binary | |
| operation to the input | |
| arguments, and returns the result. | |
| The first argument | |
| is usually an internal | |
| accumulator, and the | |
| second argument is usually the | |
| element of the source stream. The | |
| arguments and the result are of the same | |
| type. | |
| </description> | |
| <location chapter="2" section="2.3.4.6" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:58</id> | |
| <description> | |
| The filter method | |
| produces a stream containing the source | |
| stream | |
| elements for which | |
| the predicate function return true. The | |
| argument | |
| of | |
| predicate | |
| function represents the element to test. | |
| </description> | |
| <location chapter="2" section="2.3.5" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:58.1</id> | |
| <description> | |
| Stream<S> </description> | |
| <location chapter="2" section="2.3.5.1" /> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:58.2</id> | |
| <description> | |
| Stream<S>.filter((S->boolean) predicate) | |
| </description> | |
| <location chapter="2" section="2.3.5.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:59</id> | |
| <description> | |
| The map method produces a stream by applying the mapper | |
| function | |
| on the elements of the source stream. The argument of | |
| mapper function | |
| represents the element to process. | |
| </description> | |
| <location chapter="2" section="2.3.6" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:59.1</id> | |
| <description> | |
| Stream<R> Stream<S>.map((S->R)mapper) | |
| </description> | |
| <location chapter="2" section="2.3.6.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:60</id> | |
| <description> | |
| The flatMap method produces a stream by mapping each of the | |
| source elements to another stream and then concatenating the mapped streams. | |
| If the mapper function does not return a Stream, the behavior is undefined. | |
| source elements to zero or more elements. | |
| </description> | |
| <location chapter="2" section="2.3.7" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:60.1</id> | |
| <description> | |
| Stream<R> | |
| Stream<S>.flatMap((S->Stream<R>) mapper) | |
| </description> | |
| <location chapter="2" section="2.3.7.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:61</id> | |
| <description> | |
| The distinct method produces a stream containing the | |
| elements of | |
| the source stream that are distinct, according to | |
| Object.equals. | |
| </description> | |
| <location chapter="2" section="2.3.8" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:61.1</id> | |
| <description> | |
| Stream<S> Stream<S>.distinct() | |
| </description> | |
| <location chapter="2" section="2.3.8.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:62</id> | |
| <description> | |
| The sorted method produces a stream containing the | |
| elements of | |
| the source | |
| stream in sorted order. If no comparator is | |
| specified, the elements | |
| are sorted in natural order, and a | |
| ELException is thrown if the | |
| elements do | |
| not implement | |
| java.lang.Comparable. If a comparator is | |
| specified, the elements | |
| are | |
| sorted with the provided comparator. | |
| </description> | |
| <location chapter="2" section="2.3.9" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:62.1</id> | |
| <description> | |
| Stream<S> Stream<S>.sorted() | |
| </description> | |
| <location chapter="2" section="2.3.9.1" /> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:62.2</id> | |
| <description> | |
| Stream<S> Stream<S>.sorted((p,q)->int) | |
| comparator) | |
| </description> | |
| <location chapter="2" section="2.3.9.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:63</id> | |
| <description> | |
| The forEach method invokes the consumer function for each | |
| element in the source | |
| stream. This method always returns null. | |
| </description> | |
| <location chapter="2" section="2.3.10" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:63.1</id> | |
| <description> | |
| Object stream<S>.forEach(((S)->void)consumer) | |
| </description> | |
| <location chapter="2" section="2.3.10.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:64</id> | |
| <description> | |
| The peek method produces a stream containing the elements of the | |
| source stream, and | |
| invokes the consumer function for each element in the | |
| stream. | |
| </description> | |
| <location chapter="2" section="2.3.11" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:64.1</id> | |
| <description> | |
| Stream<S> Stream<S>.peek(((S)->void)consumer) | |
| </description> | |
| <location chapter="2" section="2.3.11.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:65</id> | |
| <description> | |
| The iterator method returns an iterator for the source stream, | |
| suitable for use in Java codes. | |
| </description> | |
| <location chapter="2" section="2.3.11" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:65.1</id> | |
| <description> | |
| Iterator<S> Stream<S>.iterator() | |
| </description> | |
| <location chapter="2" section="2.3.11.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:66</id> | |
| <description> | |
| The limit method produces a stream containing the first count | |
| number of elements of the source stream. | |
| </description> | |
| <location chapter="2" section="2.3.13" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:66.1</id> | |
| <description> | |
| Stream<S> Stream<S>.limit(long count) | |
| </description> | |
| <location chapter="2" section="2.3.13.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:67</id> | |
| <description> | |
| The substream method produces a stream containing the source | |
| elements, skipping the first start elements, and including the rest of the | |
| elements in the stream if end is not specified, or the next (end - start) | |
| elements in the stream if end is specified. | |
| </description> | |
| <location chapter="2" section="2.3.14" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:67.1</id> | |
| <description> | |
| Stream<S> Stream<S>.substream(long start) | |
| </description> | |
| <location chapter="2" section="2.3.14.1" /> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:67.2</id> | |
| <description> | |
| Stream<S> Stream<S>.substream(long start, | |
| long end) | |
| </description> | |
| <location chapter="2" section="2.3.14.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:68</id> | |
| <description> | |
| the toArray method returns an array containing the elements of | |
| the source stream. | |
| </description> | |
| <location chapter="2" section="2.3.15" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:68.1</id> | |
| <description> | |
| S[] Stream<S>.toArray() | |
| </description> | |
| <location chapter="2" section="2.3.15.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:69</id> | |
| <description> | |
| The toList | |
| </description> | |
| <location chapter="2" section="2.3.16" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:69.1</id> | |
| <description> | |
| S[] Stream<S>.toList() | |
| </description> | |
| <location chapter="2" section="2.3.16.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:70</id> | |
| <description> | |
| The reduce method with a seed value starts by assigning the seed | |
| value to an internal accumulator. Then for each of the elements in the | |
| source stream, the next accumulator value is computed, by invoking the | |
| binaryOperator function, with the current accumulator value as the first | |
| argument and the current element as the second argument. The final | |
| accumulator value is returned | |
| </description> | |
| <location chapter="2" section="2.3.17" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:70.1</id> | |
| <description> | |
| Optional<S> Stream<S>.reduce(((S,S)->S) | |
| binaryOperator) | |
| </description> | |
| <location chapter="2" section="2.3.17.1" /> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:70.2</id> | |
| <description> | |
| S Stream<S>.reduce(S seed, ((S,S)->S) | |
| binaryOperator)) | |
| </description> | |
| <location chapter="2" section="2.3.17.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:71</id> | |
| <description> | |
| The max method computes the maximum of the elelments in the | |
| source stream. If the comparator function is specified, it is used for | |
| comparisons. If no comparator function is specified, the elements themselves | |
| are compared, and must implement Comparable, otherwise an ELException is | |
| thrown. | |
| </description> | |
| <location chapter="2" section="2.3.18" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:71.1</id> | |
| <description> | |
| Optional Stream<S>.max() | |
| </description> | |
| <location chapter="2" section="2.3.18.1" /> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:71.2</id> | |
| <description> | |
| Optional Stream<S>.max(((p,q)->int) comparator) | |
| </description> | |
| <location chapter="2" section="2.3.18.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:72</id> | |
| <description> | |
| The min method computes the minimum of the elelments in the | |
| source stream. If the comparator function is specified, it is used for | |
| comparisons. If no comparator function is specified, the elements themselves | |
| are compared, and must implement Comparable, otherwise an ELException is | |
| thrown. | |
| </description> | |
| <location chapter="2" section="2.3.19" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:72.1</id> | |
| <description> | |
| Optional Stream<S>.min() | |
| </description> | |
| <location chapter="2" section="2.3.19.1" /> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:72.2</id> | |
| <description> | |
| Optional Stream<S>.min(((p,q)->int) comparator) | |
| </description> | |
| <location chapter="2" section="2.3.19.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:73</id> | |
| <description> | |
| The average method computes the average of all elements in the | |
| source stream by first computes the sum of the elements and then divides the | |
| sum by the number of elements. The elements are coerced to Number types | |
| according to Section 1.23.3 during the computation. | |
| This method returns zero | |
| for an empty stream. | |
| </description> | |
| <location chapter="2" section="2.3.20" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:73.1</id> | |
| <description> | |
| Optional Stream<S>.average() | |
| </description> | |
| <location chapter="2" section="2.3.20.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:74</id> | |
| <description> | |
| The sum method computes the sum of all elements in the source | |
| stream. The elements are coerced to Number types according to Section 1.23.3 | |
| during the computation. | |
| This method returns zero for an empty stream. | |
| </description> | |
| <location chapter="2" section="2.3.21" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:74.1</id> | |
| <description> | |
| Number Stream<S>.sum() | |
| </description> | |
| <location chapter="2" section="2.3.21.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:79</id> | |
| <description> | |
| This method returns the count of elements in the source stream. | |
| </description> | |
| <location chapter="2" section="2.3.22" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:79.1</id> | |
| <description> | |
| Long Stream<S>.count() | |
| </description> | |
| <location chapter="2" section="2.3.22.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:75</id> | |
| <description> | |
| The anyMatch method returns an Optional of true if any element | |
| in the source stream satisfies the test given by the predicate. It returns | |
| an empty Optional if the stream is empty. | |
| </description> | |
| <location chapter="2" section="2.3.23" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:75.1</id> | |
| <description> | |
| Optional<boolean> | |
| Stream<S>.anyMatch((S->boolean) predicate) | |
| </description> | |
| <location chapter="2" section="2.3.23.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:76</id> | |
| <description> | |
| The allMatch method returns an Optional of true if all elements | |
| in the source stream satisfy the test given by the predicate. It returns an | |
| empty Optional if the stream is empty. | |
| </description> | |
| <location chapter="2" section="2.3.24" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:76.1</id> | |
| <description> | |
| Optional<boolean> | |
| Stream<S>.allMatch((S->boolean) predicate) | |
| </description> | |
| <location chapter="2" section="2.3.24.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:77</id> | |
| <description> | |
| The nonematch method returns an Optional of true if none of the | |
| elements in the source stream satisfies the test given by the predicate. It | |
| returns an empty Optional if the stream is empty. | |
| </description> | |
| <location chapter="2" section="2.3.25" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:77.1</id> | |
| <description> | |
| Optional<boolean> | |
| Stream<S>.noneMatch((S->boolean) predicate) | |
| </description> | |
| <location chapter="2" section="2.3.25.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| <assertion defined-by="technology" status="active" testable="false" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:78</id> | |
| <description> | |
| The findFirst method returns an Optional containing the first | |
| element in the stream, or an empty Optional if the stream is empty. | |
| </description> | |
| <location chapter="2" section="2.3.26" /> | |
| <sub-assertions> | |
| <assertion defined-by="technology" status="active" testable="true" | |
| impl-spec="true" required="true"> | |
| <id>EL:SPEC:78.1</id> | |
| <description> | |
| Optional<S> Stream<S>.findFirst() | |
| </description> | |
| <location chapter="2" section="2.3.26.1" /> | |
| </assertion> | |
| </sub-assertions> | |
| </assertion> | |
| </assertions> | |
| </spec> |