Jacks Tests

Jacks Logo Testing Java is easy, if you play your cards right.

jls section directory
3.2 tests/jls/lexical-structure/lexical-translations
3.3 tests/jls/lexical-structure/unicode-escapes
3.4 tests/jls/lexical-structure/line-terminators
3.5 tests/jls/lexical-structure/input-elements-and-tokens
3.6 tests/jls/lexical-structure/white-space
3.7 tests/jls/lexical-structure/comments
3.8 tests/jls/lexical-structure/identifiers
3.9 tests/jls/lexical-structure/keywords
3.10.1 tests/jls/lexical-structure/literals/integer-literals
3.10.2 tests/jls/lexical-structure/literals/floating-point-literals
3.10.4 tests/jls/lexical-structure/literals/character-literals
3.10.5 tests/jls/lexical-structure/literals/string-literals
3.10.7 tests/jls/lexical-structure/literals/escape-sequences
4.5.4 tests/jls/types-values-and-variables/variables/final-variables
5.1.1 tests/jls/conversions-and-promotions/kinds-of-conversion/identity-conversions
5.1.2 tests/jls/conversions-and-promotions/kinds-of-conversion/widening-primitive-conversions
5.1.3 tests/jls/conversions-and-promotions/kinds-of-conversion/narrowing-primitive-conversions
5.2 tests/jls/conversions-and-promotions/assignment-conversion
6.2 tests/jls/names/names-and-identifiers
6.3 tests/jls/names/scope-of-a-declaration
6.4.1 tests/jls/names/members-and-inheritance/members-of-a-package
6.4.2 tests/jls/names/members-and-inheritance/members-of-a-class-type
6.4.3 tests/jls/names/members-and-inheritance/members-of-an-interface-type
6.4.4 tests/jls/names/members-and-inheritance/members-of-an-array-type
6.5.1 tests/jls/names/meaning-of-a-name/syntactic-classification
6.5.2 tests/jls/names/meaning-of-a-name/reclassification
6.5.3.1 tests/jls/names/meaning-of-a-name/package-names/simple
6.5.3.2 tests/jls/names/meaning-of-a-name/package-names/qualified
6.5.4.1 tests/jls/names/meaning-of-a-name/packageortypenames/simple
6.5.4.2 tests/jls/names/meaning-of-a-name/packageortypenames/qualified
6.5.5.1 tests/jls/names/meaning-of-a-name/type-names/simple
6.5.5.2 tests/jls/names/meaning-of-a-name/type-names/qualified
6.5.6.1 tests/jls/names/meaning-of-a-name/expression-names/simple
6.5.6.2 tests/jls/names/meaning-of-a-name/expression-names/qualified
6.5.7.1 tests/jls/names/meaning-of-a-name/method-names/simple
6.5.7.2 tests/jls/names/meaning-of-a-name/method-names/qualified
6.6.1 tests/jls/names/access-control/determining-accessibility
6.6.2.1 tests/jls/names/access-control/details-on-protected-access/protected-member
6.6.2.2 tests/jls/names/access-control/details-on-protected-access/protected-constructor
7.1 tests/jls/packages/package-members
7.3 tests/jls/packages/compilation-units
7.4.1 tests/jls/packages/package-declarations/named-packages
7.4.2 tests/jls/packages/package-declarations/unnamed-packages
7.5.1 tests/jls/packages/import-declarations/single-type-import-declaration
7.5.2 tests/jls/packages/import-declarations/type-import-on-demand-declaration
7.5.3 tests/jls/packages/import-declarations/automatic-imports
7.5.4 tests/jls/packages/import-declarations/strange-example
7.6 tests/jls/packages/top-level-type-declarations
8.1 tests/jls/classes/class-declaration
8.1.1 tests/jls/classes/class-declaration/class-modifiers
8.1.1.1 tests/jls/classes/class-declaration/class-modifiers/abstract-classes
8.1.1.2 tests/jls/classes/class-declaration/class-modifiers/final-classes
8.1.2 tests/jls/classes/class-declaration/inner-classes-and-enclosing-instances
8.1.3 tests/jls/classes/class-declaration/superclasses-and-subclasses
8.1.4 tests/jls/classes/class-declaration/superinterfaces
8.2 tests/jls/classes/class-members
8.3 tests/jls/classes/field-declarations
8.3.1 tests/jls/classes/field-declarations/field-modifiers
8.3.1.1 tests/jls/classes/field-declarations/field-modifiers/static-fields
8.3.1.2 tests/jls/classes/field-declarations/field-modifiers/final-fields
8.3.2 tests/jls/classes/field-declarations/initialization-of-fields
8.3.2.1 tests/jls/classes/field-declarations/initialization-of-fields/initializers-for-class-variables
8.3.2.2 tests/jls/classes/field-declarations/initialization-of-fields/initializers-for-instance-variables
8.3.2.3 tests/jls/classes/field-declarations/initialization-of-fields/restrictions
8.4.3 tests/jls/classes/method-declarations/method-modifiers
8.4.5 tests/jls/classes/method-declarations/method-body
8.4.6 tests/jls/classes/method-declarations/inheritance-overriding-and-hiding
8.4.6.1 tests/jls/classes/method-declarations/inheritance-overriding-and-hiding/overriding
8.4.6.2 tests/jls/classes/method-declarations/inheritance-overriding-and-hiding/hiding
8.4.6.3 tests/jls/classes/method-declarations/inheritance-overriding-and-hiding/requirements
8.4.6.4 tests/jls/classes/method-declarations/inheritance-overriding-and-hiding/inheriting-same-signature
8.5 tests/jls/classes/member-type-declarations
8.5.1 tests/jls/classes/member-type-declarations/access-modifiers
8.5.2 tests/jls/classes/member-type-declarations/static-member-type-declarations
8.6 tests/jls/classes/instance-initializers
8.7 tests/jls/classes/static-initializers
8.8 tests/jls/classes/constructor-declarations
8.8.1 tests/jls/classes/constructor-declarations/formal-parameters
8.8.2 tests/jls/classes/constructor-declarations/constructor-signature
8.8.3 tests/jls/classes/constructor-declarations/constructor-modifiers
8.8.5 tests/jls/classes/constructor-declarations/constructor-body
8.8.5.1 tests/jls/classes/constructor-declarations/constructor-body/explicit-constructor-invocations
8.8.6 tests/jls/classes/constructor-declarations/constructor-overloading
8.8.7 tests/jls/classes/constructor-declarations/default-constructor
9.1 tests/jls/interfaces/interface-declarations
9.1.1 tests/jls/interfaces/interface-declarations/interface-modifiers
9.1.1.1 tests/jls/interfaces/interface-declarations/interface-modifiers/abstract-interfaces
9.1.2 tests/jls/interfaces/interface-declarations/superinterfaces-and-subinterfaces
9.1.3 tests/jls/interfaces/interface-declarations/interface-body-and-member-declarations
9.2 tests/jls/interfaces/interface-members
9.3 tests/jls/interfaces/field-constant-declarations
9.3.1 tests/jls/interfaces/field-constant-declarations/initialization-of-fields
9.4 tests/jls/interfaces/abstract-method-declarations
9.4.1 tests/jls/interfaces/abstract-method-declarations/inheritance-and-overriding
9.4.2 tests/jls/interfaces/abstract-method-declarations/overloading
10.6 tests/jls/arrays/array-initializers
13.1 tests/jls/binary-compatibility/form-of-binary
14.3 tests/jls/blocks-and-statements/local-class-declarations
14.4.2 tests/jls/blocks-and-statements/local-variable-declaration-statements/scope
14.7 tests/jls/blocks-and-statements/labeled-statements
14.9 tests/jls/blocks-and-statements/if-statement
14.10 tests/jls/blocks-and-statements/switch-statement
14.14 tests/jls/blocks-and-statements/break-statement
14.15 tests/jls/blocks-and-statements/continue-statement
14.18 tests/jls/blocks-and-statements/synchronized-statement
14.19 tests/jls/blocks-and-statements/try-statement
14.20 tests/jls/blocks-and-statements/unreachable-statements
15.8.2 tests/jls/expressions/primary-expressions/class-literals
15.8.4 tests/jls/expressions/primary-expressions/qualified-this
15.8.5 tests/jls/expressions/primary-expressions/parenthesized-expressions
15.9 tests/jls/expressions/class-instance-creation
15.9.1 tests/jls/expressions/class-instance-creation/determining-the-class
15.9.2 tests/jls/expressions/class-instance-creation/determining-enclosing-instances
15.9.3 tests/jls/expressions/class-instance-creation/choosing-the-constructor
15.9.5.1 tests/jls/expressions/class-instance-creation/anonymous-class-declarations/anonymous-constructors
15.10 tests/jls/expressions/array-creation-expressions
15.11.1 tests/jls/expressions/field-access-expressions/using-a-primary
15.11.2 tests/jls/expressions/field-access-expressions/accessing-superclass-members-using-super
15.12.1 tests/jls/expressions/method-invocation-expressions/determine-class-or-interface
15.12.2.1 tests/jls/expressions/method-invocation-expressions/determine-method-signature/applicable-and-accessible
15.12.2.2 tests/jls/expressions/method-invocation-expressions/determine-method-signature/choose-most-specific
15.12.3 tests/jls/expressions/method-invocation-expressions/chosen-method-appropriate
15.13 tests/jls/expressions/array-access-expressions
15.14.1 tests/jls/expressions/postfix-expressions/postfix-increment-operator
15.14.2 tests/jls/expressions/postfix-expressions/postfix-decrement-operator
15.15 tests/jls/expressions/unary-operators
15.15.1 tests/jls/expressions/unary-operators/prefix-increment-operator
15.15.2 tests/jls/expressions/unary-operators/prefix-decrement-operator
15.15.3 tests/jls/expressions/unary-operators/unary-plus-operator
15.15.4 tests/jls/expressions/unary-operators/unary-minus-operator
15.15.5 tests/jls/expressions/unary-operators/bitwise-complement-operator
15.15.6 tests/jls/expressions/unary-operators/logical-complement-operator
15.16 tests/jls/expressions/cast-expressions
15.17 tests/jls/expressions/multiplicative-operators
15.17.1 tests/jls/expressions/multiplicative-operators/multiplication-operator
15.17.2 tests/jls/expressions/multiplicative-operators/division-operator
15.17.3 tests/jls/expressions/multiplicative-operators/remainder-operator
15.18 tests/jls/expressions/additive-operators
15.18.1 tests/jls/expressions/additive-operators/string-concatenation-operator
15.18.2 tests/jls/expressions/additive-operators/numeric-types
15.20 tests/jls/expressions/relational-operators/type-comparison-operator-instanceof
15.20.2 tests/jls/expressions/relational-operators/type-comparison-operator-instanceof
15.21 tests/jls/expressions/equality-operators
15.21.1 tests/jls/expressions/equality-operators/numerical-equality
15.21.3 tests/jls/expressions/equality-operators/reference-equality
15.23 tests/jls/expressions/conditional-and-operator
15.24 tests/jls/expressions/conditional-or-operator
15.25 tests/jls/expressions/conditional-operator
15.26.2 tests/jls/expressions/assignment-operators/compound-assignment-operators
15.28 tests/jls/expressions/constant-expression
16 tests/jls/definite-assignment
16.1.2 tests/jls/definite-assignment/expressions/boolean-conditional-and
16.1.3 tests/jls/definite-assignment/expressions/boolean-conditional-or
16.1.5 tests/jls/definite-assignment/expressions/boolean-conditional-operator
16.1.7 tests/jls/definite-assignment/expressions/assignment-expressions
16.1.8 tests/jls/definite-assignment/expressions/operators-increment-and-decrement
16.2.3 tests/jls/definite-assignment/statements/local-class-declaration-statements
16.2.5 tests/jls/definite-assignment/statements/labeled-statements
16.2.7 tests/jls/definite-assignment/statements/if-statements
16.2.8 tests/jls/definite-assignment/statements/switch-statements
16.2.9 tests/jls/definite-assignment/statements/while-statements
16.2.10 tests/jls/definite-assignment/statements/do-statements
16.2.11 tests/jls/definite-assignment/statements/for-statements
16.2.14 tests/jls/definite-assignment/statements/try-statements
16.5 tests/jls/definite-assignment/anonymous-classes
16.8 tests/jls/definite-assignment/constructors-and-instance-initializers
try-statement tests/jls/blocks-and-statements/try-statement
runtime section directory
3.10.1 tests/runtime/jls/lexical-structure/literals/integer-literals
3.10.2 tests/runtime/jls/lexical-structure/literals/floating-point-literals
3.10.4 tests/runtime/jls/lexical-structure/literals/character-literals
3.10.5 tests/runtime/jls/lexical-structure/literals/string-literals
4.10 tests/runtime/jvms/class-file-format/limitations
6.6.1 tests/runtime/jls/classes/constructor-declarations/constructor-access
8.1.2 tests/runtime/jls/classes/class-declaration/inner-classes-and-enclosing-instances
8.3 tests/runtime/jls/classes/field-declarations
8.4.6 tests/runtime/jls/classes/method-declarations/inheritance-overriding-and-hiding
8.4.6.4 tests/runtime/jls/classes/method-declarations/inheritance-overriding-and-hiding
8.8.3 tests/runtime/jls/classes/constructor-declarations/constructor-modifiers
8.8.5 tests/runtime/jls/classes/constructor-declarations/constructor-body
8.8.7 tests/runtime/jls/classes/constructor-declarations/default-constructor
12.4.1 tests/runtime/jls/execution/initialization-of-classes-and-interfaces/when-initialization-occurs
12.4.2 tests/runtime/jls/execution/initialization-of-classes-and-interfaces/detailed-initialization-procedure
12.5 tests/runtime/jls/execution/creation-of-new-class-instances
13.1 tests/runtime/jls/binary-compatibility/form-of-binary
14 tests/runtime/jls/blocks-and-statements
14.3 tests/runtime/jls/blocks-and-statements/local-class-declarations
14.3.1 tests/runtime/jls/blocks-and-statements/local-class-declarations
14.9.1 tests/runtime/jls/blocks-and-statements/if-statement/if-then-statement
14.9.2 tests/runtime/jls/blocks-and-statements/if-statement/if-then-else-statement
14.10 tests/runtime/jls/blocks-and-statements/switch-statement
14.11 tests/runtime/jls/blocks-and-statements/while-statement
14.12 tests/runtime/jls/blocks-and-statements/do-statement
14.13 tests/runtime/jls/blocks-and-statements/for-statement
14.14 tests/runtime/jls/blocks-and-statements/break-statement
14.18 tests/runtime/jls/blocks-and-statements/synchronized-statement
14.19.1 tests/runtime/jls/blocks-and-statements/try-statement/try-catch
14.19.2 tests/runtime/jls/blocks-and-statements/try-statement/try-catch-finally
15.8.4 tests/runtime/jls/expressions/primary-expressions/qualified-this
15.9 tests/runtime/jls/expressions/class-instance-creation
15.9.4 tests/runtime/jls/expressions/class-instance-creation/run-time-evaluation
15.11.1 tests/runtime/jls/expressions/field-access-expressions/using-a-primary
15.11.2 tests/runtime/jls/expressions/field-access-expressions/accessing-superclass-members-using-super
15.12.3 tests/runtime/jls/expressions/method-invocation-expressions/chosen-method-appropriate
15.12.4.1 tests/runtime/jls/expressions/method-invocation-expressions/runtime-evaluation/compute-target-reference
15.13.2 tests/runtime/jls/expressions/array-access-expressions/examples
15.14 tests/runtime/jls/expressions/postfix-expressions
15.15 tests/runtime/jls/expressions/unary-operators
15.18.1.1 tests/runtime/jls/expressions/additive-operators/string-conversion
15.20 tests/runtime/jls/expressions/relational-operators/type-comparison-operator-instanceof
15.21.3 tests/runtime/jls/expressions/equality-operators/reference-equality
15.25 tests/runtime/jls/expressions/conditional-operator
15.26.1 tests/runtime/jls/expressions/assignment-operators/simple-assignment-operator
15.26.2 tests/runtime/jls/expressions/assignment-operators/compound-assignment-operators
15.28 tests/runtime/jls/expressions/constant-expression
16.5 tests/runtime/jls/definite-assignment/anonymous-classes
41.3 tests/runtime/non-jls/assert
non-jls section directory
41.2 tests/non-jls/assert/syntax
41.4 tests/non-jls/assert/definite-assignment
argument-expansion tests/non-jls/argument-expansion
encoding tests/non-jls/encoding
random-crashers tests/non-jls/random-crashers
zip tests/non-jls/zip
gcj section directory
gcj tests/gcj
jikes section directory
3.1 tests/jikes/jls/lexical-structure/unicode
3.10.4 tests/jikes/jls/lexical-structure/literals/character-literals
7.5.2 tests/jikes/jls/packages/import-declarations/type-import-on-demand-declaration
8.3.2 tests/jikes/jls/classes/field-declarations/initialization-of-fields
8.4.5 tests/jikes/jls/classes/method-declarations/method-body
8.8.5.1 tests/jikes/jls/classes/constructor-declarations/constructor-body/explicit-constructor-invocations
14.7 tests/jikes/jls/blocks-and-statements/labeled-statements
14.19 tests/jikes/jls/blocks-and-statements/try-statement
14.20 tests/jikes/jls/blocks-and-statements/unreachable-statements
jikes tests/jikes
jvms section directory
4.7.10 tests/jvms/class-file-format/attributes/deprecated-attribute
4.10 tests/jvms/class-file-format/limitations

Section Index:





jls tests


3.2

Directory : tests/jls/lexical-structure/lexical-translations


Test Case: 3.2-invalid-1
The parser must consume the largest token, even if another interpretation is valid

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-1 { The parser must consume the largest token,
        even if another interpretation is valid } {
    
    empty_class T32i1 {
        int foo(int a, int b) {
            return a--b;
        }
    }

} {FAIL}
Test Case: 3.2-invalid-2
ensure that unicode escapes are processed before tokenization is done

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-2 { ensure that unicode escapes are processed
        before tokenization is done } {
    
    empty_class T32i2 {
        int foo(int a, int b) {
            return \u0061\u002d\u002d\u0062;
        }
    }

} {FAIL}
Test Case: 3.2-invalid-3
The parser must consume the largest token, even if another interpretation is valid

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-3 { The parser must consume the largest token,
        even if another interpretation is valid } {
    
    compile [saveas T32i3.java {classT32i3 {}}]

} {FAIL}
Test Case: 3.2-invalid-4
The parser must consume the largest token, even if another interpretation is valid

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-4 { The parser must consume the largest token,
        even if another interpretation is valid } {
    
    empty_main T32i4 {
        int i = 1/// comment starts at first /, not second
        1;
    }

} {FAIL}
Test Case: 3.2-invalid-5
Comments, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-5 { Comments, as tokens, separate other tokens } {
    
    empty_main T32i5 {
        int i = 1/**/0;
    }

} {FAIL}
Test Case: 3.2-invalid-6
Comments, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-6 { Comments, as tokens, separate other tokens } {
    
    empty_main T32i6 {
        i/**/nt i = 10;
    }

} {FAIL}
Test Case: 3.2-invalid-7
Comments, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-7 { Comments, as tokens, separate other tokens } {
    
    empty_main T32i7 {
        int i = 0;
        i +/**/= 10;
    }

} {FAIL}
Test Case: 3.2-invalid-8
An unterminated \ is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-8 { An unterminated \ is illegal } {
    
    compile [saveas T32i8.java "class T32i8{} \\"]

} {FAIL}
Test Case: 3.2-invalid-9
Even in comments, \u escapes must be legal

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-9 { Even in comments, \u escapes must be legal } {
    
    empty_main T32i9 {
	/* \udefg */
    }

} {FAIL}
Test Case: 3.2-invalid-10
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-10 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i10 {
        int i = 0;
        i + = 10;
    }

} {FAIL}
Test Case: 3.2-invalid-11
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-11 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i11 {
        int i = 0;
        i = i > > 1;
    }

} {FAIL}
Test Case: 3.2-invalid-12
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-12 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i12 {
        int i = 0;
        i = i > > > 1;
    }

} {FAIL}
Test Case: 3.2-invalid-13
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-13 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i13 {
        int i = 0;
        i = i >> > 1;
    }

} {FAIL}
Test Case: 3.2-invalid-14
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-14 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i14 {
        int i = 0;
        i = i > >> 1;
    }

} {FAIL}
Test Case: 3.2-invalid-15
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-15 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i15 {
        int i = 0;
        boolean b = i > = 1;
    }

} {FAIL}
Test Case: 3.2-invalid-16
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-16 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i16 {
        int i = 0;
        i > > = 1;
    }

} {FAIL}
Test Case: 3.2-invalid-17
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-17 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i17 {
        int i = 0;
        i >> = 1;
    }

} {FAIL}
Test Case: 3.2-invalid-18
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-18 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i18 {
        int i = 0;
        i > >= 1;
    }

} {FAIL}
Test Case: 3.2-invalid-19
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-19 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i19 {
        int i = 0;
        i > > > = 1;
    }

} {FAIL}
Test Case: 3.2-invalid-20
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-20 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i20 {
        int i = 0;
        i >> >= 1;
    }

} {FAIL}
Test Case: 3.2-invalid-21
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-21 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i21 {
        int i = 0;
        i > > >= 1;
    }

} {FAIL}
Test Case: 3.2-invalid-22
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-22 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i22 {
        int i = 0;
        i > >> = 1;
    }

} {FAIL}
Test Case: 3.2-invalid-23
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-23 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i23 {
        int i = 0;
        i >> > = 1;
    }

} {FAIL}
Test Case: 3.2-invalid-24
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-24 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i24 {
        int i = 0;
        i > >>= 1;
    }

} {FAIL}
Test Case: 3.2-invalid-25
Whitespace, as tokens, separate other tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.2-invalid-25 { Whitespace, as tokens, separate other tokens } {
    
    empty_main T32i25 {
        int i = 0;
        i >>> = 1;
    }

} {FAIL}
Test Case: 3.2-valid-1
Compiler should recognize difference in tokens

Expected Result: PASS

Regression Test:

tcltest::test 3.2-valid-1 { Compiler should recognize difference in tokens } {
    
    empty_main T32v1 {
        boolean b1=""+1instanceof String;
        boolean b2=""+1Linstanceof String;
        boolean b3=""+1linstanceof String;
        boolean b4=""+1Dinstanceof String;
        boolean b5=""+1dinstanceof String;
        boolean b6=""+1Finstanceof String;
        boolean b7=""+1finstanceof String;
        boolean b8=""+0x1instanceof String;
        boolean b9=""+0xAinstanceof String;
        boolean b10=""+0xainstanceof String;
        boolean b11=""+'1'instanceof String;
        boolean b12=""+1.instanceof String;
        boolean b13=""+.1instanceof String;
    }

} {PASS}
Test Case: 3.2-valid-2
The parser must consume the largest token, even if another interpretation is valid

Expected Result: PASS

Regression Test:

tcltest::test 3.2-valid-2 { The parser must consume the largest token,
        even if another interpretation is valid } {
    
    empty_main T32v2 {
        int i = 1/* only one comment, last / performs division *//1;
    }

} {PASS}
Test Case: 3.2-valid-3
The parser must consume the largest token

Expected Result: PASS

Regression Test:

tcltest::test 3.2-valid-3 { The parser must consume the largest token } {
    
    empty_main T32v3 {
	int i = 1;
	boolean b = i >= 1;
	i >>= i >> 1;
	i >>>= i >>> 1;
    }

} {PASS}

3.3

Directory : tests/jls/lexical-structure/unicode-escapes


Test Case: 3.3-invalid-1
A unicode sequence must have four hex digits

Expected Result: FAIL

Regression Test:

tcltest::test 3.3-invalid-1 { A unicode sequence must have four hex digits } {
    
    compile [saveas T33i1.java {class T33i1 { char c = '\u20'; }}]

} {FAIL}
Test Case: 3.3-invalid-2
A unicode sequence does not recursively form more unicode sequences

Expected Result: FAIL

Regression Test:

tcltest::test 3.3-invalid-2 { A unicode sequence does not recursively
        form more unicode sequences } {
    
    compile [saveas T33i2.java {
class T33i2 {
    String s = "\u005cu005a"; // this sequence is not 'z'
}
    }]

} {FAIL}
Test Case: 3.3-invalid-3
An even number of \ never form a unicode escape

Expected Result: FAIL

Regression Test:

tcltest::test 3.3-invalid-3 { An even number of \ never form a
        unicode escape } {
    
    compile [saveas T33i3.java {class T33i3 {}/* \\u002a/}]

} {FAIL}
Test Case: 3.3-invalid-4
Unicode escapes begin with 'u' only

Expected Result: FAIL

Regression Test:

tcltest::test 3.3-invalid-4 { Unicode escapes begin with 'u' only } {
    
    compile [saveas T33i4.java {class T33i4{ char c = '\Uabcd'; }}]

} {FAIL}
Test Case: 3.3-invalid-5
Test unicode escape cut short by file end

Expected Result: FAIL

Regression Test:

tcltest::test 3.3-invalid-5 { Test unicode escape cut short by file end } {
    
    compile [saveas T33i5.java {class T33i5{} \u}]

} {FAIL}
Test Case: 3.3-invalid-6
Test unicode escape cut short by file end

Expected Result: FAIL

Regression Test:

tcltest::test 3.3-invalid-6 { Test unicode escape cut short by file end } {
    
    compile [saveas T33i6.java {class T33i6{} \uuuua}]

} {FAIL}
Test Case: 3.3-invalid-7
Test unicode escape cut short by file end

Expected Result: FAIL

Regression Test:

tcltest::test 3.3-invalid-7 { Test unicode escape cut short by file end } {
    
    compile [saveas T33i7.java {class T33i7{} \u0a}]

} {FAIL}
Test Case: 3.3-invalid-8
Test unicode escape cut short by file end

Expected Result: FAIL

Regression Test:

tcltest::test 3.3-invalid-8 { Test unicode escape cut short by file end } {
    
    compile [saveas T33i8.java {class T33i8{} \u00a}]

} {FAIL}
Test Case: 3.3-valid-1
Multiple u's are allowed in unicode escapes

Expected Result: PASS

Regression Test:

tcltest::test 3.3-valid-1 { Multiple u's are allowed in unicode escapes } {
    
    compile [saveas T33v1.java {class T33v1 { char c = '\uuuuuuuuuuabcd'; }}]

} {PASS}
Test Case: 3.3-valid-2
Unicode sequences are case insensitive

Expected Result: PASS

Regression Test:

tcltest::test 3.3-valid-2 { Unicode sequences are case insensitive } {
    
    compile [saveas T33v2.java {
class T33v2 {
    void foo(int i) {
        switch (i) {
            case 0:
            case (('\uABcD' == '\uabCd') ? 1 : 0):
        }
    }
}
    }]

} {PASS}
Test Case: 3.3-valid-3
Check that \u replacement matches single quoted char

Expected Result: PASS

Regression Test:

tcltest::test 3.3-valid-3 { Check that \u replacement matches single quoted char } {
    
    compile [saveas T33v3.java {
class T33v3 {
    void foo(int i) {
        switch (i) {
            case 0:
            case (('\u0061' == 'a') ? 1 : 0):
        }
    }
}
    }]

} {PASS}
Test Case: 3.3-valid-4
Check \u replacements in the ASCII range

Expected Result: PASS

Regression Test:

tcltest::test 3.3-valid-4 { Check \u replacements in the ASCII range } {
    

    set class "
class T33v4 \{
    void foo(int i) \{
        switch (i) \{
            case 0:
"

    set total_cases 0

    # Avoid 10 (\n), 13 (\r), 39 ('), and 92 (\)

    foreach {low high} {0 9
                        11 12
                        14 38
                        40 91
                        93 127} {

        for {set i $low} {$i <= $high} {incr i} {
            incr total_cases
            append class [format "%scase ((%d == '\\u%04x') ? %d : 0): // '%c'\n"  "            "  $i $i $total_cases $i]
        }
    }

    append class "        \}\n    \}\n\}\n"

    compile [saveas T33v4.java $class]

} {PASS}
Test Case: 3.3-valid-5
Unicode \u005c ('\') does not suppress next \

Expected Result: PASS

Regression Test:

tcltest::test 3.3-valid-5 { Unicode \u005c ('\') does not suppress next \ } {
    
    constant_expression T33v5 {'\u005c\u0030' == 0}

} {PASS}

3.4

Directory : tests/jls/lexical-structure/line-terminators


Test Case: 3.4-sanity-1
If this passes, the remaining tests are shot

Expected Result: FAIL

Regression Test:

tcltest::test 3.4-sanity-1 { If this passes, the remaining tests are shot } {
    
    compile [saveas T34s1.java "class T34s1 { // }"]

} {FAIL}
Test Case: 3.4-valid-1
CR (\r) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-1 { CR (\r) is a LineTerminator } {
    
    set S \r
    compile [saveas T34v1.java "class T34v1 { // $S}"]

} {PASS}
Test Case: 3.4-valid-2
LF (\n) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-2 { LF (\n) is a LineTerminator } {
    
    set S \n
    compile [saveas T34v2.java "class T34v2 { // $S}"]

} {PASS}
Test Case: 3.4-valid-3
CR (\u000d) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-3 { CR (\u000d) is a LineTerminator } {
    
    set S \\u000d
    compile [saveas T34v3.java "class T34v3 { // $S}"]

} {PASS}
Test Case: 3.4-valid-4
LF (\u000a) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-4 { LF (\u000a) is a LineTerminator } {
    
    set S \\u000a
    compile [saveas T34v4.java "class T34v4 { // $S}"]

} {PASS}
Test Case: 3.4-valid-5
CR (\u000D) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-5 { CR (\u000D) is a LineTerminator } {
    
    set S \\u000D
    compile [saveas T34v5.java "class T34v5 { // $S}"]

} {PASS}
Test Case: 3.4-valid-6
LF (\u000A) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-6 { LF (\u000A) is a LineTerminator } {
    
    set S \\u000A
    compile [saveas T34v6.java "class T34v6 { // $S}"]

} {PASS}
Test Case: 3.4-valid-7
CRLF (\r\n) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-7 { CRLF (\r\n) is a LineTerminator } {
    
    set S \r\n
    compile [saveas T34v7.java "class T34v7 { // $S}"]

} {PASS}
Test Case: 3.4-valid-8
CRLF (\r\u000a) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-8 { CRLF (\r\u000a) is a LineTerminator } {
    
    set S \r\\u000a
    compile [saveas T34v8.java "class T34v8 { // $S}"]

} {PASS}
Test Case: 3.4-valid-9
CRLF (\u000d\n) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-9 { CRLF (\u000d\n) is a LineTerminator } {
    
    set S \\u000d\n
    compile [saveas T34v9.java "class T34v9 { // $S}"]

} {PASS}
Test Case: 3.4-valid-10
CRLF (\r\u000A) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-10 { CRLF (\r\u000A) is a LineTerminator } {
    
    set S \r\\u000A
    compile [saveas T34v10.java "class T34v10 { // $S}"]

} {PASS}
Test Case: 3.4-valid-11
CRLF (\u000D\n) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-11 { CRLF (\u000D\n) is a LineTerminator } {
    
    set S \\u000D\n
    compile [saveas T34v11.java "class T34v11 { // $S}"]

} {PASS}
Test Case: 3.4-valid-12
CRLF (\u000d\u000a) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-12 { CRLF (\u000d\u000a) is a LineTerminator } {
    
    set S \\u000d\\u000a
    compile [saveas T34v12.java "class T34v12 { // $S}"]

} {PASS}
Test Case: 3.4-valid-13
CRLF (\u000d\u000A) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-13 { CRLF (\u000d\u000A) is a LineTerminator } {
    
    set S \\u000d\\u000A
    compile [saveas T34v13.java "class T34v13 { // $S}"]

} {PASS}
Test Case: 3.4-valid-14
CRLF (\u000D\u000a) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-14 { CRLF (\u000D\u000a) is a LineTerminator } {
    
    set S \\u000D\\u000a
    compile [saveas T34v14.java "class T34v14 { // $S}"]

} {PASS}
Test Case: 3.4-valid-15
CRLF (\u000D\u000A) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-15 { CRLF (\u000D\u000A) is a LineTerminator } {
    
    set S \\u000D\\u000A
    compile [saveas T34v15.java "class T34v15 { // $S}"]

} {PASS}
Test Case: 3.4-valid-16
CR (\uuuuu000d) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-16 { CR (\uuuuu000d) is a LineTerminator } {
    
    set S \\uuuuu000d
    compile [saveas T34v16.java "class T34v16 { // $S}"]

} {PASS}
Test Case: 3.4-valid-17
LF (\uuuuu000a) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-17 { LF (\uuuuu000a) is a LineTerminator } {
    
    set S \\uuuuu000a
    compile [saveas T34v17.java "class T34v17 { // $S}"]

} {PASS}
Test Case: 3.4-valid-18
CR (\uuuuu000D) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-18 { CR (\uuuuu000D) is a LineTerminator } {
    
    set S \\uuuuu000D
    compile [saveas T34v18.java "class T34v18 { // $S}"]

} {PASS}
Test Case: 3.4-valid-19
LF (\uuuuu000A) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-19 { LF (\uuuuu000A) is a LineTerminator } {
    
    set S \\uuuuu000A
    compile [saveas T34v19.java "class T34v19 { // $S}"]

} {PASS}
Test Case: 3.4-valid-20
CRLF (\r\uuuuu000a) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-20 { CRLF (\r\uuuuu000a) is a LineTerminator } {
    
    set S \r\\uuuuu000a
    compile [saveas T34v20.java "class T34v20 { // $S}"]

} {PASS}
Test Case: 3.4-valid-21
CRLF (\uuuuu000d\n) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-21 { CRLF (\uuuuu000d\n) is a LineTerminator } {
    
    set S \\uuuuu000d\n
    compile [saveas T34v21.java "class T34v21 { // $S}"]

} {PASS}
Test Case: 3.4-valid-22
CRLF (\r\uuuuu000A) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-22 { CRLF (\r\uuuuu000A) is a LineTerminator } {
    
    set S \r\\uuuuu000A
    compile [saveas T34v22.java "class T34v22 { // $S}"]

} {PASS}
Test Case: 3.4-valid-23
CRLF (\uuuuu000D\n) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-23 { CRLF (\uuuuu000D\n) is a LineTerminator } {
    
    set S \\uuuuu000D\n
    compile [saveas T34v23.java "class T34v23 { // $S}"]

} {PASS}
Test Case: 3.4-valid-24
CRLF (\uuuuu000d\u000a) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-24 { CRLF (\uuuuu000d\u000a) is a LineTerminator } {
    
    set S \\uuuuu000d\\u000a
    compile [saveas T34v24.java "class T34v24 { // $S}"]

} {PASS}
Test Case: 3.4-valid-25
CRLF (\uuuuu000d\u000A) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-25 { CRLF (\uuuuu000d\u000A) is a LineTerminator } {
    
    set S \\uuuuu000d\\u000A
    compile [saveas T34v25.java "class T34v25 { // $S}"]

} {PASS}
Test Case: 3.4-valid-26
CRLF (\uuuuu000D\u000a) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-26 { CRLF (\uuuuu000D\u000a) is a LineTerminator } {
    
    set S \\uuuuu000D\\u000a
    compile [saveas T34v26.java "class T34v26 { // $S}"]

} {PASS}
Test Case: 3.4-valid-27
CRLF (\uuuuu000D\u000A) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-27 { CRLF (\uuuuu000D\u000A) is a LineTerminator } {
    
    set S \\uuuuu000D\\u000A
    compile [saveas T34v27.java "class T34v27 { // $S}"]

} {PASS}
Test Case: 3.4-valid-28
CRLF (\u000d\uuuuu000a) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-28 { CRLF (\u000d\uuuuu000a) is a LineTerminator } {
    
    set S \\u000d\\uuuuu000a
    compile [saveas T34v28.java "class T34v28 { // $S}"]

} {PASS}
Test Case: 3.4-valid-29
CRLF (\u000d\uuuuu000A) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-29 { CRLF (\u000d\uuuuu000A) is a LineTerminator } {
    
    set S \\u000d\\uuuuu000A
    compile [saveas T34v29.java "class T34v29 { // $S}"]

} {PASS}
Test Case: 3.4-valid-30
CRLF (\u000D\uuuuu000a) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-30 { CRLF (\u000D\uuuuu000a) is a LineTerminator } {
    
    set S \\u000D\\uuuuu000a
    compile [saveas T34v30.java "class T34v30 { // $S}"]

} {PASS}
Test Case: 3.4-valid-31
CRLF (\u000D\uuuuu000A) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-31 { CRLF (\u000D\uuuuu000A) is a LineTerminator } {
    
    set S \\u000D\\uuuuu000A
    compile [saveas T34v31.java "class T34v31 { // $S}"]

} {PASS}
Test Case: 3.4-valid-32
CRLF (\uuuuu000d\uuuuu000a) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-32 { CRLF (\uuuuu000d\uuuuu000a) is a LineTerminator } {
    
    set S \\uuuuu000d\\uuuuu000a
    compile [saveas T34v32.java "class T34v32 { // $S}"]

} {PASS}
Test Case: 3.4-valid-33
CRLF (\uuuuu000d\uuuuu000A) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-33 { CRLF (\uuuuu000d\uuuuu000A) is a LineTerminator } {
    
    set S \\uuuuu000d\\uuuuu000A
    compile [saveas T34v33.java "class T34v33 { // $S}"]

} {PASS}
Test Case: 3.4-valid-34
CRLF (\uuuuu000D\uuuuu000a) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-34 { CRLF (\uuuuu000D\uuuuu000a) is a LineTerminator } {
    
    set S \\uuuuu000D\\uuuuu000a
    compile [saveas T34v34.java "class T34v34 { // $S}"]

} {PASS}
Test Case: 3.4-valid-35
CRLF (\uuuuu000D\uuuuu000A) is a LineTerminator

Expected Result: PASS

Regression Test:

tcltest::test 3.4-valid-35 { CRLF (\uuuuu000D\uuuuu000A) is a LineTerminator } {
    
    set S \\uuuuu000D\\uuuuu000A
    compile [saveas T34v35.java "class T34v35 { // $S}"]

} {PASS}
Test Case: 3.4-line-number-1
CR (\r) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-1 { CR (\r) is a LineTerminator } {
    
    set S \r
    compile [saveas T34ln1.java "${S}class T34ln1 {}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-2
LF (\n) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-2 { LF (\n) is a LineTerminator } {
    
    set S \n
    compile [saveas T34ln2.java "${S}class T34ln2 {}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-3
CR (\u000d) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-3 { CR (\u000d) is a LineTerminator } {
    
    set S \\u000d
    compile [saveas T34ln3.java "${S}class T34ln3 {}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-4
LF (\u000a) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-4 { LF (\u000a) is a LineTerminator } {
    
    set S \\u000a
    compile [saveas T34ln4.java "${S}class T34ln4 {}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-5
CR (\u000D) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-5 { CR (\u000D) is a LineTerminator } {
    
    set S \\u000D
    compile [saveas T34ln5.java "${S}class T34ln5 {}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-6
LF (\u000A) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-6 { LF (\u000A) is a LineTerminator } {
    
    set S \\u000A
    compile [saveas T34ln6.java "${S}class T34ln6 {}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-7
CRLF (\r\n) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-7 { CRLF (\r\n) is a LineTerminator } {
    
    set S \r\n
    compile [saveas T34ln7.java "${S}class T34ln7 {}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-8
CRLF (\r\u000a) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-8 { CRLF (\r\u000a) is a LineTerminator } {
    
    set S \r\\u000a
    compile [saveas T34ln8.java "${S}class T34ln8 {}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-9
CRLF (\u000d\n) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-9 { CRLF (\u000d\n) is a LineTerminator } {
    
    set S \\u000d\n
    compile [saveas T34ln9.java "${S}class T34ln9 {}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-10
CRLF (\r\u000A) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-10 { CRLF (\r\u000A) is a LineTerminator } {
    
    set S \r\\u000A
    compile [saveas T34ln10.java "${S}class T34ln10{}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-11
CRLF (\u000D\n) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-11 { CRLF (\u000D\n) is a LineTerminator } {
    
    set S \\u000D\n
    compile [saveas T34ln11.java "${S}class T34ln11{}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-12
CRLF (\u000d\u000a) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-12 { CRLF (\u000d\u000a) is a LineTerminator } {
    
    set S \\u000d\\u000a
    compile [saveas T34ln12.java "${S}class T34ln12{}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-13
CRLF (\u000d\u000A) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-13 { CRLF (\u000d\u000A) is a LineTerminator } {
    
    set S \\u000d\\u000A
    compile [saveas T34ln13.java "${S}class T34ln13{}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-14
CRLF (\u000D\u000a) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-14 { CRLF (\u000D\u000a) is a LineTerminator } {
    
    set S \\u000D\\u000a
    compile [saveas T34ln14.java "${S}class T34ln14{}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-15
CRLF (\u000D\u000A) is a LineTerminator

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-15 { CRLF (\u000D\u000A) is a LineTerminator } {
    
    set S \\u000D\\u000A
    compile [saveas T34ln15.java "${S}class T34ln15{}oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.4-line-number-16
CRCR (\r\r) is two LineTerminators

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-16 { CRCR (\r\r) is two LineTerminators } {
    
    set S \r\r
    compile [saveas T34ln16.java "${S}class T34ln16{}oops"]
    match_err_or_warn {*.java*3*}

} {1}
Test Case: 3.4-line-number-17
CRCR (\u000d\u000d) is two LineTerminators

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-17 { CRCR (\u000d\u000d) is two LineTerminators } {
    
    set S \\u000d\\u000d
    compile [saveas T34ln17.java "${S}class T34ln17{}oops"]
    match_err_or_warn {*.java*3*}

} {1}
Test Case: 3.4-line-number-18
LFLF (\n\n) is two LineTerminators

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-18 { LFLF (\n\n) is two LineTerminators } {
    
    set S \n\n
    compile [saveas T34ln18.java "${S}class T34ln18{}oops"]
    match_err_or_warn {*.java*3*}

} {1}
Test Case: 3.4-line-number-19
LFLF (\u000a\u000a) is two LineTerminators

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-19 { LFLF (\u000a\u000a) is two LineTerminators } {
    
    set S \\u000a\\u000a
    compile [saveas T34ln19.java "${S}class T34ln19{}oops"]
    match_err_or_warn {*.java*3*}

} {1}
Test Case: 3.4-line-number-20
LFCR (\n\r) is two LineTerminators

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-20 { LFCR (\n\r) is two LineTerminators } {
    
    set S \n\r
    compile [saveas T34ln20.java "${S}class T34ln20{}oops"]
    match_err_or_warn {*.java*3*}

} {1}
Test Case: 3.4-line-number-21
LFCR (\u000a\u000d) is two LineTerminators

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-21 { LFCR (\u000a\u000d) is two LineTerminators } {
    
    set S \\u000a\\u000d
    compile [saveas T34ln21.java "${S}class T34ln21{}oops"]
    match_err_or_warn {*.java*3*}

} {1}
Test Case: 3.4-line-number-22
CRLFCRLF (\r\n\r\n) is two LineTerminators

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-22 { CRLFCRLF (\r\n\r\n) is two LineTerminators } {
    
    set S \r\n\r\n
    compile [saveas T34ln22.java "${S}class T34ln22{}oops"]
    match_err_or_warn {*.java*3*}

} {1}
Test Case: 3.4-line-number-23
CRLFCRLF (\u000d\u000a\u000d\u000a) is two LineTerminators

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-23 { CRLFCRLF (\u000d\u000a\u000d\u000a) is two LineTerminators } {
    
    set S \\u000d\\u000a\\u000d\\u000a
    compile [saveas T34ln23.java "${S}class T34ln23{}oops"]
    match_err_or_warn {*.java*3*}

} {1}
Test Case: 3.4-line-number-24
CRCRLFLF (\r\r\n\n) is three LineTerminators

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-24 { CRCRLFLF (\r\r\n\n) is three LineTerminators } {
    
    set S \r\r\n\n
    compile [saveas T34ln24.java "${S}class T34ln24{}oops"]
    match_err_or_warn {*.java*4*}

} {1}
Test Case: 3.4-line-number-25
CRCRLFLF (\u000d\u000d\u000a\u000a) is three LineTerminators

Expected Result: 1

Regression Test:

tcltest::test 3.4-line-number-25 { CRCRLFLF (\u000d\u000d\u000a\u000a) is three LineTerminators } {
    
    set S \\u000d\\u000d\\u000a\\u000a
    compile [saveas T34ln25.java "${S}class T34ln25{}oops"]
    match_err_or_warn {*.java*4*}

} {1}

3.5

Directory : tests/jls/lexical-structure/input-elements-and-tokens


Test Case: 3.5-1
The input sequence CRCR (0x0d0d) should be treated as two line terminators with an empty collection of input elements between them.

Expected Result: PASS

Regression Test:

tcltest::test 3.5-1 { The input sequence CRCR (0x0d0d) should be treated as two
        line terminators with an empty collection of input elements between them.} {
    
    set S \r\r
    compile [saveas T351.java "class T351 {$S$S}"]

} {PASS}
Test Case: 3.5-2
The input sequence LFLF (0x0a0a) should be treated as two line terminators with an empty collection of input elements between them.

Expected Result: PASS

Regression Test:

tcltest::test 3.5-2 { The input sequence LFLF (0x0a0a) should be treated as two
        line terminators with an empty collection of input elements between them.} {
    
    set S \n\n
    compile [saveas T352.java "class T352 {$S$S}"]

} {PASS}
Test Case: 3.5-3
The input sequence LFCR (0x0a0d) should be treated as two line terminators with an empty collection of input elements between them.

Expected Result: PASS

Regression Test:

tcltest::test 3.5-3 { The input sequence LFCR (0x0a0d) should be treated as two
        line terminators with an empty collection of input elements between them.} {
    
    set S \n\r
    compile [saveas T353.java "class T353 {$S$S}"]

} {PASS}
Test Case: 3.5-4
The input sequence CRLFCRLF (0x0d0a0d0a) should be treated as two line terminators with an empty collection of input elements between them.

Expected Result: PASS

Regression Test:

tcltest::test 3.5-4 { The input sequence CRLFCRLF (0x0d0a0d0a) should be treated as two
        line terminators with an empty collection of input elements between them.} {
    
    set S \r\n\r\n
    compile [saveas T354.java "class T354 {$S$S}"]

} {PASS}
Test Case: 3.5-5
The input sequence CRCRLF (0x0d0d0a) should be treated as two line terminators with an empty collection of input elements between them.

Expected Result: PASS

Regression Test:

tcltest::test 3.5-5 { The input sequence CRCRLF (0x0d0d0a) should be treated as two
        line terminators with an empty collection of input elements between them.} {
    
    set S \r\r\n
    compile [saveas T355.java "class T355 {$S$S}"]

} {PASS}
Test Case: 3.5-6
The input sequence LFCRLF (0x0a0d0a) should be treated as two line terminators with an empty collection of input elements between them.

Expected Result: PASS

Regression Test:

tcltest::test 3.5-6 { The input sequence LFCRLF (0x0a0d0a) should be treated as two
        line terminators with an empty collection of input elements between them.} {
    
    set S \n\r\n
    compile [saveas T356.java "class T356 {$S$S}"]

} {PASS}
Test Case: 3.5-7
The input sequence CRLFCR (0x0d0a0d) should be treated as two line terminators with an empty collection of input elements between them.

Expected Result: PASS

Regression Test:

tcltest::test 3.5-7 { The input sequence CRLFCR (0x0d0a0d) should be treated as two
        line terminators with an empty collection of input elements between them.} {
    
    set S \r\n\r
    compile [saveas T357.java "class T357 {$S$S}"]

} {PASS}
Test Case: 3.5-8
The input sequence CRLFLF (0x0d0a0a) should be treated as two line terminators with an empty collection of input elements between them.

Expected Result: PASS

Regression Test:

tcltest::test 3.5-8 { The input sequence CRLFLF (0x0d0a0a) should be treated as two
        line terminators with an empty collection of input elements between them.} {
    
    set S \r\n\n
    compile [saveas T358.java "class T358 {$S$S}"]

} {PASS}
Test Case: 3.5-9
The ASCII SUB character (0x1a) should be ignored if it is the last character in the escaped stream.

Expected Result: PASS

Regression Test:

tcltest::test 3.5-9 { The ASCII SUB character (0x1a) should be ignored if it is
        the last character in the escaped stream. } {
    
    set S \x1a
    compile [saveas T359.java "class T359 {  }$S"]

} {PASS}
Test Case: 3.5-10
The ASCII SUB character (0x1a) should be ignored if it is the last character in the escaped stream.

Expected Result: PASS

Regression Test:

tcltest::test 3.5-10 { The ASCII SUB character (0x1a) should be ignored if it is
        the last character in the escaped stream. } {
    
    set S \\u001a
    compile [saveas T3510.java "class T3510 {  }$S"]

} {PASS}
Test Case: 3.5-11
The ASCII SUB character (0x1a) should be ignored if it is the last character in the escaped stream.

Expected Result: FAIL

Regression Test:

tcltest::test 3.5-11 { The ASCII SUB character (0x1a) should be ignored if it is
        the last character in the escaped stream. } {
    
    set S \x1a
    compile [saveas T3511.java "class T3511 { $S }"]

} {FAIL}
Test Case: 3.5-12
The ASCII SUB character (0x1a) may not be duplicated as the last ignored character in the stream.

Expected Result: FAIL

Regression Test:

tcltest::test 3.5-12 { The ASCII SUB character (0x1a) may not be duplicated as
        the last ignored character in the stream. } {
    
    set S \x1a
    compile [saveas T3512.java "class T3512 {} $S$S"]

} {FAIL}
Test Case: 3.5-13
The ASCII SUB character (0x1a) may not be duplicated as the last ignored character in the stream.

Expected Result: FAIL

Regression Test:

tcltest::test 3.5-13 { The ASCII SUB character (0x1a) may not be duplicated as
        the last ignored character in the stream. } {
    
    set S \\u001a
    compile [saveas T3513.java "class T3513 {} $S$S"]

} {FAIL}
Test Case: 3.5-14
The ASCII SUB character (0x1a) may not be duplicated as the last ignored character in the stream.

Expected Result: FAIL

Regression Test:

tcltest::test 3.5-14 { The ASCII SUB character (0x1a) may not be duplicated as
        the last ignored character in the stream. } {
    
    set S \x1a\\u001a
    compile [saveas T3514.java "class T3514 {} $S"]

} {FAIL}
Test Case: 3.5-15
The ASCII SUB character (0x1a) may not be duplicated as the last ignored character in the stream.

Expected Result: FAIL

Regression Test:

tcltest::test 3.5-15 { The ASCII SUB character (0x1a) may not be duplicated as
        the last ignored character in the stream. } {
    
    set S \\u001a\x1a
    compile [saveas T3515.java "class T3515 {} $S"]

} {FAIL}
Test Case: 3.5-16
Unicode byte-order-mark is not valid after decoding (however, it may be first character, but not \u escape, if file is Unicode encoded; as Unicode requires that character to be skipped)

Expected Result: FAIL

Regression Test:

tcltest::test 3.5-16 { Unicode byte-order-mark is not valid after decoding
        (however, it may be first character, but not \u escape, if file is
        Unicode encoded; as Unicode requires that character to be skipped) } {
    
    compile [saveas T3516.java "\ufeff class T3616 {}"]

} {FAIL}
Test Case: 3.5-17
Unicode reverse-bom is not valid after decoding (however, it may be first character, but not \u escape, if file is Unicode encoded; as Unicode requires that character to be skipped)

Expected Result: FAIL

Regression Test:

tcltest::test 3.5-17 { Unicode reverse-bom is not valid after decoding
        (however, it may be first character, but not \u escape, if file is
        Unicode encoded; as Unicode requires that character to be skipped) } {
    
    compile [saveas T3517.java "\ufffe class T3617 {}"]

} {FAIL}

3.6

Directory : tests/jls/lexical-structure/white-space


Test Case: 3.6-invalid-1
Vertical tab (Ctrl-K) '\v' is not whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-1 { Vertical tab (Ctrl-K) '\v' is not whitespace } {
    
    whitespace T36i1 \v

} {FAIL}
Test Case: 3.6-invalid-2
Vertical tab (Ctrl-K) '\u000b' is not whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-2 { Vertical tab (Ctrl-K) '\u000b' is not whitespace } {
    
    whitespace T36i2 {\u000b}

} {FAIL}
Test Case: 3.6-invalid-3
Backspace (Ctrl-H) '\b' is not whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-3 { Backspace (Ctrl-H) '\b' is not whitespace } {
    
    whitespace T36i3 \b

} {FAIL}
Test Case: 3.6-invalid-4
Backspace (Ctrl-H) '\u0008' is not whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-4 { Backspace (Ctrl-H) '\u0008' is not whitespace } {
    
    whitespace T36i4 {\u0008}

} {FAIL}
Test Case: 3.6-invalid-5
Alert (Ctrl-G) '\a' is not whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-5 { Alert (Ctrl-G) '\a' is not whitespace } {
    
    whitespace T36i5 \a

} {FAIL}
Test Case: 3.6-invalid-6
Alert (Ctrl-G) '\u0007' is not whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-6 { Alert (Ctrl-G) '\u0007' is not whitespace } {
    
    whitespace T36i6 {\u0007}

} {FAIL}
Test Case: 3.6-invalid-7
Null '\0' is not whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-7 { Null '\0' is not whitespace } {
    
    whitespace T36i7 \0

} {FAIL}
Test Case: 3.6-invalid-8
Null '\u0000' is not whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-8 { Null '\u0000' is not whitespace } {
    
    whitespace T36i8 {\u0000}

} {FAIL}
Test Case: 3.6-invalid-9
Sub (Ctrl-Z) '\u001a' is not whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-9 { Sub (Ctrl-Z) '\u001a' is not whitespace } {
    
    whitespace T36i9 {\u001a}

} {FAIL}
Test Case: 3.6-invalid-10
Ascii separators '\u001c'-'\u001f' are not whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-10 { Ascii separators '\u001c'-'\u001f' are not
        whitespace } {
    
    whitespace T36i10 {\u001c}

} {FAIL}
Test Case: 3.6-invalid-11
Unicode whitespace is not always Java whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-11 { Unicode whitespace is not always Java
        whitespace } {
    
    whitespace T36i11 {\u00a1}

} {FAIL}
Test Case: 3.6-invalid-12
Unicode whitespace is not always Java whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-12 { Unicode whitespace is not always Java
        whitespace } {
    
    whitespace T36i12 {\u2008}

} {FAIL}
Test Case: 3.6-invalid-13
Unicode line separators are not whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-13 { Unicode line separators are not whitespace } {
    
    whitespace T36i13 {\u2028}

} {FAIL}
Test Case: 3.6-invalid-14
Unicode paragraph separators are not whitespace

Expected Result: FAIL

Regression Test:

tcltest::test 3.6-invalid-14 { Unicode paragraph separators are not
        whitespace } {
    
    whitespace T36i14 {\u2029}

} {FAIL}
Test Case: 3.6-valid-1
Linefeed (Ctrl-J) '\n' is whitespace

Expected Result: PASS

Regression Test:

tcltest::test 3.6-valid-1 { Linefeed (Ctrl-J) '\n' is whitespace } {
    
    whitespace T36v1 \n

} {PASS}
Test Case: 3.6-valid-2
Linefeed (Ctrl-J) '\u000a' is whitespace

Expected Result: PASS

Regression Test:

tcltest::test 3.6-valid-2 { Linefeed (Ctrl-J) '\u000a' is whitespace } {
    
    whitespace T36v2 {\u000a}

} {PASS}
Test Case: 3.6-valid-3
Carriage Return (Ctrl-M) '\r' is whitespace

Expected Result: PASS

Regression Test:

tcltest::test 3.6-valid-3 { Carriage Return (Ctrl-M) '\r' is whitespace } {
    
    whitespace T36v3 \r

} {PASS}
Test Case: 3.6-valid-4
Carriage Return (Ctrl-M) '\u000d' is whitespace

Expected Result: PASS

Regression Test:

tcltest::test 3.6-valid-4 { Carriage Return (Ctrl-M) '\u000d' is whitespace } {
    
    whitespace T36v4 {\u000d}

} {PASS}
Test Case: 3.6-valid-5
CR/LF '\r\n' is whitespace

Expected Result: PASS

Regression Test:

tcltest::test 3.6-valid-5 { CR/LF '\r\n' is whitespace } {
    
    whitespace T36v5 \r\n

} {PASS}
Test Case: 3.6-valid-6
CR/LF '\u000d\u000a' is whitespace

Expected Result: PASS

Regression Test:

tcltest::test 3.6-valid-6 { CR/LF '\u000d\u000a' is whitespace } {
    
    whitespace T36v6 {\u000d\u000a}

} {PASS}
Test Case: 3.6-valid-7
Space ' ' is whitespace

Expected Result: PASS

Regression Test:

tcltest::test 3.6-valid-7 { Space ' ' is whitespace } {
    
    whitespace T36v7 " "

} {PASS}
Test Case: 3.6-valid-8
Space '\u0020' is whitespace

Expected Result: PASS

Regression Test:

tcltest::test 3.6-valid-8 { Space '\u0020' is whitespace } {
    
    whitespace T36v8 {\u0020}

} {PASS}
Test Case: 3.6-valid-9
Tab (Ctrl-I) '\t' is whitespace

Expected Result: PASS

Regression Test:

tcltest::test 3.6-valid-9 { Tab (Ctrl-I) '\t' is whitespace } {
    
    whitespace T36v9 \t

} {PASS}
Test Case: 3.6-valid-10
Tab (Ctrl-I) '\u0009' is whitespace

Expected Result: PASS

Regression Test:

tcltest::test 3.6-valid-10 { Tab (Ctrl-I) '\u0009' is whitespace } {
    
    whitespace T36v10 {\u0009}

} {PASS}
Test Case: 3.6-valid-11
Form Feed (Ctrl-L) '\f' is whitespace

Expected Result: PASS

Regression Test:

tcltest::test 3.6-valid-11 { Form Feed (Ctrl-L) '\f' is whitespace } {
    
    whitespace T36v11 \f

} {PASS}
Test Case: 3.6-valid-12
Form Feed (Ctrl-L) '\u000c' is whitespace

Expected Result: PASS

Regression Test:

tcltest::test 3.6-valid-12 { Form Feed (Ctrl-L) '\u000c' is whitespace } {
    
    whitespace T36v12 {\u000c}

} {PASS}

3.7

Directory : tests/jls/lexical-structure/comments


Test Case: 3.7-1
/* anything */ is a comment

Expected Result: PASS

Regression Test:

tcltest::test 3.7-1 { /* anything */ is a comment } {
    
    compile [saveas T371.java "class T371 {/* / * // * / exit */}"]

} {PASS}
Test Case: 3.7-2
/* */ comment can span multiple lines

Expected Result: PASS

Regression Test:

tcltest::test 3.7-2 { /* */ comment can span multiple lines } {
    
    compile [saveas T372.java "class T372 {/* hello\n bye \n*/}"]

} {PASS}
Test Case: 3.7-3
// comment inside /* */ comment is ignored

Expected Result: PASS

Regression Test:

tcltest::test 3.7-3 { // comment inside /* */ comment is ignored } {
    
    compile [saveas T373.java "class T373 {/* hello\n // */}"]

} {PASS}
Test Case: 3.7-4
// comment inside // comment is ignored

Expected Result: PASS

Regression Test:

tcltest::test 3.7-4 { // comment inside // comment is ignored } {
    
    compile [saveas T374.java "class T374 {// //\n}"]

} {PASS}
Test Case: 3.7-5
/* */ comment inside // comment is ignored

Expected Result: PASS

Regression Test:

tcltest::test 3.7-5 { /* */ comment inside // comment is ignored } {
    
    compile [saveas T375.java "class T375 {// /*\n//*/\n}"]

} {PASS}
Test Case: 3.7-6
/* or // inside /* */ comment is ignored

Expected Result: PASS

Regression Test:

tcltest::test 3.7-6 { /* or // inside /* */ comment is ignored } {
    
    compile [saveas T376.java "class T376 {/* comment /* // /* */}"]

} {PASS}
Test Case: 3.7-7
/* or // inside /** */ comment is ignored

Expected Result: PASS

Regression Test:

tcltest::test 3.7-7 { /* or // inside /** */ comment is ignored } {
    
    compile [saveas T377.java "class T377 {/** comment /* // /* */}"]

} {PASS}
Test Case: 3.7-8
/**/ is a documentaiton comment

Expected Result: PASS

Regression Test:

tcltest::test 3.7-8 { /**/ is a documentaiton comment } {
    
    compile [saveas T378.java "class T378 {/**/}"]

} {PASS}
Test Case: 3.7-9
// comment separates tokens

Expected Result: PASS

Regression Test:

tcltest::test 3.7-9 { // comment separates tokens } {
    
    compile [saveas T379.java "class T379 {int//\ni;}"]

} {PASS}
Test Case: 3.7-10
/**/ comment separates tokens

Expected Result: PASS

Regression Test:

tcltest::test 3.7-10 { /**/ comment separates tokens } {
    
    compile [saveas T3710.java "class T3710 {int/* */i;}"]

} {PASS}
Test Case: 3.7-11
// comment cannot appear in literal

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-11 { // comment cannot appear in literal } {
    
    compile [saveas T3711.java "class T3711 {float f = 1.//\n0;}"]

} {FAIL}
Test Case: 3.7-12
/**/ comment cannot appear in literal

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-12 { /**/ comment cannot appear in literal } {
    
    compile [saveas T3712.java "class T3712 {float f = 1./* */0;}"]

} {FAIL}
Test Case: 3.7-13
// comment cannot appear in literal

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-13 { // comment cannot appear in literal } {
    
    compile [saveas T3713.java "class T3713 {char c = 'a//\n';}"]

} {FAIL}
Test Case: 3.7-14
/**/ comment cannot appear in literal

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-14 { /**/ comment cannot appear in literal } {
    
    compile [saveas T3714.java "class T3714 {char c = 'a/* */';}"]

} {FAIL}
Test Case: 3.7-15
/* must have matching */

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-15 { /* must have matching */ } {
    
    compile [saveas T3715.java "class T3715 {} /*"]

} {FAIL}
Test Case: 3.7-16
// may end at EOF. See Sun bug 4386773: the grammar given in the JLS will (most likely) be clarified to allow this, since virtually every previous compiler has done so

Expected Result: PASS

Regression Test:

tcltest::test 3.7-16 { // may end at EOF. See Sun bug 4386773: the grammar
        given in the JLS will (most likely) be clarified to allow this, since
        virtually every previous compiler has done so } {
    
    compile [saveas T3716.java "class T3716 {} //"]

} {PASS}
Test Case: 3.7-17
/**/ comment can contain any characters, including \0, unterminated quotes

Expected Result: PASS

Regression Test:

tcltest::test 3.7-17 { /**/ comment can contain any characters, including \0,
        unterminated quotes } {
    
    empty_class T3717 "/*\0'\"*/"

} {PASS}
Test Case: 3.7-18
/**/ comment can contain any characters, including \0, unterminated quotes

Expected Result: PASS

Regression Test:

tcltest::test 3.7-18 { /**/ comment can contain any characters, including \0,
        unterminated quotes } {
    
    empty_class T3718 {/*\u0000\u0027\u0022*/}

} {PASS}
Test Case: 3.7-19
// comment can contain any characters, including \0, unterminated quotes

Expected Result: PASS

Regression Test:

tcltest::test 3.7-19 { // comment can contain any characters, including \0,
        unterminated quotes } {
    
    empty_class T3719 "//\0'\""

} {PASS}
Test Case: 3.7-20
// comment can contain any characters, including \0, unterminated quotes

Expected Result: PASS

Regression Test:

tcltest::test 3.7-20 { // comment can contain any characters, including \0,
        unterminated quotes } {
    
    empty_class T3720 {//\u0000\u0027\u0022}

} {PASS}
Test Case: 3.7-21
/**/ comment can contain any characters, including ASCII SUB

Expected Result: PASS

Regression Test:

tcltest::test 3.7-21 { /**/ comment can contain any characters, including ASCII SUB } {
    
    empty_class T3721 "/*\x1a*/"

} {PASS}
Test Case: 3.7-22
/**/ comment can contain any characters, including ASCII SUB

Expected Result: PASS

Regression Test:

tcltest::test 3.7-22 { /**/ comment can contain any characters, including ASCII SUB } {
    
    empty_class T3722 {/*\u001a*/}

} {PASS}
Test Case: 3.7-23
// comment can contain any characters, including ASCII SUB

Expected Result: PASS

Regression Test:

tcltest::test 3.7-23 { // comment can contain any characters, including ASCII SUB } {
    
    empty_class T3723 "//\x1a"

} {PASS}
Test Case: 3.7-24
// comment can contain any characters, including ASCII SUB

Expected Result: PASS

Regression Test:

tcltest::test 3.7-24 { // comment can contain any characters, including ASCII SUB } {
    
    empty_class T3724 {//\u001a}

} {PASS}
Test Case: 3.7-25
comments may be unicode

Expected Result: PASS

Regression Test:

tcltest::test 3.7-25 { comments may be unicode } {
    
    empty_main T3725 {
        \u002f\u002f This is a comment\u000a int i;
        \u002f\u002a So's this \u002a\u002f
        i = 1;
    }

} {PASS}
Test Case: 3.7-26
/*/ is not a comment, but an opening for /* */

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-26 { /*/ is not a comment, but an opening for /* */ } {
    
    empty_class T3726 "/*/"

} {FAIL}
Test Case: 3.7-27
/*/ is not a comment, but an opening for /* */

Expected Result: PASS

Regression Test:

tcltest::test 3.7-27 { /*/ is not a comment, but an opening for /* */ } {
    
    empty_class T3727 {
        /*/
        */
    }

} {PASS}
Test Case: 3.7-28
/** */ doc comments are legal, in spite of a bug in the grammar which doesn't allow them

Expected Result: PASS

Regression Test:

tcltest::test 3.7-28 { /** */ doc comments are legal, in spite of a bug in the
        grammar which doesn't allow them } {
    
    empty_class T3728 "/** */"

} {PASS}
Test Case: 3.7-29
/**/ is a legal, degenerate doc comment, in spite of a bug in the grammar which doesn't allow it

Expected Result: PASS

Regression Test:

tcltest::test 3.7-29 { /**/ is a legal, degenerate doc comment, in spite of
        a bug in the grammar which doesn't allow it } {
    
    empty_class T3729 "/**/"

} {PASS}
Test Case: 3.7-30
/* */ comments don't nest

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-30 { /* */ comments don't nest } {
    
    empty_class T3730 "/* /* */ */"

} {FAIL}
Test Case: 3.7-31
/* */ comments don't nest in //

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-31 { /* */ comments don't nest in // } {
    
    empty_class T3731 "// /* \n */"

} {FAIL}
Test Case: 3.7-32
/** */ comment separates tokens

Expected Result: PASS

Regression Test:

tcltest::test 3.7-32 { /** */ comment separates tokens } {
    
    compile [saveas T3732.java "class T3732 {int/** */i;}"]

} {PASS}
Test Case: 3.7-33
/** */ comment separates tokens

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-33 { /** */ comment separates tokens } {
    
    compile [saveas T3733.java "class T3733 {float f = 1./** */0;}"]

} {FAIL}
Test Case: 3.7-34
/**/ comment cannot appear in literal

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-34 { /**/ comment cannot appear in literal } {
    
    compile [saveas T3734.java "class T3734 {char c = 'a/** */';}"]

} {FAIL}
Test Case: 3.7-35
/** must have matching */

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-35 { /** must have matching */ } {
    
    compile [saveas T3735.java "class T3735 {} /**"]

} {FAIL}
Test Case: 3.7-36
/* must have matching */

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-36 { /* must have matching */ } {
    
    compile [saveas T3736.java "class T3736 {} /* "]

} {FAIL}
Test Case: 3.7-37
/** must have matching */

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-37 { /** must have matching */ } {
    
    compile [saveas T3737.java "class T3737 {} /** "]

} {FAIL}
Test Case: 3.7-38
/* must have matching */

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-38 { /* must have matching */ } {
    
    compile [saveas T3738.java "class T3738 {} /* *"]

} {FAIL}
Test Case: 3.7-39
/** must have matching */

Expected Result: FAIL

Regression Test:

tcltest::test 3.7-39 { /** must have matching */ } {
    
    compile [saveas T3739.java "class T3739 {} /** *"]

} {FAIL}
Test Case: 3.7-line-number-1
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-1 { test line counts in comments } {
    
    compile [saveas T37ln1.java "class T37ln1 { // \n }   oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-2
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-2 { test line counts in comments } {
    
    compile [saveas T37ln2.java "class T37ln2 { // \\u000a }   oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-3
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-3 { test line counts in comments } {
    
    compile [saveas T37ln3.java "class T37ln3 { /* \n */ }oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-4
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-4 { test line counts in comments } {
    
    compile [saveas T37ln4.java "class T37ln4 { /* \\u000a */ }oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-5
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-5 { test line counts in comments } {
    
    compile [saveas T37ln5.java "class T37ln5 { /*\n */ }oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-6
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-6 { test line counts in comments } {
    
    compile [saveas T37ln6.java "class T37ln6 { /*\\u000a */ }oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-7
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-7 { test line counts in comments } {
    
    compile [saveas T37ln7.java "class T37ln7 { /* *\n */ }oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-8
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-8 { test line counts in comments } {
    
    compile [saveas T37ln8.java "class T37ln8 { /* *\\u000a */ }oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-9
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-9 { test line counts in comments } {
    
    compile [saveas T37ln9.java "class T37ln9 { /** \n */ }oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-10
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-10 { test line counts in comments } {
    
    compile [saveas T37ln10.java "class T37ln10 { /** \\u000a */ }oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-11
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-11 { test line counts in comments } {
    
    compile [saveas T37ln11.java "class T37ln11 { /**\n */ }oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-12
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-12 { test line counts in comments } {
    
    compile [saveas T37ln12.java "class T37ln12 { /**\\u000a */ }oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-13
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-13 { test line counts in comments } {
    
    compile [saveas T37ln13.java "class T37ln13 { /** *\n */ }oops"]
    match_err_or_warn {*.java*2*}

} {1}
Test Case: 3.7-line-number-14
test line counts in comments

Expected Result: 1

Regression Test:

tcltest::test 3.7-line-number-14 { test line counts in comments } {
    
    compile [saveas T37ln14.java "class T37ln14 { /** *\\u000a */ }oops"]
    match_err_or_warn {*.java*2*}

} {1}

3.8

Directory : tests/jls/lexical-structure/identifiers


Test Case: 3.8-invalid-1
A keyword cannot be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 3.8-invalid-1 { A keyword cannot be an identifier } {
    
    identifier T38i1 int

} {FAIL}
Test Case: 3.8-invalid-2
A keyword cannot be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 3.8-invalid-2 { A keyword cannot be an identifier } {
    
    identifier T38i2 {\u0069\u006e\u0074}

} {FAIL}
Test Case: 3.8-invalid-3
A boolean literal cannot be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 3.8-invalid-3 { A boolean literal cannot be an identifier } {
    
    identifier T38i3 true

} {FAIL}
Test Case: 3.8-invalid-4
A boolean literal cannot be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 3.8-invalid-4 { A boolean literal cannot be an identifier } {
    
    identifier T38i4 {\u0074\u0072\u0075\u0065}

} {FAIL}
Test Case: 3.8-invalid-5
A null literal cannot be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 3.8-invalid-5 { A null literal cannot be an identifier } {
    
    identifier T38i5 null

} {FAIL}
Test Case: 3.8-invalid-6
A unicode null literal cannot be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 3.8-invalid-6 { A unicode null literal cannot be an identifier } {
    
    identifier T38i6 {\u006e\u0075\u006c\u006c}

} {FAIL}
Test Case: 3.8-invalid-7
The first character of an identifier must satisfy Character.isJavaIdentifierStart

Expected Result: FAIL

Regression Test:

tcltest::test 3.8-invalid-7 { The first character of an identifier
        must satisfy Character.isJavaIdentifierStart } {
    
    identifier T38i7 1

} {FAIL}
Test Case: 3.8-invalid-8
Trailing characters in an identifier must satisfy Character.isJavaIdentifierPart

Expected Result: FAIL

Regression Test:

tcltest::test 3.8-invalid-8 { Trailing characters in an identifier must
        satisfy Character.isJavaIdentifierPart } {
    
    identifier T38i8 i\\uffff

} {FAIL}
Test Case: 3.8-invalid-9
Invalid, as \0 is not short for \u0000

Expected Result: FAIL

Regression Test:

tcltest::test 3.8-invalid-9 { Invalid, as \0 is not short for \u0000 } {
    
    identifier T38i9 i\\0

} {FAIL}
Test Case: 3.8-valid-1
example identifier

Expected Result: PASS

Regression Test:

tcltest::test 3.8-valid-1 { example identifier } {
    
    identifier T38v1 String

} {PASS}
Test Case: 3.8-valid-2
example identifier

Expected Result: PASS

Regression Test:

tcltest::test 3.8-valid-2 { example identifier } {
    
    identifier T38v2 i3

} {PASS}
Test Case: 3.8-valid-3
example identifier

Expected Result: PASS

Regression Test:

tcltest::test 3.8-valid-3 { example identifier } {
    
    identifier T38v3 MAX_VALUE

} {PASS}
Test Case: 3.8-valid-4
example identifier

Expected Result: PASS

Regression Test:

tcltest::test 3.8-valid-4 { example identifier } {
    
    identifier T38v4 isLetterOrDigit

} {PASS}
Test Case: 3.8-valid-5
valid identifier

Expected Result: PASS

Regression Test:

tcltest::test 3.8-valid-5 { valid identifier } {
    
    identifier T38v5 _

} {PASS}
Test Case: 3.8-valid-6
valid identifier, although discouraged

Expected Result: OK

Regression Test:

tcltest::test 3.8-valid-6 { valid identifier, although discouraged } {
    
    ok_pass_or_warn [identifier T38v6 \$] 

} {OK}
Test Case: 3.8-valid-7
valid identifier, although discouraged

Expected Result: OK

Regression Test:

tcltest::test 3.8-valid-7 { valid identifier, although discouraged } {
    
    ok_pass_or_warn [identifier T38v7 a_\$1] 

} {OK}
Test Case: 3.8-valid-8
valid identifier, as \ufeff satisfies Character.isJavaIdentifierPart

Expected Result: PASS

Regression Test:

tcltest::test 3.8-valid-8 { valid identifier, as \ufeff satisfies
        Character.isJavaIdentifierPart } {
    
    identifier T38v8 i\\ufeff

} {PASS}
Test Case: 3.8-valid-9
valid identifier, as \u0000 satisfies Character.isJavaIdentifierPart

Expected Result: PASS

Regression Test:

tcltest::test 3.8-valid-9 { valid identifier, as \u0000 satisfies
        Character.isJavaIdentifierPart } {
    
    identifier T38v9 i\\u0000

} {PASS}
Test Case: 3.8-valid-10
example of unique identifiers

Expected Result: PASS

Regression Test:

tcltest::test 3.8-valid-10 { example of unique identifiers } {
    
    compile [saveas T38v10.java {
class T38v10 {
    int \u0041; // LATIN CAPITAL A
    int \u0061; // LATIN SMALL A
    int \u0391; // GREEK CAPITAL ALPHA
    int \u0480; // CYRILLIC SMALL A
}
    }]

} {PASS}
Test Case: 3.8-valid-11
example of unique identifiers

Expected Result: PASS

Regression Test:

tcltest::test 3.8-valid-11 { example of unique identifiers } {
    
    compile [saveas T38v11.java {
class T38v11 {
    int \u00c1; // LATIN CAPITAL A ACUTE
    int \u0041\u0301; // LATIN CAPITAL A, followed by NON-SPACING ACUTE
}
    }]

} {PASS}
Test Case: 3.8-valid-12
valid identifier, as \u001a satisfies Character.isJavaIdentifierPart

Expected Result: PASS

Regression Test:

tcltest::test 3.8-valid-12 { valid identifier, as \u001a satisfies
        Character.isJavaIdentifierPart } {
    
    identifier T38v12 i\\u001a

} {PASS}
Test Case: 3.8-ignorable-1
JCL docs refer to 200a, but this is a typo

Expected Result: FAIL

Regression Test:

tcltest::test 3.8-ignorable-1 { JCL docs refer to 200a, but this is a typo } {
    
    compile [saveas T38ignoreable1.java {
class T38ignoreable1 {
    int i\u200a;
}
    }]

} {FAIL}
Test Case: 3.8-ignorable-2
JCL docs refer to 200a, but real value is 202a

Expected Result: PASS

Regression Test:

tcltest::test 3.8-ignorable-2 { JCL docs refer to 200a, but real value is 202a } {
    
    compile [saveas T38ignoreable2.java {
class T38ignoreable2 {
    int i\u202a;
}
    }]

} {PASS}

3.9

Directory : tests/jls/lexical-structure/keywords


Test Case: 3.9-1
abstract is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-1 { abstract is a keyword } {
    
    keyword T391 abstract

} {FAIL}
Test Case: 3.9-2
boolean is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-2 { boolean is a keyword } {
    
    keyword T392 boolean

} {FAIL}
Test Case: 3.9-3
break is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-3 { break is a keyword } {
    
    keyword T393 break

} {FAIL}
Test Case: 3.9-4
byte is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-4 { byte is a keyword } {
    
    keyword T394 byte

} {FAIL}
Test Case: 3.9-5
case is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-5 { case is a keyword } {
    
    keyword T395 case

} {FAIL}
Test Case: 3.9-6
catch is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-6 { catch is a keyword } {
    
    keyword T396 catch

} {FAIL}
Test Case: 3.9-7
char is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-7 { char is a keyword } {
    
    keyword T397 char

} {FAIL}
Test Case: 3.9-8
class is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-8 { class is a keyword } {
    
    keyword T398 class

} {FAIL}
Test Case: 3.9-9
const is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-9 { const is a keyword } {
    
    keyword T399 const

} {FAIL}
Test Case: 3.9-10
continue is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-10 { continue is a keyword } {
    
    keyword T3910 continue

} {FAIL}
Test Case: 3.9-11
default is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-11 { default is a keyword } {
    
    keyword T3911 default

} {FAIL}
Test Case: 3.9-12
do is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-12 { do is a keyword } {
    
    keyword T3912 do

} {FAIL}
Test Case: 3.9-13
double is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-13 { double is a keyword } {
    
    keyword T3913 double

} {FAIL}
Test Case: 3.9-14
else is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-14 { else is a keyword } {
    
    keyword T3914 else

} {FAIL}
Test Case: 3.9-15
extends is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-15 { extends is a keyword } {
    
    keyword T3915 extends

} {FAIL}
Test Case: 3.9-16
final is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-16 { final is a keyword } {
    
    keyword T3916 final

} {FAIL}
Test Case: 3.9-17
finally is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-17 { finally is a keyword } {
    
    keyword T3917 finally

} {FAIL}
Test Case: 3.9-18
float is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-18 { float is a keyword } {
    
    keyword T3918 float

} {FAIL}
Test Case: 3.9-19
for is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-19 { for is a keyword } {
    
    keyword T3919 for

} {FAIL}
Test Case: 3.9-20
goto is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-20 { goto is a keyword } {
    
    keyword T3920 goto

} {FAIL}
Test Case: 3.9-21
if is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-21 { if is a keyword } {
    
    keyword T3921 if

} {FAIL}
Test Case: 3.9-22
implements is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-22 { implements is a keyword } {
    
    keyword T3922 implements

} {FAIL}
Test Case: 3.9-23
import is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-23 { import is a keyword } {
    
    keyword T3923 import

} {FAIL}
Test Case: 3.9-24
instanceof is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-24 { instanceof is a keyword } {
    
    keyword T3924 instanceof

} {FAIL}
Test Case: 3.9-25
int is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-25 { int is a keyword } {
    
    keyword T3925 int

} {FAIL}
Test Case: 3.9-26
interface is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-26 { interface is a keyword } {
    
    keyword T3926 interface

} {FAIL}
Test Case: 3.9-27
long is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-27 { long is a keyword } {
    
    keyword T3927 long

} {FAIL}
Test Case: 3.9-28
native is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-28 { native is a keyword } {
    
    keyword T3928 native

} {FAIL}
Test Case: 3.9-29
new is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-29 { new is a keyword } {
    
    keyword T3929 new

} {FAIL}
Test Case: 3.9-30
package is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-30 { package is a keyword } {
    
    keyword T3930 package

} {FAIL}
Test Case: 3.9-31
private is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-31 { private is a keyword } {
    
    keyword T3931 private

} {FAIL}
Test Case: 3.9-32
protected is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-32 { protected is a keyword } {
    
    keyword T3932 protected

} {FAIL}
Test Case: 3.9-33
public is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-33 { public is a keyword } {
    
    keyword T3933 public

} {FAIL}
Test Case: 3.9-34
return is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-34 { return is a keyword } {
    
    keyword T3934 return

} {FAIL}
Test Case: 3.9-35
short is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-35 { short is a keyword } {
    
    keyword T3935 short

} {FAIL}
Test Case: 3.9-36
static is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-36 { static is a keyword } {
    
    keyword T3936 static

} {FAIL}
Test Case: 3.9-37
strictfp is a keyword, it is new to version 2 of the JLS spec

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-37 { strictfp is a keyword,
        it is new to version 2 of the JLS spec } {
    
    keyword T3937 strictfp

} {FAIL}
Test Case: 3.9-38
super is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-38 { super is a keyword } {
    
    keyword T3938 super

} {FAIL}
Test Case: 3.9-39
switch is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-39 { switch is a keyword } {
    
    keyword T3939 switch

} {FAIL}
Test Case: 3.9-40
synchronized is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-40 { synchronized is a keyword } {
    
    keyword T3940 synchronized

} {FAIL}
Test Case: 3.9-41
this is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-41 { this is a keyword } {
    
    keyword T3941 this

} {FAIL}
Test Case: 3.9-42
throw is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-42 { throw is a keyword } {
    
    keyword T3942 throw

} {FAIL}
Test Case: 3.9-43
throws is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-43 { throws is a keyword } {
    
    keyword T3943 throws

} {FAIL}
Test Case: 3.9-44
transient is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-44 { transient is a keyword } {
    
    keyword T3944 transient

} {FAIL}
Test Case: 3.9-45
try is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-45 { try is a keyword } {
    
    keyword T3945 try

} {FAIL}
Test Case: 3.9-46
void is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-46 { void is a keyword } {
    
    keyword T3946 void

} {FAIL}
Test Case: 3.9-47
volatile is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-47 { volatile is a keyword } {
    
    keyword T3947 volatile

} {FAIL}
Test Case: 3.9-48
while is a keyword

Expected Result: FAIL

Regression Test:

tcltest::test 3.9-48 { while is a keyword } {
    
    keyword T3948 while

} {FAIL}
Test Case: 3.9-valid-1
asm is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-1 { asm is not a keyword } {
    
    keyword T39v1 asm

} {PASS}
Test Case: 3.9-valid-2
auto is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-2 { auto is not a keyword } {
    
    keyword T39v2 auto

} {PASS}
Test Case: 3.9-valid-3
bool is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-3 { bool is not a keyword } {
    
    keyword T39v3 bool

} {PASS}
Test Case: 3.9-valid-4
const_cast is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-4 { const_cast is not a keyword } {
    
    keyword T39v4 const_cast

} {PASS}
Test Case: 3.9-valid-5
delete is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-5 { delete is not a keyword } {
    
    keyword T39v5 delete

} {PASS}
Test Case: 3.9-valid-6
dynamic_cast is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-6 { dynamic_cast is not a keyword } {
    
    keyword T39v6 dynamic_cast

} {PASS}
Test Case: 3.9-valid-7
enum is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-7 { enum is not a keyword } {
    
    keyword T39v7 enum

} {PASS}
Test Case: 3.9-valid-8
explicit is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-8 { explicit is not a keyword } {
    
    keyword T39v8 explicit

} {PASS}
Test Case: 3.9-valid-9
extern is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-9 { extern is not a keyword } {
    
    keyword T39v9 extern

} {PASS}
Test Case: 3.9-valid-10
friend is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-10 { friend is not a keyword } {
    
    keyword T39v10 friend

} {PASS}
Test Case: 3.9-valid-11
inline is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-11 { inline is not a keyword } {
    
    keyword T39v11 inline

} {PASS}
Test Case: 3.9-valid-12
mutable is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-12 { mutable is not a keyword } {
    
    keyword T39v12 mutable

} {PASS}
Test Case: 3.9-valid-13
namespace is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-13 { namespace is not a keyword } {
    
    keyword T39v13 namespace

} {PASS}
Test Case: 3.9-valid-14
operator is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-14 { operator is not a keyword } {
    
    keyword T39v14 operator

} {PASS}
Test Case: 3.9-valid-15
register is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-15 { register is not a keyword } {
    
    keyword T39v15 register

} {PASS}
Test Case: 3.9-valid-16
reinterpret_cast is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-16 { reinterpret_cast is not a keyword } {
    
    keyword T39v16 reinterpret_cast

} {PASS}
Test Case: 3.9-valid-17
signed is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-17 { signed is not a keyword } {
    
    keyword T39v17 signed

} {PASS}
Test Case: 3.9-valid-18
sizeof is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-18 { sizeof is not a keyword } {
    
    keyword T39v18 sizeof

} {PASS}
Test Case: 3.9-valid-19
static_cast is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-19 { static_cast is not a keyword } {
    
    keyword T39v19 static_cast

} {PASS}
Test Case: 3.9-valid-20
struct is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-20 { struct is not a keyword } {
    
    keyword T39v20 struct

} {PASS}
Test Case: 3.9-valid-21
template is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-21 { template is not a keyword } {
    
    keyword T39v21 template

} {PASS}
Test Case: 3.9-valid-22
typedef is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-22 { typedef is not a keyword } {
    
    keyword T39v22 typedef

} {PASS}
Test Case: 3.9-valid-23
typeid is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-23 { typeid is not a keyword } {
    
    keyword T39v23 typeid

} {PASS}
Test Case: 3.9-valid-24
typename is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-24 { typename is not a keyword } {
    
    keyword T39v24 typename

} {PASS}
Test Case: 3.9-valid-25
union is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-25 { union is not a keyword } {
    
    keyword T39v25 union

} {PASS}
Test Case: 3.9-valid-26
unsigned is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-26 { unsigned is not a keyword } {
    
    keyword T39v26 unsigned

} {PASS}
Test Case: 3.9-valid-27
using is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-27 { using is not a keyword } {
    
    keyword T39v27 using

} {PASS}
Test Case: 3.9-valid-28
virtual is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-28 { virtual is not a keyword } {
    
    keyword T39v28 virtual

} {PASS}
Test Case: 3.9-valid-29
wchar_t is not a keyword

Expected Result: PASS

Regression Test:

tcltest::test 3.9-valid-29 { wchar_t is not a keyword } {
    
    keyword T39v29 wchar_t

} {PASS}

3.10.1

Directory : tests/jls/lexical-structure/literals/integer-literals


Test Case: 3.10.1-invalid-1
2147483648 may appear only as the operand of unary -

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-1 { 2147483648 may appear only as the operand of unary - } {
    
    literal T3101i1 2147483648

} {FAIL}
Test Case: 3.10.1-invalid-2
decimal larger than 2147483648 is not an int

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-2 { decimal larger than 2147483648 is not an int } {
    
    literal T3101i2 12345678901

} {FAIL}
Test Case: 3.10.1-invalid-3
octal larger than 037777777777 is not an int

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-3 { octal larger than 037777777777 is not an int } {
    
    literal T3101i3 040000000000

} {FAIL}
Test Case: 3.10.1-invalid-4
hex larger than 0xffffffff is not an int

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-4 { hex larger than 0xffffffff is not an int } {
    
    literal T3101i4 0x123456789

} {FAIL}
Test Case: 3.10.1-invalid-5
9223372036854775808L may appear only as the operand of unary -

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-5 { 9223372036854775808L may appear only as the
        operand of unary - } {
    
    literal T3101i5 9223372036854775808L

} {FAIL}
Test Case: 3.10.1-invalid-6
decimal larger than 9223372036854775808L is not an int

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-6 { decimal larger than 9223372036854775808L is not an int } {
    
    literal T3101i6 12345678901234567890L

} {FAIL}
Test Case: 3.10.1-invalid-7
octal larger than 01777777777777777777777L is not an int

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-7 { octal larger than 01777777777777777777777L is not an int } {
    
    literal T3101i7 02000000000000000000000L

} {FAIL}
Test Case: 3.10.1-invalid-8
hex larger than 0xffffffffffffffffL is not an int

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-8 { hex larger than 0xffffffffffffffffL is not an int } {
    
    literal T3101i8 0x123456789abcdef01L

} {FAIL}
Test Case: 3.10.1-invalid-9
octal cannot contain '9'

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-9 { octal cannot contain '9' } {
    
    literal T3101i9 09

} {FAIL}
Test Case: 3.10.1-invalid-10
2147483648 may appear only as the operand of unary -

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-10 { 2147483648 may appear only as the operand of unary - } {
    
    literal T3101i10 0-2147483648

} {FAIL}
Test Case: 3.10.1-invalid-11
9223372036854775808L may appear only as the operand of unary -

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-11 { 9223372036854775808L may appear only as the
        operand of unary - } {
    
    literal T3101i11 0-9223372036854775808L

} {FAIL}
Test Case: 3.10.1-invalid-12
0x must be followed by digits

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-12 { 0x must be followed by digits } {
    
    literal T3101i12 0x

} {FAIL}
Test Case: 3.10.1-invalid-13
0x must be followed by digits

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.1-invalid-13 { 0x must be followed by digits } {
    
    literal T3101i13 0xL

} {FAIL}
Test Case: 3.10.1-valid-1
example decimal int literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-1 { example decimal int literal } {
    
    literal T3101v1 0

} {PASS}
Test Case: 3.10.1-valid-2
example octal int literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-2 { example octal int literal } {
    
    literal T3101v2 0372

} {PASS}
Test Case: 3.10.1-valid-3
example hex int literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-3 { example hex int literal } {
    
    literal T3101v3 0xDadaCafe

} {PASS}
Test Case: 3.10.1-valid-4
example hex int literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-4 { example hex int literal } {
    
    literal T3101v4 0X00FF00FF

} {PASS}
Test Case: 3.10.1-valid-5
decimal 0, octal 00, and hex 0x0 are equal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-5 { decimal 0, octal 00, and hex 0x0 are equal } {
    
    compile [saveas T3101v5.java {
class T3101v5 {
    void foo(int i) {
	switch (i) {
	    case 0:
	    case ((0 == 00) ? 1 : 0):
	    case ((0 == 0x0) ? 2 : 0):
	    case ((00 == 0x0) ? 3 : 0):
	}
    }
}
    }]

} {PASS}
Test Case: 3.10.1-valid-6
2147483648 is valid when negative

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-6 { 2147483648 is valid when negative } {
    
    literal T3101v6 -2147483648

} {PASS}
Test Case: 3.10.1-valid-7
example long literal, suffix l (ell) == L

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-7 { example long literal, suffix l (ell) == L } {
    
    literal T3101v7 0l

} {PASS}
Test Case: 3.10.1-valid-8
example long literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-8 { example long literal } {
    
    literal T3101v8 0777L

} {PASS}
Test Case: 3.10.1-valid-9
example long literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-9 { example long literal } {
    
    literal T3101v9 0X100000000L

} {PASS}
Test Case: 3.10.1-valid-10
example long literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-10 { example long literal } {
    
    literal T3101v10 2147483648L

} {PASS}
Test Case: 3.10.1-valid-11
example long literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-11 { example long literal } {
    
    literal T3101v11 0xC0B0L

} {PASS}
Test Case: 3.10.1-valid-12
9223372036854775807L is valid when negative

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-12 { 9223372036854775807L is valid when negative } {
    
    literal T3101v12 -9223372036854775807L

} {PASS}
Test Case: 3.10.1-valid-13
An octal that fits in 32 bits is legal int

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-13 { An octal that fits in 32 bits is legal int } {
    
    literal T3101v13 0000000000000000000000000001

} {PASS}
Test Case: 3.10.1-valid-14
A hex literal that fits in 64 bits is a legal long

Expected Result: PASS

Regression Test:

tcltest::test 3.10.1-valid-14 { A hex literal that fits in 64 bits is a legal long } {
    
    literal T3101v14 0x000012345678CAFEBABEL

} {PASS}

3.10.2

Directory : tests/jls/lexical-structure/literals/floating-point-literals


Test Case: 3.10.2-invalid-1
Whole or fractional part must have a digit

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-invalid-1 { Whole or fractional part must have a digit } {
    
    literal T3102i1 .e2

} {FAIL}
Test Case: 3.10.2-invalid-2
Whole or fractional part must have a digit

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-invalid-2 { Whole or fractional part must have a digit } {
    
    literal T3102i2 .F

} {FAIL}
Test Case: 3.10.2-invalid-3
Invalid Digits

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-invalid-3 { Invalid Digits } {
    
    literal T3102i3 E.1e20

} {FAIL}
Test Case: 3.10.2-invalid-4
ExponentPart must include a SignedInteger

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-invalid-4 { ExponentPart must include a SignedInteger } {
    
    literal T3102i4 1.E

} {FAIL}
Test Case: 3.10.2-invalid-5
ExponentPart must include a SignedInteger

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-invalid-5 { ExponentPart must include a SignedInteger } {
    
    literal T3102i5 1.e

} {FAIL}
Test Case: 3.10.2-invalid-6
ExponentPart must include a SignedInteger

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-invalid-6 { ExponentPart must include a SignedInteger } {
    
    literal T3102i6 1.E+

} {FAIL}
Test Case: 3.10.2-invalid-7
ExponentPart must include a SignedInteger

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-invalid-7 { ExponentPart must include a SignedInteger } {
    
    literal T3102i7 1.E-

} {FAIL}
Test Case: 3.10.2-invalid-8
ExponentPart must include a SignedInteger

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-invalid-8 { ExponentPart must include a SignedInteger } {
    
    literal T3102i8 .1eF

} {FAIL}
Test Case: 3.10.2-invalid-9
ExponentPart must include a SignedInteger

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-invalid-9 { ExponentPart must include a SignedInteger } {
    
    literal T3102i9 .1e-D

} {FAIL}
Test Case: 3.10.2-invalid-10
ExponentPart must include a SignedInteger

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-invalid-10 { ExponentPart must include a SignedInteger } {
    
    literal T3102i10 1e-d

} {FAIL}
Test Case: 3.10.2-invalid-11
ExponentPart must include a SignedInteger

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-invalid-11 { ExponentPart must include a SignedInteger } {
    
    literal T3102i11 .1e+F

} {FAIL}
Test Case: 3.10.2-round-1
It is an error for a floating-point literal to round to an infinity

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-round-1 { It is an error for a floating-point
        literal to round to an infinity } {
    
    literal T3102r1 1e39f

} {FAIL}
Test Case: 3.10.2-round-2
It is an error for a floating-point literal to round to an infinity

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-round-2 { It is an error for a floating-point
        literal to round to an infinity } {
    
    literal T3102r2 -1e310

} {FAIL}
Test Case: 3.10.2-round-3
It is an error for a nonzero floating-point to round to zero

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-round-3 { It is an error for a nonzero
        floating-point to round to zero } {
    
    literal T3102r3 1e-47f

} {FAIL}
Test Case: 3.10.2-round-4
It is an error for a nonzero floating-point to round to zero

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-round-4 { It is an error for a nonzero
        floating-point to round to zero } {
    
    literal T3102r4 -1e-326

} {FAIL}
Test Case: 3.10.2-round-5
It is an error for a floating-point literal to round to an infinity

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-round-5 { It is an error for a floating-point
        literal to round to an infinity } {
    
    literal T3102r5 340282356779733661637539395458142568448f

} {FAIL}
Test Case: 3.10.2-round-6
It is an error for a floating-point literal to round to an infinity

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-round-6 { It is an error for a floating-point
        literal to round to an infinity } {
    
    literal T3102r6 179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792.0

} {FAIL}
Test Case: 3.10.2-round-7
It is an error for a nonzero floating-point to round to zero

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-round-7 { It is an error for a nonzero
        floating-point to round to zero } {
    
    literal T3102r7 0.000000000000000000000000000000000000000000000700649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015625f

} {FAIL}
Test Case: 3.10.2-round-8
It is an error for a nonzero floating-point to round to zero

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.2-round-8 { It is an error for a nonzero
        floating-point to round to zero } {
    
    literal T3102r8 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125

} {FAIL}
Test Case: 3.10.2-round-9
test rounding at border of float denorms

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-round-9 { test rounding at border of float denorms } {
    
    constant_expression T3102r9  {0.00000000000000000000000000000000000001175494280757364291727882991035766513322858992758990427682963118425003064965173038558532425668090581893920898437499999f == 1.1754942e-38f}  {0.000000000000000000000000000000000000011754942807573642917278829910357665133228589927589904276829631184250030649651730385585324256680905818939208984375f == 1.1754944e-38f}  {0.00000000000000000000000000000000000001175494280757364291727882991035766513322858992758990427682963118425003064965173038558532425668090581893920898437500001f == 1.1754944e-38f}

} {PASS}
Test Case: 3.10.2-round-10
test rounding at border of double denorms. Note that Javac 1.3 enters an infinite loop on this test.

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-round-10 { test rounding at border of double denorms.
        Note that Javac 1.3 enters an infinite loop on this test. } {
    
    constant_expression T3102r10  {0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072011360574097967091319759348195463516456480234261097248222220210769455165295239081350879141491589130396211068700864386945946455276572074078206217433799881410632673292535522868813721490129811224514518898490572223072852551331557550159143974763979834118019993239625482890171070818506906306666559949382757725720157630626906633326475653000092458883164330377797918696120494973903778297049050510806099407302629371289589500035837999672072543043602840788957717961509455167482434710307026091446215722898802581825451803257070188608721131280795122334262883686223215037756666225039825343359745688844239002654981983854879482922068947216898310996983658468140228542433306603398508864458040010349339704275671864433837704860378616227717385456230658746790140867233276367187499999 == 2.225073858507201e-308}  {0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000222507385850720113605740979670913197593481954635164564802342610972482222202107694551652952390813508791414915891303962110687008643869459464552765720740782062174337998814106326732925355228688137214901298112245145188984905722230728525513315575501591439747639798341180199932396254828901710708185069063066665599493827577257201576306269066333264756530000924588831643303777979186961204949739037782970490505108060994073026293712895895000358379996720725430436028407889577179615094551674824347103070260914462157228988025818254518032570701886087211312807951223342628836862232150377566662250398253433597456888442390026549819838548794829220689472168983109969836584681402285424333066033985088644580400103493397042756718644338377048603786162277173854562306587467901408672332763671875 == 2.2250738585072014e-308}  {0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072011360574097967091319759348195463516456480234261097248222220210769455165295239081350879141491589130396211068700864386945946455276572074078206217433799881410632673292535522868813721490129811224514518898490572223072852551331557550159143974763979834118019993239625482890171070818506906306666559949382757725720157630626906633326475653000092458883164330377797918696120494973903778297049050510806099407302629371289589500035837999672072543043602840788957717961509455167482434710307026091446215722898802581825451803257070188608721131280795122334262883686223215037756666225039825343359745688844239002654981983854879482922068947216898310996983658468140228542433306603398508864458040010349339704275671864433837704860378616227717385456230658746790140867233276367187500001 == 2.2250738585072014e-308}

} {PASS}
Test Case: 3.10.2-round-11
test rounding at largest float where Float.MIN_VALUE is 1 ulp

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-round-11 { test rounding at largest float where
        Float.MIN_VALUE is 1 ulp } {
    
    constant_expression T3102r11  {0.00000000000000000000000000000000000002350988491449805367214912435885053862149911421504883761540137648996591935440791942824034777004271745681762695312499999999f == 2.3509884e-38f}  {0.00000000000000000000000000000000000002350988491449805367214912435885053862149911421504883761540137648996591935440791942824034777004271745681762695312500000000f == 2.3509884e-38f}  {0.00000000000000000000000000000000000002350988491449805367214912435885053862149911421504883761540137648996591935440791942824034777004271745681762695312500000001f == 2.3509886e-38f}  {0.00000000000000000000000000000000000002350988631579651799696619528258012191141524549531077949191714824703420324419900211410094925668090581893920898437499999999f == 2.3509886e-38f}  {0.00000000000000000000000000000000000002350988631579651799696619528258012191141524549531077949191714824703420324419900211410094925668090581893920898437500000000f == 2.3509887e-38f}  {0.00000000000000000000000000000000000002350988631579651799696619528258012191141524549531077949191714824703420324419900211410094925668090581893920898437500000001f == 2.3509887e-38f}

} {PASS}
Test Case: 3.10.2-round-12
test rounding at largest double where Double.MIN_VALUE is 1 ulp

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-round-12 { test rounding at largest double where
        Double.MIN_VALUE is 1 ulp } {
    
    constant_expression T3102r12  {0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250819966727949918635852426585926051135169509122872622312493126406953054127118942431783801370080830523154578251545303238277269592368457430440993619708911874715081505094180604803751173783204118519353387964161152051487413083163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642227455489682133472873831754840341397809846934151055619529382191981473003234105366170879223151087335413188049110555339027884856781219017754500629806224571029581637117459456877330110324211689177656713705497387108207822477584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171539810221213221201847003580761626016356864581135848683152156368691976240370422601699829101562499999 == 4.450147717014402e-308}  {0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250819966727949918635852426585926051135169509122872622312493126406953054127118942431783801370080830523154578251545303238277269592368457430440993619708911874715081505094180604803751173783204118519353387964161152051487413083163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642227455489682133472873831754840341397809846934151055619529382191981473003234105366170879223151087335413188049110555339027884856781219017754500629806224571029581637117459456877330110324211689177656713705497387108207822477584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171539810221213221201847003580761626016356864581135848683152156368691976240370422601699829101562500000 == 4.450147717014402e-308}  {0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250819966727949918635852426585926051135169509122872622312493126406953054127118942431783801370080830523154578251545303238277269592368457430440993619708911874715081505094180604803751173783204118519353387964161152051487413083163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642227455489682133472873831754840341397809846934151055619529382191981473003234105366170879223151087335413188049110555339027884856781219017754500629806224571029581637117459456877330110324211689177656713705497387108207822477584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171539810221213221201847003580761626016356864581135848683152156368691976240370422601699829101562500001 == 4.4501477170144023e-308}  {0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144025191476425140415360401540355268139774785767535266120266568349951413708126829206461084782164986440754321120225206002480547543836695927855394428741579816730655978088636997294650082209345461693939556240574324731139358717913147037364055774449896230603026352327326665938919068627384443806161075753898808234874156196451614819777611032358142380042975188038317843029641638497805266254045146423695015437229044481924252633972472775537202836761223314045275532818152963888710721086727474559560291862013573209842350335698170430223195347466466783839664426537070382566775697838267614310656819420077579872544813734533267952182996686996626897593533069381831182603797982290422495647610946820195511813521925831718993954860378616227717385456230658746790140867233276367187499999 == 4.4501477170144023e-308}  {0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144025191476425140415360401540355268139774785767535266120266568349951413708126829206461084782164986440754321120225206002480547543836695927855394428741579816730655978088636997294650082209345461693939556240574324731139358717913147037364055774449896230603026352327326665938919068627384443806161075753898808234874156196451614819777611032358142380042975188038317843029641638497805266254045146423695015437229044481924252633972472775537202836761223314045275532818152963888710721086727474559560291862013573209842350335698170430223195347466466783839664426537070382566775697838267614310656819420077579872544813734533267952182996686996626897593533069381831182603797982290422495647610946820195511813521925831718993954860378616227717385456230658746790140867233276367187500000 == 4.450147717014403e-308}  {0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144025191476425140415360401540355268139774785767535266120266568349951413708126829206461084782164986440754321120225206002480547543836695927855394428741579816730655978088636997294650082209345461693939556240574324731139358717913147037364055774449896230603026352327326665938919068627384443806161075753898808234874156196451614819777611032358142380042975188038317843029641638497805266254045146423695015437229044481924252633972472775537202836761223314045275532818152963888710721086727474559560291862013573209842350335698170430223195347466466783839664426537070382566775697838267614310656819420077579872544813734533267952182996686996626897593533069381831182603797982290422495647610946820195511813521925831718993954860378616227717385456230658746790140867233276367187500001 == 4.450147717014403e-308}

} {PASS}
Test Case: 3.10.2-float-1
example float literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-1 { example float literal } {
    
    literal T3102f1 1e1f

} {PASS}
Test Case: 3.10.2-float-2
example float literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-2 { example float literal } {
    
    literal T3102f2 2.f

} {PASS}
Test Case: 3.10.2-float-3
example float literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-3 { example float literal } {
    
    literal T3102f3 1.e-1

} {PASS}
Test Case: 3.10.2-float-4
example float literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-4 { example float literal } {
    
    literal T3102f4 .3F

} {PASS}
Test Case: 3.10.2-float-5
example float literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-5 { example float literal } {
    
    literal T3102f5 0f

} {PASS}
Test Case: 3.10.2-float-6
example float literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-6 { example float literal } {
    
    literal T3102f6 3.14f

} {PASS}
Test Case: 3.10.2-float-7
example float literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-7 { example float literal } {
    
    literal T3102f7 6.022137e+23f

} {PASS}
Test Case: 3.10.2-float-8
largest finite float, by JLS

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-8 { largest finite float, by JLS } {
    
    literal T3102f8 3.40282347e+38f

} {PASS}
Test Case: 3.10.2-float-9
smallest finite float

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-9 { smallest finite float } {
    
    literal T3102f9 1.40239846e-45f

} {PASS}
Test Case: 3.10.2-float-10
extra 0s don't affect floating point parsing

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-10 { extra 0s don't affect floating point parsing } {
    
    literal T3102f10 000000000000000000000000000000000000000000000000000000000000000000000000.000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000e00000000000000000000000000000000050f

} {PASS}
Test Case: 3.10.2-float-11
unicode 1e0F

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-11 { unicode 1e0F } {
    
    literal T3102f11 {\u0031\u0065\u0030\u0046}

} {PASS}
Test Case: 3.10.2-float-12
largest finite float, by rounding

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-12 { largest finite float, by rounding } {
    
    constant_expression T3102f12 {340282356779733661637539395458142568447.99999f == Float.MAX_VALUE}

} {PASS}
Test Case: 3.10.2-float-13
smallest finite float, by rounding. errors: fail to parse number, round number to zero note: We can't compare to Float.MIN_VALUE because some stupid JDK versions don't use a constant value

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-13 { smallest finite float, by rounding.
        errors: fail to parse number, round number to zero
        note: We can't compare to Float.MIN_VALUE because
        some stupid JDK versions don't use a constant value } {
    
    constant_expression T3102f13 {0.00000000000000000000000000000000000000000000070064923216240853546186479164495806564013097093825788587853414194489554134293030074331909418106079101562500001f != 0}

} {PASS}
Test Case: 3.10.2-float-14
valid float overrides invalid octal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-14 { valid float overrides invalid octal } {
    
    constant_expression T3102f14 {08.f == 8} {09.f == 9}  {08e0f == 8} {09e0f == 9}  {08f == 8} {09f == 9}  {08.F == 8} {09.F == 9}  {08e0F == 8} {09e0F == 9}  {08F == 8} {09F == 9}

} {PASS}
Test Case: 3.10.2-float-15
valid float overrides invalid octal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-15 { valid float overrides invalid octal } {
    
    constant_expression T3102f15 {0180.f == 180} {0190.f == 190}  {0180e0f == 180} {0190e0f == 190}  {0180f == 180} {0190f == 190}  {0180.F == 180} {0190.F == 190}  {0180e0F == 180} {0190e0F == 190}  {0180F == 180} {0190F == 190}

} {PASS}
Test Case: 3.10.2-float-16
check for 0 followed by letter

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-float-16 { check for 0 followed by letter } {
    
    constant_expression T3102f16 {0e+0f == 0e-0f} {0E1f == 0} {0f == 0F}

} {PASS}
Test Case: 3.10.2-double-1
example double literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-1 { example double literal } {
    
    literal T3102d1 1E1D

} {PASS}
Test Case: 3.10.2-double-2
example double literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-2 { example double literal } {
    
    literal T3102d2 2.

} {PASS}
Test Case: 3.10.2-double-3
example double literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-3 { example double literal } {
    
    literal T3102d3 .3

} {PASS}
Test Case: 3.10.2-double-4
example double literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-4 { example double literal } {
    
    literal T3102d4 0.0

} {PASS}
Test Case: 3.10.2-double-5
example double literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-5 { example double literal } {
    
    literal T3102d5 3.14

} {PASS}
Test Case: 3.10.2-double-6
example double literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-6 { example double literal } {
    
    literal T3102d6 1e-9d

} {PASS}
Test Case: 3.10.2-double-7
example double literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-7 { example double literal } {
    
    literal T3102d7 1e137

} {PASS}
Test Case: 3.10.2-double-8
largest finite double, by JLS

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-8 { largest finite double, by JLS } {
    
    literal T3102d8 1.79769313486231570e+308

} {PASS}
Test Case: 3.10.2-double-9
smallest finite double

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-9 { smallest finite double } {
    
    literal T3102d9 4.94065645841246544e-324

} {PASS}
Test Case: 3.10.2-double-10
the compiler should correctly round denormalized literals

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-10 { the compiler should correctly
        round denormalized literals } {
    
    constant_expression T3102d10 {.0000000000012345678901234567890e+10 ==
	    1.2345678901234568e-2}

} {PASS}
Test Case: 3.10.2-double-11
extra 0s don't affect floating point parsing

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-11 { extra 0s don't affect floating point parsing } {
    
    literal T3102d11 000000000000000000000000000000000000000000000000000000000000000000000000.000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000e00000000000000000000000000000000050

} {PASS}
Test Case: 3.10.2-double-12
unicode escape the . in float 1.0

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-12 { unicode escape the . in float 1.0 } {
    
    literal T3102d12 1\u002e0

} {PASS}
Test Case: 3.10.2-double-13
largest finite double, by rounding

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-13 { largest finite double, by rounding } {
    
    constant_expression T3102d13 {179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791.999999 == Double.MAX_VALUE}

} {PASS}
Test Case: 3.10.2-double-14
smallest finite double, by rounding errors: fail to parse number, round number to zero note: We can't compare to Double.MIN_VALUE because some stupid JDK versions don't use a constant value

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-14 { smallest finite double, by rounding
        errors: fail to parse number, round number to zero
        note: We can't compare to Double.MIN_VALUE because
        some stupid JDK versions don't use a constant value } {
    
    constant_expression T3102d14 {0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470328229206232720882843964341106861825299013071623822127928412503377536351043759326499181808179961898982823477228588654633283551779698981993873980053909390631503565951557022639229085839244910518443593180284993653615250031937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357957462276646527282722005637400648549997709659947045402082816622623785739345073633900796776193057750674017632467360096895134053553745851666113422376667860416215968046191446729184030053005753084904876539171138659164623952491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625477918694866799496832404970582102851318545139621383772282614543769341253209859132766723632812500001 != 0}

} {PASS}
Test Case: 3.10.2-double-15
valid double overrides invalid octal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-15 { valid double overrides invalid octal } {
    
    constant_expression T3102d15 {08. == 8} {09. == 9}  {08e0 == 8} {09e0 == 9}  {08.d == 8} {09.d == 9}  {08e0d == 8} {09e0d == 9}  {08d == 8} {09d == 9}  {08.D == 8} {09.D == 9}  {08e0D == 8} {09e0D == 9}  {08D == 8} {09D == 9}

} {PASS}
Test Case: 3.10.2-double-16
valid double overrides invalid octal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-16 { valid double overrides invalid octal } {
    
    constant_expression T3102d16 {0180. == 180} {0190. == 190}  {0180e0 == 180} {0190e0 == 190}  {0180.d == 180} {0190.d == 190}  {0180e0d == 180} {0190e0d == 190}  {0180d == 180} {0190d == 190}  {0180.D == 180} {0190.D == 190}  {0180e0D == 180} {0190e0D == 190}  {0180D == 180} {0190D == 190}

} {PASS}
Test Case: 3.10.2-double-17
check for 0 followed by letter

Expected Result: PASS

Regression Test:

tcltest::test 3.10.2-double-17 { check for 0 followed by letter } {
    
    constant_expression T3102d17 {0e+0d == 0e-0d} {0E1 == 0} {0d == 0D}

} {PASS}

3.10.4

Directory : tests/jls/lexical-structure/literals/character-literals


Test Case: 3.10.4-invalid-1
A SingleCharacter cannot be '

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-1 { A SingleCharacter cannot be ' } {
    
    literal T3104i1 '

} {FAIL}
Test Case: 3.10.4-invalid-2
A SingleCharacter cannot be '

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-2 { A SingleCharacter cannot be ' } {
    
    literal T3104i2 {\u0027}

} {FAIL}
Test Case: 3.10.4-invalid-3
A SingleCharacter cannot be \

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-3 { A SingleCharacter cannot be \ } {
    
    literal T3104i3 \\

} {FAIL}
Test Case: 3.10.4-invalid-4
A SingleCharacter cannot be \

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-4 { A SingleCharacter cannot be \ } {
    
    literal T3104i4 {\u005c}

} {FAIL}
Test Case: 3.10.4-invalid-5
A LineTerminator is not an InputCharacter

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-5 { A LineTerminator is not an InputCharacter } {
    
    literal T3104i5 \r

} {FAIL}
Test Case: 3.10.4-invalid-6
A LineTerminator is not an InputCharacter

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-6 { A LineTerminator is not an InputCharacter } {
    
    literal T3104i6 \n

} {FAIL}
Test Case: 3.10.4-invalid-7
A LineTerminator is not an InputCharacter

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-7 { A LineTerminator is not an InputCharacter } {
    
    literal T3104i7 \r\n

} {FAIL}
Test Case: 3.10.4-invalid-8
A LineTerminator is not an InputCharacter

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-8 { A LineTerminator is not an InputCharacter } {
    
    literal T3104i8 {\u000d}

} {FAIL}
Test Case: 3.10.4-invalid-9
A LineTerminator is not an InputCharacter

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-9 { A LineTerminator is not an InputCharacter } {
    
    literal T3104i9 {\u000a}

} {FAIL}
Test Case: 3.10.4-invalid-10
A LineTerminator is not an InputCharacter

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-10 { A LineTerminator is not an InputCharacter } {
    
    literal T3104i10 {\u000d\u000a}

} {FAIL}
Test Case: 3.10.4-invalid-11
' must be terminated with '

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-11 { ' must be terminated with ' } {
    
    literal T3104i11 AB

} {FAIL}
Test Case: 3.10.4-invalid-12
empty character literal is not allowed

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-12 { empty character literal is not allowed } {
    
    literal T3104i12 ""

} {FAIL}
Test Case: 3.10.4-invalid-13
\r\n is two character literals

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-13 { \r\n is two character literals } {
    
    literal T3104i13 {\r\n}

} {FAIL}
Test Case: 3.10.4-invalid-14
' must be terminated with '

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-14 { ' must be terminated with ' } {
    
    compile [saveas T3104i14.java "class T3104i14 {char c = 'a;}"]

} {FAIL}
Test Case: 3.10.4-invalid-15
EOF inside ''

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-15 { EOF inside '' } {
    
    compile [saveas T3104i15.java "class T3104i15 \{char c = '"]

} {FAIL}
Test Case: 3.10.4-invalid-16
EOF inside ''

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-16 { EOF inside '' } {
    
    compile [saveas T3104i16.java "class T3104i16 \{char c = 'a"]

} {FAIL}
Test Case: 3.10.4-invalid-17
EOF inside ''

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.4-invalid-17 { EOF inside '' } {
    
    compile [saveas T3104i17.java "class T3104i17 \{char c = '\\"]

} {FAIL}
Test Case: 3.10.4-valid-1
example character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-1 { example character literal } {
    
    literal T3104v1 a

} {PASS}
Test Case: 3.10.4-valid-2
example character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-2 { example character literal } {
    
    literal T3104v2 %

} {PASS}
Test Case: 3.10.4-valid-3
example character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-3 { example character literal } {
    
    literal T3104v3 {\t}

} {PASS}
Test Case: 3.10.4-valid-4
example character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-4 { example character literal } {
    
    literal T3104v4 {\\}

} {PASS}
Test Case: 3.10.4-valid-5
example character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-5 { example character literal } {
    
    literal T3104v5 {\'}

} {PASS}
Test Case: 3.10.4-valid-6
example character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-6 { example character literal } {
    
    literal T3104v6 {\u03a9}

} {PASS}
Test Case: 3.10.4-valid-7
example character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-7 { example character literal } {
    
    literal T3104v7 {\uFFFF}

} {PASS}
Test Case: 3.10.4-valid-8
example character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-8 { example character literal } {
    
    literal T3104v8 {\177}

} {PASS}
Test Case: 3.10.4-valid-9
example character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-9 { example character literal } {
    
    literal T3104v9 {\r}

} {PASS}
Test Case: 3.10.4-valid-10
example character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-10 { example character literal } {
    
    literal T3104v10 {\n}

} {PASS}
Test Case: 3.10.4-valid-11
valid character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-11 { valid character literal } {
    
    literal T3104v11 {\"}

} {PASS}
Test Case: 3.10.4-valid-12
valid character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-12 { valid character literal } {
    
    literal T3104v12 {"}

} {PASS}
Test Case: 3.10.4-valid-13
valid character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-13 { valid character literal } {
    
    literal T3104v13 {\u001a}

} {PASS}
Test Case: 3.10.4-valid-14
valid character literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.4-valid-14 { valid character literal } {
    
    literal T3104v14 \x1a

} {PASS}

3.10.5

Directory : tests/jls/lexical-structure/literals/string-literals


Test Case: 3.10.5-invalid-1
A StringCharacter cannot be "

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-1 { A StringCharacter cannot be " } {
    
    literal T3105i1 {"}

} {FAIL}
Test Case: 3.10.5-invalid-2
A StringCharacter cannot be "

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-2 { A StringCharacter cannot be " } {
    
    literal T3105i2 {\u0022}

} {FAIL}
Test Case: 3.10.5-invalid-3
A StringCharacter cannot be \

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-3 { A StringCharacter cannot be \ } {
    
    literal T3105i3 \\

} {FAIL}
Test Case: 3.10.5-invalid-4
A StringCharacter cannot be \

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-4 { A StringCharacter cannot be \ } {
    
    literal T3105i4 {\u005c}

} {FAIL}
Test Case: 3.10.5-invalid-5
A LineTerminator is not an InputCharacter

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-5 { A LineTerminator is not an InputCharacter } {
    
    literal T3105i5 \r

} {FAIL}
Test Case: 3.10.5-invalid-6
A LineTerminator is not an InputCharacter

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-6 { A LineTerminator is not an InputCharacter } {
    
    literal T3105i6 \n

} {FAIL}
Test Case: 3.10.5-invalid-7
A LineTerminator is not an InputCharacter

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-7 { A LineTerminator is not an InputCharacter } {
    
    literal T3105i7 \r\n

} {FAIL}
Test Case: 3.10.5-invalid-8
A LineTerminator is not an InputCharacter

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-8 { A LineTerminator is not an InputCharacter } {
    
    literal T3105i8 {\u000d}

} {FAIL}
Test Case: 3.10.5-invalid-9
A LineTerminator is not an InputCharacter

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-9 { A LineTerminator is not an InputCharacter } {
    
    literal T3105i9 {\u000a}

} {FAIL}
Test Case: 3.10.5-invalid-10
A LineTerminator is not an InputCharacter

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-10 { A LineTerminator is not an InputCharacter } {
    
    literal T3105i10 {\u000d\u000a}

} {FAIL}
Test Case: 3.10.5-invalid-11
" must be terminated with "

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-11 { " must be terminated with " } {
    
    compile [saveas T3105i11.java {class T3105i11 {String s = ";}}]

} {FAIL}
Test Case: 3.10.5-invalid-12
EOF inside ""

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-12 { EOF inside "" } {
    
    compile [saveas T3105i12.java "class T3105i12 \{String s = \""]

} {FAIL}
Test Case: 3.10.5-invalid-13
EOF inside ""

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.5-invalid-13 { EOF inside "" } {
    
    compile [saveas T3105i13.java "class T3105i13 \{String s = \"\\"]

} {FAIL}
Test Case: 3.10.5-valid-1
example string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-1 { example string literal } {
    
    literal T3105v1 ""

} {PASS}
Test Case: 3.10.5-valid-2
example string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-2 { example string literal } {
    
    literal T3105v2 {This is a string}

} {PASS}
Test Case: 3.10.5-valid-3
example string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-3 { example string literal } {
    
    literal T3105v3 {This is a " +
                     "two-line string}

} {PASS}
Test Case: 3.10.5-valid-4
valid string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-4 { valid string literal } {
    
    literal T3105v4 {\\}

} {PASS}
Test Case: 3.10.5-valid-5
valid string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-5 { valid string literal } {
    
    literal T3105v5 {\'}

} {PASS}
Test Case: 3.10.5-valid-6
valid string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-6 { valid string literal } {
    
    literal T3105v6 {\u03a9}

} {PASS}
Test Case: 3.10.5-valid-7
valid string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-7 { valid string literal } {
    
    literal T3105v7 {\uFFFF}

} {PASS}
Test Case: 3.10.5-valid-8
valid string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-8 { valid string literal } {
    
    literal T3105v8 {\177}

} {PASS}
Test Case: 3.10.5-valid-9
valid string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-9 { valid string literal } {
    
    literal T3105v9 {\r}

} {PASS}
Test Case: 3.10.5-valid-10
valid string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-10 { valid string literal } {
    
    literal T3105v10 {\n}

} {PASS}
Test Case: 3.10.5-valid-11
valid string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-11 { valid string literal } {
    
    literal T3105v11 {\"}

} {PASS}
Test Case: 3.10.5-valid-12
valid string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-12 { valid string literal } {
    
    literal T3105v12 '

} {PASS}
Test Case: 3.10.5-valid-13
valid string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-13 { valid string literal } {
    
    literal T3105v13 {\u001a}

} {PASS}
Test Case: 3.10.5-valid-14
valid string literal

Expected Result: PASS

Regression Test:

tcltest::test 3.10.5-valid-14 { valid string literal } {
    
    literal T3105v14 \x1a

} {PASS}

3.10.7

Directory : tests/jls/lexical-structure/literals/escape-sequences


Test Case: 3.10.7-invalid-1
\a (Alert, Ctrl-G) is not an escape sequence

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-1 { \a (Alert, Ctrl-G) is not an escape sequence } {
    
    sequence T3107i1 {\a}

} {FAIL}
Test Case: 3.10.7-invalid-2
\v (Vertical tab, Ctrl-K) is not an escape sequence

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-2 { \v (Vertical tab, Ctrl-K) is not an escape sequence } {
    
    sequence T3107i2 {\v}

} {FAIL}
Test Case: 3.10.7-invalid-3
\x (hex sequence) is not an escape sequence

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-3 { \x (hex sequence) is not an escape sequence } {
    
    sequence T3107i3 {\x0}

} {FAIL}
Test Case: 3.10.7-invalid-4
\LineTerminator is not a valid line continuation

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-4 { \LineTerminator is not a valid line continuation } {
    
    sequence T3107i4 a\\\n

} {FAIL}
Test Case: 3.10.7-invalid-5
\u is not an escape sequence, since unicode is already expanded

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-5 { \u is not an escape sequence, since unicode
        is already expanded } {
    
    sequence T3107i5 {\u005cu}

} {FAIL}
Test Case: 3.10.7-invalid-6
octal escape sequences are limited at 0377

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-6 { octal escape sequences are limited at 0377 } {
    
    sequence T3107i6 {\400}

} {FAIL}
Test Case: 3.10.7-invalid-7
escape sequences are case-sensitive

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-7 { escape sequences are case-sensitive } {
    
    sequence T3107i7 {\N}

} {FAIL}
Test Case: 3.10.7-invalid-8
escape sequences only occur within character and string literals

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-8 { escape sequences only occur within character
        and string literals } {
    
    compile [saveas T3107i8.java "class T3107i8 { \\t }"]

} {FAIL}
Test Case: 3.10.7-invalid-9
octal escape sequences are limited at 0377

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-9 { octal escape sequences are limited at 0377 } {
    
    sequence T3107i9 {\0000}

} {FAIL}
Test Case: 3.10.7-invalid-10
\LineTerminator is not a valid sequence

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-10 { \LineTerminator is not a valid sequence } {
    
    sequence T3107i10 \\\n

} {FAIL}
Test Case: 3.10.7-invalid-11
\LineTerminator is not a valid sequence

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-11 { \LineTerminator is not a valid sequence } {
    
    sequence T3107i11 \\\r

} {FAIL}
Test Case: 3.10.7-invalid-12
\u is not an escape sequence, since unicode is already expanded

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-12 { \u is not an escape sequence, since unicode
        is already expanded } {
    
    sequence T3107i12 {\u005cu0000}

} {FAIL}
Test Case: 3.10.7-invalid-13
escape sequences only occur within character and string literals

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-13 { escape sequences only occur within character
        and string literals } {
    
    compile [saveas T3107i13.java "class T3107i13 {} \\\\"]

} {FAIL}
Test Case: 3.10.7-invalid-14
escape sequences only occur within character and string literals

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-14 { escape sequences only occur within character
        and string literals } {
    
    compile [saveas T3107i14.java "class T3107i14 {} \\"]

} {FAIL}
Test Case: 3.10.7-invalid-15
\LineTerminator is not a valid sequence

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-15 { \LineTerminator is not a valid sequence } {
    
    empty_class T3107i15 "class T3107i15 { String s = \"\\\n\";}"

} {FAIL}
Test Case: 3.10.7-invalid-16
\LineTerminator is not a valid sequence

Expected Result: FAIL

Regression Test:

tcltest::test 3.10.7-invalid-16 { \LineTerminator is not a valid sequence } {
    
    empty_class T3107i16 "class T3107i16 { String s = \"\\\r\";}"

} {FAIL}
Test Case: 3.10.7-valid-1
\b (Backspace, Ctrl-H, \u0008) is an escape sequence

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-1 { \b (Backspace, Ctrl-H, \u0008) is an escape sequence } {
    
    sequence T3107v1 {\b}

} {PASS}
Test Case: 3.10.7-valid-2
\t (Tab, Ctrl-I, \u0009) is an escape sequence

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-2 { \t (Tab, Ctrl-I, \u0009) is an escape sequence } {
    
    sequence T3107v2 {\t}

} {PASS}
Test Case: 3.10.7-valid-3
\n (Linefeed, Ctrl-J, \u000a) is an escape sequence

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-3 { \n (Linefeed, Ctrl-J, \u000a) is an escape sequence } {
    
    sequence T3107v3 {\n}

} {PASS}
Test Case: 3.10.7-valid-4
\f (Formfeed, Ctrl-L, \u000c) is an escape sequence

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-4 { \f (Formfeed, Ctrl-L, \u000c) is an escape sequence } {
    
    sequence T3107v4 {\f}

} {PASS}
Test Case: 3.10.7-valid-5
\r (Carriage Return, Ctrl-M, \u000d) is an escape sequence

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-5 { \r (Carriage Return, Ctrl-M, \u000d)
        is an escape sequence } {
    
    sequence T3107v5 {\r}

} {PASS}
Test Case: 3.10.7-valid-6
\" (\u0022) is an escape sequence

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-6 { \" (\u0022) is an escape sequence } {
    
    sequence T3107v6 {\"}

} {PASS}
Test Case: 3.10.7-valid-7
\' (\u0027) is an escape sequence

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-7 { \' (\u0027) is an escape sequence } {
    
    sequence T3107v7 {\'}

} {PASS}
Test Case: 3.10.7-valid-8
\\ (\u005c) is an escape sequence

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-8 { \\ (\u005c) is an escape sequence } {
    
    sequence T3107v8 {\\}

} {PASS}
Test Case: 3.10.7-valid-9
octal sequences can have one digit

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-9 { octal sequences can have one digit } {
    
    sequence T3107v9 {\5}

} {PASS}
Test Case: 3.10.7-valid-10
octal sequences can have two digits

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-10 { octal sequences can have two digits } {
    
    sequence T3107v10 {\40}

} {PASS}
Test Case: 3.10.7-valid-11
octal sequences can have three digits, if the first is < 4

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-11 { octal sequences can have three digits,
        if the first is < 4 } {
    
    sequence T3107v11 {\012}

} {PASS}
Test Case: 3.10.7-valid-12
escape sequences may be written in unicode

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-12 { escape sequences may be written in unicode } {
    
    sequence T3107v12 {\u005c\u005c}

} {PASS}
Test Case: 3.10.7-valid-13
an octal sequence with the first digit >= 4 has at most two digits

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-13 { an octal sequence with the first
        digit >= 4 has at most two digits } {
    
    compile [saveas T3107v13.java {
class T3107v13 {
    void foo(int i) {
	switch (i) {
	    case 0:
	    case (("\477" == "'7") ? 1 : 0):
	}
    }
}
    }]

} {PASS}
Test Case: 3.10.7-valid-14
escape sequences represent characters with identical value

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-14 { escape sequences represent characters
        with identical value } {
    
    compile [saveas T3107v14.java {
class T3107v14 {
    void foo(int i) {
	switch (i) {
	    case 0:
	    case (('\t' == 9) ? 1 : 0):
	    case (('\t' == '\011') ? 2 : 0):
	}
    }
}
    }]

} {PASS}
Test Case: 3.10.7-valid-15
escape sequences represent the same character in a String

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-15 { escape sequences represent the same
        character in a String } {
    
    compile [saveas T3107v15.java {
class T3107v15 {
    void foo(int i) {
	switch (i) {
	    case 0:
	    case (("\b" == "\u0008") ? 1 : 0):
	    case (("\10" == "\u0008") ? 2 : 0):
	}
    }
}
    }]

} {PASS}
Test Case: 3.10.7-valid-16
escape sequences only occur within character and string literals

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-16 { escape sequences only occur within
        character and string literals } {
    
    compile [saveas T3107v16.java {
class T3107v16 {
    // Comment not ended here: \n int i =
}
    }]

} {PASS}
Test Case: 3.10.7-valid-17
an octal sequence with the first digit < 4 has at most three digits

Expected Result: PASS

Regression Test:

tcltest::test 3.10.7-valid-17 { an octal sequence with the first
        digit < 4 has at most three digits } {
    
    compile [saveas T3107v17.java {
class T3107v17 {
    void foo(int i) {
	switch (i) {
	    case 0:
	    case (("\0000" == '\u0000' + "0") ? 1 : 0):
	}
    }
}
    }]

} {PASS}

4.5.4

Directory : tests/jls/types-values-and-variables/variables/final-variables


Test Case: 4.5.4-instance-1
final variable must be definitely assigned

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-instance-1 { final variable must be definitely assigned } {
    
    empty_class T454i1 {
        final int val;
    }

} {FAIL}
Test Case: 4.5.4-instance-2
final variable must be definitely assigned

Expected Result: PASS

Regression Test:

tcltest::test 4.5.4-instance-2 { final variable must be definitely assigned } {
    
    empty_class T454i2 {
        final int val = 0;
        final String str = null;
    }

} {PASS}
Test Case: 4.5.4-instance-3
final variable must be definitely assigned

Expected Result: PASS

Regression Test:

tcltest::test 4.5.4-instance-3 { final variable must be definitely assigned } {
    
    empty_class T454i3 {
        final int val;
        final String str;

        T454i3() {
            val = 0;
            str = null;
        }
    }

} {PASS}
Test Case: 4.5.4-instance-4
final variable must be definitely assigned

Expected Result: PASS

Regression Test:

tcltest::test 4.5.4-instance-4 { final variable must be definitely assigned } {
    
    empty_class T454i4 {
        final int val;
        final String str;

        {
            val = 0;
            str = null;
        }
    }

} {PASS}
Test Case: 4.5.4-instance-5
final variable can only be assigned to once

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-instance-5 { final variable can only be assigned to once } {
    
    empty_class T454i5 {
        final int val = 0;
        final String str = null;
        
        T454i5() {
            val = 1;
            str = "";
        }
    }

} {FAIL}
Test Case: 4.5.4-instance-6
final variable can only be assigned to once

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-instance-6 { final variable can only be assigned to once } {
    
    empty_class T454i6 {
        final int val = 0;
        final String str = null;
        
        {
            val = 1;
            str = "";
        }
    }

} {FAIL}
Test Case: 4.5.4-instance-7
final variable can only be assigned to once

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-instance-7 { final variable can only be assigned to once } {
    
    empty_class T454i7 {
        final int val;
        final String str;
        {
            val = 0;
            str = null;
        }
        T454i7() {
            val = 1;
            str = "";
        }
    }

} {FAIL}
Test Case: 4.5.4-instance-8
final variable must be assigned before it can be used

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-instance-8 { final variable must be assigned before it
        can be used } {
    
    empty_class T454i8 {
        final int val;
        
        T454i8() {
            int tmp = val;
            val = 1;
        }
    }

} {FAIL}
Test Case: 4.5.4-instance-9
blank final variable must be assigned in every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-instance-9 { blank final variable must be assigned in
        every constructor } {
    
    empty_class T454i9 {
        final int val;
        final String str;

        T454i9() { val = 0; }
        T454i9(int foo) { str = null; }
    }

} {FAIL}
Test Case: 4.5.4-instance-10
final variable can only be assigned to once

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-instance-10 { final variable can only be assigned to once } {
    
    empty_class T454i10 {
        final int val = 0;
        final String str = null;

        T454i10() {
            val = 1 + val;
            str = "foo" + str;
        }
    }

} {FAIL}
Test Case: 4.5.4-static-1
final variable must be definitely assigned

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-static-1 { final variable must be definitely assigned } {
    
    empty_class T454s1 {
        static final int val;
        static final String str;
    }

} {FAIL}
Test Case: 4.5.4-static-2
final variable must be definitely assigned

Expected Result: PASS

Regression Test:

tcltest::test 4.5.4-static-2 { final variable must be definitely assigned } {
    
    empty_class T454s2 {
        static final int val = 0;
        static final String str = null;
    }

} {PASS}
Test Case: 4.5.4-static-3
final variable must be definitely assigned

Expected Result: PASS

Regression Test:

tcltest::test 4.5.4-static-3 { final variable must be definitely assigned } {
    
    empty_class T454s3 {
        static final int val;
        static final String str;
        static {
            val = 0;
            str = null;
        }
    }

} {PASS}
Test Case: 4.5.4-static-4
final variable can only be assigned to once

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-static-4 { final variable can only be assigned to once } {
    
    empty_class T454s4 {
        static final int val = 0;
        static final String str = null;
        static {
            val = 1;
            str = "";
        }
    }

} {FAIL}
Test Case: 4.5.4-static-5
final variable must be assigned before it can be used

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-static-5 { final variable must be assigned before it
        can be used } {
    
    empty_class T454i5 {
        static final int val;
        static {
            int i = val;
            val = 1;
        }
    }

} {FAIL}
Test Case: 4.5.4-static-6
final variable can only be assigned to once

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-static-6 { final variable can only be assigned to once } {
    
    empty_class T454s6 {
        static final int val = 0;
        static final String str = null;

        static void main(String args[]) {
            val = 1 + val;
            str = "foo" + str;
        }
    }

} {FAIL}
Test Case: 4.5.4-reference-1
a final variable can reference an Object, the reference can not change but the object being referenced can change

Expected Result: PASS

Regression Test:

tcltest::test 4.5.4-reference-1 { a final variable can reference an Object, the
        reference can not change but the object being referenced can change } {
    
    empty_class T454r1 {
        final StringBuffer sbuf = new StringBuffer();
        
        void append() {
            sbuf.append("nuggy");
        }
    }

} {PASS}
Test Case: 4.5.4-reference-2
a final variable can reference an array, the elements of the array can be modified

Expected Result: PASS

Regression Test:

tcltest::test 4.5.4-reference-2 { a final variable can reference an array, the
        elements of the array can be modified } {
    
    empty_class T454r2 {
        final Object[] objarr = {new Object(), new Object()};

        void swap() {
            Object tmp = objarr[0];
            objarr[0] = objarr[1];
            objarr[1] = tmp;
        }
    }

} {PASS}
Test Case: 4.5.4-9
blank final variable must be assigned in every constructor

Expected Result: PASS

Regression Test:

tcltest::test 4.5.4-9 { blank final variable must be assigned in every 
        constructor } {
    
    empty_class T4549 {
        final int val;
        T4549() { val = 0; }
        T4549(int foo) { this(); }
    }

} {PASS}
Test Case: 4.5.4-10
blank final variable must be assigned in every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-10 { blank final variable must be assigned in every 
        constructor } {
    
    empty_class T45410 {
        final int val;
        T45410() { val = 0; }
        T45410(int foo) { this(); val = 1;}
    }

} {FAIL}
Test Case: 4.5.4-local-1
final may only be assigned once

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-local-1 { final may only be assigned once } {
    
    empty_main T454l1 {
        final int i;
        i = 1;
        i = 2;
    }

} {FAIL}
Test Case: 4.5.4-local-2
final may only be assigned once

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-local-2 { final may only be assigned once } {
    
    empty_main T454l2 {
        final int i = 1;
        i = 2;
    }

} {FAIL}
Test Case: 4.5.4-local-3
final variable can only be assigned to once

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-local-3 { final variable can only be assigned to once } {
    
    empty_main T454l3 {
        final int val = 0;
        final String str = null;
        val = 1 + val;
        str = "foo" + str;
    }

} {FAIL}
Test Case: 4.5.4-parameter-1
final parameter may not be assigned

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-parameter-1 { final parameter may not be assigned } {
    
    empty_class T454p1 {
        void foo(final int i) {
            i = 1;
        }
    }

} {FAIL}
Test Case: 4.5.4-parameter-2
final parameter may not be assigned

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-parameter-2 { final parameter may not be assigned } {
    
    empty_main T454p2 {
        try {
            throw new Exception();
        } catch (final Exception e) {
            e = new Exception();
        }
    }

} {FAIL}
Test Case: 4.5.4-parameter-3
final parameter may not be assigned

Expected Result: FAIL

Regression Test:

tcltest::test 4.5.4-parameter-3 { final parameter may not be assigned } {
    
    empty_class T454p3 {
        void foo(final int i) {
            new Object() {
                int j = i = 0;
            };
        }
    }

} {FAIL}

5.1.1

Directory : tests/jls/conversions-and-promotions/kinds-of-conversion/identity-conversions


Test Case: 5.1.1-primitive-1
boolean identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-primitive-1 { boolean identity conversion } {
    
    empty_class T511p1 {
        boolean b1 = (boolean) true;
        boolean b2 = (boolean) b1;
        boolean b3 = (boolean) (false != false);
        boolean b4 = (boolean) Boolean.TRUE.booleanValue();
    }

} {PASS}
Test Case: 5.1.1-primitive-2
byte identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-primitive-2 { byte identity conversion } {
    
    empty_class T511p2 {
        static final byte b1 = 1;
        byte b2 = (byte) b1;
        byte b3 = (byte) (new Byte(Byte.MAX_VALUE).byteValue());
    }

} {PASS}
Test Case: 5.1.1-primitive-3
short identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-primitive-3 { short identity conversion } {
    
    empty_class T511p3 {
        static final short s1 = 1;
        short s2 = (short) s1;
        short s3 = (short) (new Short(Short.MAX_VALUE).shortValue());
    }

} {PASS}
Test Case: 5.1.1-primitive-4
char identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-primitive-4 { char identity conversion } {
    
    empty_class T511p4 {
        char c1 = (char) '1';
        char c2 = (char) c1;
        char c3 = (char) (new Character(Character.MAX_VALUE).charValue());
    }

} {PASS}
Test Case: 5.1.1-primitive-5
int identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-primitive-5 { int identity conversion } {
    
    empty_class T511p5 {
        int i1 = (int) 1;
        int i2 = (int) i1;
        int i3 = (int) (1 + 2);
        int i4 = (int) (new Integer(Integer.MAX_VALUE).intValue());
    }

} {PASS}
Test Case: 5.1.1-primitive-6
long identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-primitive-6 { long identity conversion } {
    
    empty_class T511p6 {
        long l1 = (long) 1L;
        long l2 = (long) l1;
        long l3 = (long) (1L + 2L);
        long l4 = (long) (new Long(Long.MAX_VALUE).longValue());
    }

} {PASS}
Test Case: 5.1.1-primitive-7
float identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-primitive-7 { float identity conversion } {
    
    empty_class T511p7 {
        float f1 = (float) 1.0f;
        float f2 = (float) f1;
        float f3 = (float) (1f + 2f);
        float f4 = (float) (new Float(Float.MAX_VALUE).floatValue());
    }

} {PASS}
Test Case: 5.1.1-primitive-8
double identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-primitive-8 { double identity conversion } {
    
    empty_class T511p8 {
        double d1 = (double) 1.0;
        double d2 = (double) d1;
        double d3 = (double) (1.0 + 2.0);
        double d4 = (double) (new Double(Double.MAX_VALUE).doubleValue());
    }

} {PASS}
Test Case: 5.1.1-reference-1
reference identity conversion: Object

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-reference-1 { reference identity conversion: Object } {
    
    empty_class T511r1 {
        Object o1 = (Object) new Object();
        Object o2 = (Object) null;
        Object o3 = (Object) o1;
        Object o4 = (Object) o2;
        Object foo() { return new Object(); }
        Object o5 = (Object) foo();
    }

} {PASS}
Test Case: 5.1.1-reference-2
reference identity conversion: String

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-reference-2 { reference identity conversion: String } {
    
    empty_class T511r2 {
        String s1 = (String) "";
        String s2 = (String) null;
        String s3 = (String) s1;
        String s4 = (String) s2;
        String s5 = (String) ("1" + "2");
        String s6 = (String) "1".concat("2");
    }

} {PASS}
Test Case: 5.1.1-reference-3
reference identity conversion: this class

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-reference-3 { reference identity conversion: this class } {
    
    empty_class T511r3 {
        T511r3 t1 = (T511r3) new T511r3();
        T511r3 t2 = (T511r3) null;
        T511r3 t3 = (T511r3) t1;
        T511r3 t4 = (T511r3) t2;
    }

} {PASS}
Test Case: 5.1.1-reference-4
reference identity conversion: primitive array

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-reference-4 { reference identity conversion: primitive array } {
    
    empty_class T511r4 {
        int[] ia1 = {1, 2};
        int[] ia2 = (int[]) null;
        int[] ia3 = (int[]) ia1;
        int[] ia4 = (int[]) ia2;
        int[] foo() { return new int[0]; }
        int[] ia5 = (int[]) foo();
    }

} {PASS}
Test Case: 5.1.1-reference-5
reference identity conversion: Object array

Expected Result: PASS

Regression Test:

tcltest::test 5.1.1-reference-5 { reference identity conversion: Object array } {
    
    empty_class T511r5 {
        Object[] oa1 = {new Object[1]};
        Object[] oa2 = (Object[]) null;
        Object[] oa3 = (Object[]) oa1;
        Object[] oa4 = (Object[]) oa2;
        Object[] foo() { return new Object[0]; }
        Object[] oa5 = (Object[]) foo();
    }

} {PASS}
Test Case: 5.1.1-null-1
there is no such thing as null identity conversion

Expected Result: FAIL

Regression Test:

tcltest::test 5.1.1-null-1 { there is no such thing as null identity conversion } {
    
    empty_class T511n1 {
        Object n = (null) null;
    }

} {FAIL}

5.1.2

Directory : tests/jls/conversions-and-promotions/kinds-of-conversion/widening-primitive-conversions


Test Case: 5.1.2-bts-1
byte to short conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-bts-1 { byte to short conversion never loses information } {
    
    empty_main T512bts1 {
        final byte b = 72;
        final short s = 72;
        switch (args.length) {
            case 0:
            case (((short)b == s) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-bts-2
byte to short boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-bts-2 { byte to short boundary case } {
    
    empty_main T512bts2 {
        final byte b = Byte.MAX_VALUE;
        final short s = 127;
        switch (args.length) {
            case 0:
            case (((short)b == s) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-bts-3
byte to short boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-bts-3 { byte to short boundary case } {
    
    empty_main T512bts3 {
        final byte b = 0;
        final short s = 0;
        switch (args.length) {
            case 0:
            case (((short)b == s) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-bts-4
byte to short boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-bts-4 { byte to short boundary case } {
    
    empty_main T512bts4 {
        final byte b = Byte.MIN_VALUE;
        final short s = -128;
        switch (args.length) {
            case 0:
            case (((short)b == s) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-bts-5
byte to short boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-bts-5 { byte to short boundary case } {
    
    empty_main T512bts5 {
        final byte b = -1;
        final short s = -1;
        switch (args.length) {
            case 0:
            case (((short)b == s) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-bti-1
byte to int conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-bti-1 { byte to int conversion never loses information } {
    
    empty_main T512bti1 {
        final byte b = 72;
        switch (args.length) {
            case 0:
            case (((int)b == 72) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-bti-2
byte to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-bti-2 { byte to int boundary case } {
    
    constant_expression T512bti2 {(int)Byte.MAX_VALUE == 127}

} {PASS}
Test Case: 5.1.2-bti-3
byte to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-bti-3 { byte to int boundary case } {
    
    empty_main T512bti3 {
        final byte b = 0;
        switch (args.length) {
            case 0:
            case (((int)b == 0) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-bti-4
byte to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-bti-4 { byte to int boundary case } {
    
    constant_expression T512bti4 {(int)Byte.MIN_VALUE == -128}

} {PASS}
Test Case: 5.1.2-bti-5
byte to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-bti-5 { byte to int boundary case } {
    
    empty_main T512bti5 {
        final byte b = -1;
        switch (args.length) {
            case 0:
            case (((int)b == -1) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-btl-1
byte to long conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btl-1 { byte to long conversion never loses information } {
    
    empty_main T512btl1 {
        final byte b = 72;
        switch (args.length) {
            case 0:
            case (((long)b == 72L) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-btl-2
byte to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btl-2 { byte to long boundary case } {
    
    constant_expression T512btl2 {(long)Byte.MAX_VALUE == 127L}

} {PASS}
Test Case: 5.1.2-btl-3
byte to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btl-3 { byte to long boundary case } {
    
    empty_main T512btl3 {
        final byte b = 0;
        switch (args.length) {
            case 0:
            case (((long)b == 0L) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-btl-4
byte to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btl-4 { byte to long boundary case } {
    
    constant_expression T512btl4 {(long)Byte.MIN_VALUE == -128L}

} {PASS}
Test Case: 5.1.2-btl-5
byte to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btl-5 { byte to long boundary case } {
    
    empty_main T512btl5 {
        final byte b = -1;
        switch (args.length) {
            case 0:
            case (((long)b == -1L) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-btf-1
byte to float conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btf-1 { byte to float conversion never loses information } {
    
    empty_main T512btf1 {
        final byte b = 72;
        switch (args.length) {
            case 0:
            case (((float)b == 72.0f) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-btf-2
byte to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btf-2 { byte to float boundary case } {
    
    constant_expression T512btf2 {(float)Byte.MAX_VALUE == 127.0f}

} {PASS}
Test Case: 5.1.2-btf-3
byte to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btf-3 { byte to float boundary case } {
    
    empty_main T512btf3 {
        final byte b = 0;
        switch (args.length) {
            case 0:
            case (((float)b == 0.0f) ? 1 : 0):
            case ((1/(float)b == Float.POSITIVE_INFINITY) ? 2 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-btf-4
byte to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btf-4 { byte to float boundary case } {
    
    constant_expression T512btf4 {(float)Byte.MIN_VALUE == -128.0f}

} {PASS}
Test Case: 5.1.2-btf-5
byte to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btf-5 { byte to float boundary case } {
    
    empty_main T512btf5 {
        final byte b = -1;
        switch (args.length) {
            case 0:
            case (((float)b == -1.0f) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-btd-1
byte to double conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btd-1 { byte to double conversion never loses information } {
    
    empty_main T512btd1 {
        final byte b = 72;
        switch (args.length) {
            case 0:
            case (((double)b == 72.0) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-btd-2
byte to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btd-2 { byte to double boundary case } {
    
    constant_expression T512btd2 {(double)Byte.MAX_VALUE == 127.0}

} {PASS}
Test Case: 5.1.2-btd-3
byte to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btd-3 { byte to double boundary case } {
    
    empty_main T512btd3 {
        final byte b = 0;
        switch (args.length) {
            case 0:
            case (((double)b == 0.0) ? 1 : 0):
            case ((1/(double)b == Double.POSITIVE_INFINITY) ? 2 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-btd-4
byte to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btd-4 { byte to double boundary case } {
    
    constant_expression T512btd4 {(double)Byte.MIN_VALUE == -128.0}

} {PASS}
Test Case: 5.1.2-btd-5
byte to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-btd-5 { byte to double boundary case } {
    
    empty_main T512btd5 {
        final byte b = -1;
        switch (args.length) {
            case 0:
            case (((double)b == -1.0) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-sti-1
short to int conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-sti-1 { short to int conversion never loses information } {
    
    empty_main T512sti1 {
        final short s = 12345;
        switch (args.length) {
            case 0:
            case (((int)s == 12345) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-sti-2
short to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-sti-2 { short to int boundary case } {
    
    constant_expression T512sti2 {(int)Short.MAX_VALUE == 32767}

} {PASS}
Test Case: 5.1.2-sti-3
short to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-sti-3 { short to int boundary case } {
    
    empty_main T512sti3 {
        final short s = 0;
        switch (args.length) {
            case 0:
            case (((int)s == 0) ? 1 : 0):
        }
    }
    constant_expression T512sti3 {(int)0 == 0L}

} {PASS}
Test Case: 5.1.2-sti-4
short to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-sti-4 { short to int boundary case } {
    
    constant_expression T512sti4 {(int)Short.MIN_VALUE == -32768}

} {PASS}
Test Case: 5.1.2-sti-5
short to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-sti-5 { short to int boundary case } {
    
    empty_main T512sti5 {
        final short s = -1;
        switch (args.length) {
            case 0:
            case (((int)s == -1) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-stl-1
short to long conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-stl-1 { short to long conversion never loses information } {
    
    empty_main T512stl1 {
        final short s = 12345;
        switch (args.length) {
            case 0:
            case (((long)s == 12345L) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-stl-2
short to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-stl-2 { short to long boundary case } {
    
    constant_expression T512stl2 {(long)Short.MAX_VALUE == 32767L}

} {PASS}
Test Case: 5.1.2-stl-3
short to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-stl-3 { short to long boundary case } {
    
    empty_main T512stl3 {
        final short s = 0;
        switch (args.length) {
            case 0:
            case (((long)s == 0L) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-stl-4
short to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-stl-4 { short to long boundary case } {
    
    constant_expression T512stl4 {(long)Short.MIN_VALUE == -32768L}

} {PASS}
Test Case: 5.1.2-stl-5
short to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-stl-5 { short to long boundary case } {
    
    empty_main T512stl5 {
        final short s = -1;
        switch (args.length) {
            case 0:
            case (((long)s == -1L) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-stf-1
short to float conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-stf-1 { short to float conversion never loses information } {
    
    empty_main T512stf3 {
        final short s = 12345;
        switch (args.length) {
            case 0:
            case (((float)s == 12345.0f) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-stf-2
short to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-stf-2 { short to float boundary case } {
    
    constant_expression T512stf2 {(float)Short.MAX_VALUE == 32767.0f}

} {PASS}
Test Case: 5.1.2-stf-3
short to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-stf-3 { short to float boundary case } {
    
    empty_main T512stf3 {
        final short s = 0;
        switch (args.length) {
            case 0:
            case (((float)s == 0.0f) ? 1 : 0):
            case ((1/(float)s == Float.POSITIVE_INFINITY) ? 2 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-stf-4
short to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-stf-4 { short to float boundary case } {
    
    constant_expression T512stf4 {(float)Short.MIN_VALUE == -32768.0f}

} {PASS}
Test Case: 5.1.2-stf-5
short to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-stf-5 { short to float boundary case } {
    
    empty_main T512stf5 {
        final short s = -1;
        switch (args.length) {
            case 0:
            case (((float)s == -1.0f) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-std-1
short to double conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-std-1 { short to double conversion never loses information } {
    
    empty_main T512std1 {
        final short s = 12345;
        switch (args.length) {
            case 0:
            case (((double)s == 12345.0) ? 1 : 0):
        }
    }
    constant_expression T512std1 {(double)12345678 == 12345678L}

} {PASS}
Test Case: 5.1.2-std-2
short to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-std-2 { short to double boundary case } {
    
    constant_expression T512std2 {(double)Short.MAX_VALUE == 32767.0}

} {PASS}
Test Case: 5.1.2-std-3
short to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-std-3 { short to double boundary case } {
    
    empty_main T512std3 {
        final short s = 0;
        switch (args.length) {
            case 0:
            case (((double)s == 0.0) ? 1 : 0):
            case ((1/(double)s == Double.POSITIVE_INFINITY) ? 2 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-std-4
short to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-std-4 { short to double boundary case } {
    
    constant_expression T512std4 {(double)Short.MIN_VALUE == -32768.0}

} {PASS}
Test Case: 5.1.2-std-5
short to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-std-5 { short to double boundary case } {
    
    empty_main T512std5 {
        final short s = -1;
        switch (args.length) {
            case 0:
            case (((double)s == -1.0) ? 1 : 0):
        }
    }

} {PASS}
Test Case: 5.1.2-cti-1
char to int conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-cti-1 { char to int conversion never loses information } {
    
    constant_expression T512cti1 {(int)'\u789a' == 0x789a}

} {PASS}
Test Case: 5.1.2-cti-2
char to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-cti-2 { char to int boundary case } {
    
    constant_expression T512cti2 {(int)'\uffff' == 0xffff}

} {PASS}
Test Case: 5.1.2-cti-3
char to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-cti-3 { char to int boundary case } {
    
    constant_expression T512cti3 {(int)'\0' == 0}

} {PASS}
Test Case: 5.1.2-cti-4
char to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-cti-4 { char to int boundary case } {
    
    constant_expression T512cti4 {(int)'\u7fff' == 0x7fff}

} {PASS}
Test Case: 5.1.2-cti-5
char to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-cti-5 { char to int boundary case } {
    
    constant_expression T512cti5 {(int)'\u8000' == 0x8000}

} {PASS}
Test Case: 5.1.2-cti-6
char to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-cti-6 { char to int boundary case } {
    
    constant_expression T512cti6 {(int)'\177' == 0x7f}

} {PASS}
Test Case: 5.1.2-cti-7
char to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-cti-7 { char to int boundary case } {
    
    constant_expression T512cti7 {(int)'\200' == 0x80}

} {PASS}
Test Case: 5.1.2-cti-8
char to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-cti-8 { char to int boundary case } {
    
    constant_expression T512cti8 {(int)'\377' == 0xff}

} {PASS}
Test Case: 5.1.2-cti-9
char to int boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-cti-9 { char to int boundary case } {
    
    constant_expression T512cti9 {(int)'\u0100' == 0x100}

} {PASS}
Test Case: 5.1.2-ctl-1
char to long conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctl-1 { char to long conversion never loses information } {
    
    constant_expression T512ctl1 {(long)'\u789a' == 0x789aL}

} {PASS}
Test Case: 5.1.2-ctl-2
char to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctl-2 { char to long boundary case } {
    
    constant_expression T512ctl2 {(long)'\uffff' == 0xffffL}

} {PASS}
Test Case: 5.1.2-ctl-3
char to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctl-3 { char to long boundary case } {
    
    constant_expression T512ctl3 {(long)'\0' == 0L}

} {PASS}
Test Case: 5.1.2-ctl-4
char to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctl-4 { char to long boundary case } {
    
    constant_expression T512ctl4 {(long)'\u7fff' == 0x7fffL}

} {PASS}
Test Case: 5.1.2-ctl-5
char to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctl-5 { char to long boundary case } {
    
    constant_expression T512ctl5 {(long)'\u8000' == 0x8000L}

} {PASS}
Test Case: 5.1.2-ctl-6
char to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctl-6 { char to long boundary case } {
    
    constant_expression T512ctl6 {(long)'\177' == 0x7fL}

} {PASS}
Test Case: 5.1.2-ctl-7
char to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctl-7 { char to long boundary case } {
    
    constant_expression T512ctl7 {(long)'\200' == 0x80L}

} {PASS}
Test Case: 5.1.2-ctl-8
char to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctl-8 { char to long boundary case } {
    
    constant_expression T512ctl8 {(long)'\377' == 0xffL}

} {PASS}
Test Case: 5.1.2-ctl-9
char to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctl-9 { char to long boundary case } {
    
    constant_expression T512ctl9 {(int)'\u0100' == 0x100L}

} {PASS}
Test Case: 5.1.2-ctf-1
char to float conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctf-1 { char to float conversion never loses information } {
    
    constant_expression T512ctf1 {(float)'\u789a' == 30874.0f}

} {PASS}
Test Case: 5.1.2-ctf-2
char to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctf-2 { char to float boundary case } {
    
    constant_expression T512ctf2 {(float)'\uffff' == 65535.0f}

} {PASS}
Test Case: 5.1.2-ctf-3
char to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctf-3 { char to float boundary case } {
    
    constant_expression T512ctf3 {(float)'\0' == 0.0f}  {1/(float)'\0' == Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 5.1.2-ctf-4
char to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctf-4 { char to float boundary case } {
    
    constant_expression T512ctf4 {(float)'\u7fff' == 32767.0f}

} {PASS}
Test Case: 5.1.2-ctf-5
char to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctf-5 { char to float boundary case } {
    
    constant_expression T512ctf5 {(float)'\u8000' == 32768.0f}

} {PASS}
Test Case: 5.1.2-ctf-6
char to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctf-6 { char to float boundary case } {
    
    constant_expression T512ctf6 {(float)'\177' == 127.0f}

} {PASS}
Test Case: 5.1.2-ctf-7
char to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctf-7 { char to float boundary case } {
    
    constant_expression T512ctf7 {(float)'\200' == 128.0f}

} {PASS}
Test Case: 5.1.2-ctf-8
char to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctf-8 { char to float boundary case } {
    
    constant_expression T512ctf8 {(float)'\377' == 255.0f}

} {PASS}
Test Case: 5.1.2-ctf-9
char to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctf-9 { char to float boundary case } {
    
    constant_expression T512ctf9 {(float)'\u0100' == 256.0f}

} {PASS}
Test Case: 5.1.2-ctd-1
char to double conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctd-1 { char to double conversion never loses information } {
    
    constant_expression T512ctd1 {(double)'\u789a' == 30874.0}

} {PASS}
Test Case: 5.1.2-ctd-2
char to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctd-2 { char to double boundary case } {
    
    constant_expression T512ctd2 {(double)'\uffff' == 65535.0}

} {PASS}
Test Case: 5.1.2-ctd-3
char to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctd-3 { char to double boundary case } {
    
    constant_expression T512ctd3 {(double)'\0' == 0.0}  {1/(double)'\0' == Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 5.1.2-ctd-4
char to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctd-4 { char to double boundary case } {
    
    constant_expression T512ctd4 {(double)'\u7fff' == 32767.0}

} {PASS}
Test Case: 5.1.2-ctd-5
char to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctd-5 { char to double boundary case } {
    
    constant_expression T512ctd5 {(double)'\u8000' == 32768.0}

} {PASS}
Test Case: 5.1.2-ctd-6
char to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctd-6 { char to double boundary case } {
    
    constant_expression T512ctd6 {(double)'\177' == 127.0}

} {PASS}
Test Case: 5.1.2-ctd-7
char to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctd-7 { char to double boundary case } {
    
    constant_expression T512ctd7 {(double)'\200' == 128.0}

} {PASS}
Test Case: 5.1.2-ctd-8
char to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctd-8 { char to double boundary case } {
    
    constant_expression T512ctd8 {(double)'\377' == 255.0}

} {PASS}
Test Case: 5.1.2-ctd-9
char to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ctd-9 { char to double boundary case } {
    
    constant_expression T512ctd9 {(double)'\u0100' == 256.0}

} {PASS}
Test Case: 5.1.2-itl-1
int to long conversion never loses information

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itl-1 { int to long conversion never loses information } {
    
    constant_expression T512itl1 {(long)12345678 == 12345678L}

} {PASS}
Test Case: 5.1.2-itl-2
int to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itl-2 { int to long boundary case } {
    
    constant_expression T512itl2 {(long)Integer.MAX_VALUE == 0x7fffffffL}

} {PASS}
Test Case: 5.1.2-itl-3
int to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itl-3 { int to long boundary case } {
    
    constant_expression T512itl3 {(long)0 == 0L}

} {PASS}
Test Case: 5.1.2-itl-4
int to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itl-4 { int to long boundary case } {
    
    constant_expression T512itl4 {(long)Integer.MIN_VALUE == 0xffffffff80000000L}

} {PASS}
Test Case: 5.1.2-itl-5
int to long boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itl-5 { int to long boundary case } {
    
    constant_expression T512itl5 {(long)-1 == 0xffffffffffffffffL}

} {PASS}
Test Case: 5.1.2-itf-1
int to float conversion may lose precision

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itf-1 { int to float conversion may lose precision } {
    
    constant_expression T512itf1 {1.23456792e8f == (float)123456789}

} {PASS}
Test Case: 5.1.2-itf-2
int to float conversion rounds down to nearest if remainder < .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itf-2 { int to float conversion rounds down to nearest
        if remainder < .5} {
    
    constant_expression T512itf2 {(float)0x7fffff3f == (float)0x7fffff00}

} {PASS}
Test Case: 5.1.2-itf-3
int to float conversion rounds up to nearest if remainder > .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itf-3 { int to float conversion rounds up to nearest
        if remainder > .5} {
    
    constant_expression T512itf3 {(float)0x70ffffc1 == (float)0x71000000}

} {PASS}
Test Case: 5.1.2-itf-4
int to float conversion rounds to least significant bit 0 if remainder = .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itf-4 { int to float conversion rounds to least
        significant bit 0 if remainder = .5} {
    
    constant_expression T512itf4 {(float)0x7fffff40 == (float)0x7fffff00}

} {PASS}
Test Case: 5.1.2-itf-5
int to float conversion rounds to least significant bit 0 if remainder = .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itf-5 { int to float conversion rounds to least
        significant bit 0 if remainder = .5} {
    
    constant_expression T512itf5 {(float)0x70ffffc0 == (float)0x71000000}

} {PASS}
Test Case: 5.1.2-itf-6
int to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itf-6 { int to float boundary case } {
    
    constant_expression T512itf6 {(float)Integer.MAX_VALUE == 2.14748365E9f}

} {PASS}
Test Case: 5.1.2-itf-7
int to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itf-7 { int to float boundary case } {
    
    constant_expression T512itf7 {(float)0 == 0f} {1/(float)0 == Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 5.1.2-itf-8
int to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itf-8 { int to float boundary case } {
    
    constant_expression T512itf8 {(float)Integer.MIN_VALUE == -2.14748365E9f}

} {PASS}
Test Case: 5.1.2-itf-9
int to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itf-9 { int to float boundary case } {
    
    constant_expression T512itf9 {(float)-1 == -1.0f}

} {PASS}
Test Case: 5.1.2-itd-1
int to double conversion never loses precision

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itd-1 { int to double conversion never loses precision } {
    
    constant_expression T512itd1 {123456789.0 == (double)123456789}

} {PASS}
Test Case: 5.1.2-itd-2
int to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itd-2 { int to double boundary case } {
    
    constant_expression T512itd2 {(double)Integer.MAX_VALUE == 2.147483647E9}

} {PASS}
Test Case: 5.1.2-itd-3
int to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itd-3 { int to double boundary case } {
    
    constant_expression T512itd3 {(double)0 == 0.0} {1/(double)0 == Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 5.1.2-itd-4
int to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itd-4 { int to double boundary case } {
    
    constant_expression T512itd4 {(double)Integer.MIN_VALUE == -2.147483648e9}

} {PASS}
Test Case: 5.1.2-itd-5
int to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-itd-5 { int to double boundary case } {
    
    constant_expression T512itd5 {(double)-1 == -1.0}

} {PASS}
Test Case: 5.1.2-ltf-1
long to float conversion may lose precision

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltf-1 { long to float conversion may lose precision } {
    
    constant_expression T512ltf1 {1.23456792e8f == (float)123456789L}

} {PASS}
Test Case: 5.1.2-ltf-2
long to float conversion rounds down to nearest if remainder < .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltf-2 { long to float conversion rounds down to nearest
        if remainder < .5} {
    
    constant_expression T512ltf2 {(float)0x7fffff3fL == (float)0x7fffff00L}

} {PASS}
Test Case: 5.1.2-ltf-3
long to float conversion rounds up to nearest if remainder > .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltf-3 { long to float conversion rounds up to nearest if
        remainder > .5} {
    
    constant_expression T512ltf3 {(float)0x7fffffc1L == (float)0x80000000L}

} {PASS}
Test Case: 5.1.2-ltf-4
long to float conversion rounds to least significant bit 0 if remainder = .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltf-4 { long to float conversion rounds to least
        significant bit 0 if remainder = .5} {
    
    constant_expression T512ltf4 {(float)0x7fffff40L == (float)0x7fffff00L}

} {PASS}
Test Case: 5.1.2-ltf-5
long to float conversion rounds to least significant bit 0 if remainder = .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltf-5 { long to float conversion rounds to least
        significant bit 0 if remainder = .5} {
    
    constant_expression T512ltf5 {(float)0x7fffffc0L == (float)0x80000000L}

} {PASS}
Test Case: 5.1.2-ltf-6
long to float conversion rounds down to nearest if remainder < .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltf-6 { long to float conversion rounds down to
        nearest if remainder < .5} {
    
    constant_expression T512ltf6  {(float)0xffffff7ffffffbfL == (float)0xffffff000000000L}

} {PASS}
Test Case: 5.1.2-ltf-7
long to float conversion rounds down to nearest if remainder < .5. Hardware FP that rounds to 64-bit double precision before rounding to 32-bit single precision will fail for this test case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltf-7 { long to float conversion rounds down to
        nearest if remainder < .5. Hardware FP  that rounds to 64-bit
        double precision before rounding to 32-bit single precision
        will fail for this test case } {
    
    constant_expression T512ltf7  {(float)0xffffff7ffffffffL == (float)0xffffff000000000L}

} {PASS}
Test Case: 5.1.2-ltf-8
long to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltf-8 { long to float boundary case } {
    
    constant_expression T512ltf8 {(float)Long.MAX_VALUE == 9.223372e18f}

} {PASS}
Test Case: 5.1.2-ltf-9
long to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltf-9 { long to float boundary case } {
    
    constant_expression T512ltf9 {(float)0L == 0f} {1/(float)0L == Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 5.1.2-ltf-10
long to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltf-10 { long to float boundary case } {
    
    constant_expression T512ltf10 {(float)Long.MIN_VALUE == -9.223372e18f}

} {PASS}
Test Case: 5.1.2-ltf-11
long to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltf-11 { long to float boundary case } {
    
    constant_expression T512ltf11 {(float)-1L == -1.0f}

} {PASS}
Test Case: 5.1.2-ltf-12
long to float conversion rounds up to nearest if remainder > .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltf-12 { long to float conversion rounds up to nearest if
        remainder > .5} {
    
    constant_expression T512ltf12  {(float)0x100000101L == (float)0x100000200L}  {(float)0x100000101L == 4.294968e9f}

} {PASS}
Test Case: 5.1.2-ltd-1
long to double conversion may lose precision

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltd-1 { long to double conversion may lose precision } {
    
    constant_expression T512ltd1 {0x123456789abcde0L == (double)0x123456789abcde7L}

} {PASS}
Test Case: 5.1.2-ltd-2
long to double conversion rounds down to nearest if remainder < .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltd-2 { long to double conversion rounds down to nearest
        if remainder < .5} {
    
    constant_expression T512ltd2 {(double)0xffffff7ffffffbfL == 0xffffff7ffffff80L}

} {PASS}
Test Case: 5.1.2-ltd-3
long to double conversion rounds up to nearest if remainder > .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltd-3 { long to double conversion rounds up to nearest
        if remainder > .5} {
    
    constant_expression T512ltd3 {(double)0xffffff7ffffffc1L == 0xffffff800000000L}

} {PASS}
Test Case: 5.1.2-ltd-4
long to double conversion rounds to least significant bit 0 if remainder = .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltd-4 { long to double conversion rounds to least
        significant bit 0 if remainder = .5} {
    
    constant_expression T512ltd4 {(double)0xffffff7ffffff40L == 0xffffff7ffffff00L}

} {PASS}
Test Case: 5.1.2-ltd-5
long to double conversion rounds to least significant bit 0 if remainder = .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltd-5 { long to double conversion rounds to least
        significant bit 0 if remainder = .5} {
    
    constant_expression T512ltd5 {(double)0xffffff7ffffffc0L == 0xffffff800000000L}

} {PASS}
Test Case: 5.1.2-ltd-6
long to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltd-6 { long to double boundary case } {
    
    constant_expression T512ltd6  {(double)Long.MAX_VALUE == 9.223372036854776e18}

} {PASS}
Test Case: 5.1.2-ltd-7
long to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltd-7 { long to double boundary case } {
    
    constant_expression T512ltd7 {(double)0L == 0f} {1/(double)0L == Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 5.1.2-ltd-8
long to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltd-8 { long to float boundary case } {
    
    constant_expression T512ltd8  {(double)Long.MIN_VALUE == -9.223372036854776e18}

} {PASS}
Test Case: 5.1.2-ltd-9
long to float boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ltd-9 { long to float boundary case } {
    
    constant_expression T512ltd9 {(double)-1L == -1.0}

} {PASS}
Test Case: 5.1.2-ftd-1
float to double conversion never loses precision

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ftd-1 { float to double conversion never loses precision } {
    
    constant_expression T512ftd1 {(double)1234567.75f == 1234567.75}

} {PASS}
Test Case: 5.1.2-ftd-2
float to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ftd-2 { float to double boundary case } {
    
    constant_expression T512ftd2  {(double)Float.MAX_VALUE == 3.4028234663852886e38}

} {PASS}
Test Case: 5.1.2-ftd-3
float to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ftd-3 { float to double boundary case } {
    
    constant_expression T512ftd3  {(double)Float.MIN_VALUE == 1.401298464324817e-45}

} {PASS}
Test Case: 5.1.2-ftd-4
float to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ftd-4 { float to double boundary case } {
    
    constant_expression T512ftd4 {(double)0f == 0.0}  {1/(double)0f == Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 5.1.2-ftd-5
float to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ftd-5 { float to double boundary case } {
    
    constant_expression T512ftd5 {(double)-0f == -0.0}  {1/(double)-0f == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 5.1.2-ftd-6
float to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ftd-6 { float to double boundary case } {
    
    constant_expression T512ftd6  {(double)Float.POSITIVE_INFINITY == Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 5.1.2-ftd-7
float to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ftd-7 { float to double boundary case } {
    
    constant_expression T512ftd7  {(double)Float.NEGATIVE_INFINITY == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 5.1.2-ftd-8
float to double boundary case

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ftd-8 { float to double boundary case } {
    
    constant_expression T512ftd8 {(double)Float.NaN != Double.NaN}  {(double)Float.NaN != (double)Float.NaN}

} {PASS}
Test Case: 5.1.2-ftd-9
float to double on a negative

Expected Result: PASS

Regression Test:

tcltest::test 5.1.2-ftd-9 { float to double on a negative } {
    
    constant_expression T512ftd9 {(double)-12345.678f == -12345.677734375}

} {PASS}

5.1.3

Directory : tests/jls/conversions-and-promotions/kinds-of-conversion/narrowing-primitive-conversions


Test Case: 5.1.3-nan-1
narrowing from float NaN to int produces 0

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-nan-1 { narrowing from float NaN to int produces 0 } {
    
    constant_expression T513nan1 {(int) Float.NaN == 0} {(int) -Float.NaN == 0}

} {PASS}
Test Case: 5.1.3-nan-2
narrowing from double NaN to int produces 0

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-nan-2 { narrowing from double NaN to int produces 0 } {
    
    constant_expression T513nan2 {(int) Double.NaN == 0} {(int) -Double.NaN == 0}

} {PASS}
Test Case: 5.1.3-nan-3
narrowing from float NaN to long produces 0

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-nan-3 { narrowing from float NaN to long produces 0 } {
    
    constant_expression T513nan3 {(long) Float.NaN == 0L} {(long) -Float.NaN == 0L}

} {PASS}
Test Case: 5.1.3-nan-4
narrowing from double NaN to long produces 0

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-nan-4 { narrowing from double NaN to long produces 0 } {
    
    constant_expression T513nan4 {(long) Double.NaN == 0L} {(long) -Double.NaN == 0L}

} {PASS}
Test Case: 5.1.3-nan-5
narrowing from double NaN to float produces NaN

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-nan-5 { narrowing from double NaN to float produces NaN } {
    
    constant_expression T513nan5 {(float) Double.NaN != (float) Double.NaN}

} {PASS}
Test Case: 5.1.3-dtf-1
narrowing from double to float can overflow

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dtf-1 { narrowing from double to float can overflow } {
    
    constant_expression T513dtf1 {(float) 1e100 == Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 5.1.3-dtf-2
narrowing from double to float can underflow

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dtf-2 { narrowing from double to float can underflow } {
    
    constant_expression T513dtf2 {(float) 1e-100 == 0.0f}

} {PASS}
Test Case: 5.1.3-dtf-3
narrowing from double to float rounds down if remainder < .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dtf-3 { narrowing from double to float rounds down if
        remainder < .5 } {
    
    constant_expression T513dtf3 {(float)(double)0x8000ff7ffffL == (float)0x8000ff00000L}

} {PASS}
Test Case: 5.1.3-dtf-4
narrowing from double to float rounds up if remainder > .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dtf-4 { narrowing from double to float rounds up if
        remainder > .5 } {
    
    constant_expression T513dtf4 {(float)(double)0x8000ff80001L == (float)0x80010000000L}

} {PASS}
Test Case: 5.1.3-dtf-5
narrowing from double to float rounds to lsb 0 if remainder == .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dtf-5 { narrowing from double to float rounds to lsb 0 if
        remainder == .5 } {
    
    constant_expression T513dtf5 {(float)(double)0x8000ff80000L == (float)0x80010000000L}

} {PASS}
Test Case: 5.1.3-dtf-6
narrowing from double to float rounds to lsb 0 if remainder == .5

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dtf-6 { narrowing from double to float rounds to lsb 0 if
        remainder == .5 } {
    
    constant_expression T513dtf6 {(float)(double)0x8000f080000L == (float)0x8000f000000L}

} {PASS}
Test Case: 5.1.3-dtf-7
narrowing from double to denorm float rounds to nearest

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dtf-7 { narrowing from double to denorm float rounds to nearest } {
    
    constant_expression T513dtf7  {(float)5.877475257357598E-39 == 5.877475e-39f}  {(float)5.8774752573576E-39 == 5.877476e-39f}  {(float)5.87747595800683E-39 == 5.877476e-39f}  {(float)5.877476658656061E-39 == 5.877476e-39f}  {(float)5.877476658656063E-39 == 5.877477e-39f}

} {PASS}
Test Case: 5.1.3-dtl-1
narrowing from double to long truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dtl-1 { narrowing from double to long truncates } {
    
    constant_expression T513dtl1  {(long)Double.POSITIVE_INFINITY == 0x7fffffffffffffffL}  {(long)Double.NEGATIVE_INFINITY == 0x8000000000000000L}

} {PASS}
Test Case: 5.1.3-dtl-2
narrowing from double to long truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dtl-2 { narrowing from double to long truncates } {
    
    constant_expression T513dtl2 {(long)1e40 == 0x7fffffffffffffffL}  {(long)-1e40 == 0x8000000000000000L}

} {PASS}
Test Case: 5.1.3-dtl-3
narrowing from double to long truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dtl-3 { narrowing from double to long truncates } {
    
    constant_expression T513dtl3 {(long)0.0 == 0L}  {(long)-0.0 == 0L}

} {PASS}
Test Case: 5.1.3-dtl-4
narrowing from double to long truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dtl-4 { narrowing from double to long truncates } {
    
    constant_expression T513dtl4 {(long)1.999 == 1L}  {(long)-1.999 == -1L}

} {PASS}
Test Case: 5.1.3-dti-1
narrowing from double to int truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dti-1 { narrowing from double to int truncates } {
    
    constant_expression T513dti1  {(int)Double.POSITIVE_INFINITY == 0x7fffffff}  {(int)Double.NEGATIVE_INFINITY == 0x80000000}

} {PASS}
Test Case: 5.1.3-dti-2
narrowing from double to int truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dti-2 { narrowing from double to int truncates } {
    
    constant_expression T513dti2 {(int)1e40 == 0x7fffffff}  {(int)-1e40 == 0x80000000}

} {PASS}
Test Case: 5.1.3-dti-3
narrowing from double to int truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dti-3 { narrowing from double to int truncates } {
    
    constant_expression T513dti3 {(int)0.0 == 0L}  {(int)-0.0 == 0L}

} {PASS}
Test Case: 5.1.3-dti-4
narrowing from double to int truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-dti-4 { narrowing from double to int truncates } {
    
    constant_expression T513dti4 {(int)1.999 == 1L}  {(int)-1.999 == -1L}

} {PASS}
Test Case: 5.1.3-ftl-1
narrowing from float to long truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-ftl-1 { narrowing from float to long truncates } {
    
    constant_expression T513ftl1  {(long)Float.POSITIVE_INFINITY == 0x7fffffffffffffffL}  {(long)Float.NEGATIVE_INFINITY == 0x8000000000000000L}

} {PASS}
Test Case: 5.1.3-ftl-2
narrowing from float to long truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-ftl-2 { narrowing from float to long truncates } {
    
    constant_expression T513ftl2 {(long)1e30f == 0x7fffffffffffffffL}  {(long)-1e30f == 0x8000000000000000L}

} {PASS}
Test Case: 5.1.3-ftl-3
narrowing from float to long truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-ftl-3 { narrowing from float to long truncates } {
    
    constant_expression T513ftl3 {(long)0.0f == 0L}  {(long)-0.0f == 0L}

} {PASS}
Test Case: 5.1.3-ftl-4
narrowing from float to long truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-ftl-4 { narrowing from float to long truncates } {
    
    constant_expression T513ftl4 {(long)1.999f == 1L}  {(long)-1.999f == -1L}

} {PASS}
Test Case: 5.1.3-fti-1
narrowing from float to int truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-fti-1 { narrowing from float to int truncates } {
    
    constant_expression T513fti1  {(int)Float.POSITIVE_INFINITY == 0x7fffffff}  {(int)Float.NEGATIVE_INFINITY == 0x80000000}

} {PASS}
Test Case: 5.1.3-fti-2
narrowing from float to int truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-fti-2 { narrowing from float to int truncates } {
    
    constant_expression T513fti2 {(int)1e30f == 0x7fffffff}  {(int)-1e30f == 0x80000000}

} {PASS}
Test Case: 5.1.3-fti-3
narrowing from float to int truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-fti-3 { narrowing from float to int truncates } {
    
    constant_expression T513fti3 {(int)0.0f == 0}  {(int)-0.0f == 0}

} {PASS}
Test Case: 5.1.3-fti-4
narrowing from float to int truncates

Expected Result: PASS

Regression Test:

tcltest::test 5.1.3-fti-4 { narrowing from float to int truncates } {
    
    constant_expression T513fti4 {(int)1.999f == 1}  {(int)-1.999f == -1}

} {PASS}

5.2

Directory : tests/jls/conversions-and-promotions/assignment-conversion


Test Case: 5.2-byte-identity-1
Assignment contexts allow the use of an identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-byte-identity-1 { Assignment contexts allow the use
        of an identity conversion } {
    
    empty_main T52bi1 {
        byte b = (byte) 1;
    }

} {PASS}
Test Case: 5.2-byte-widening-1
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-byte-widening-1 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52bw1 {
        short s = (byte) 1;
    }

} {PASS}
Test Case: 5.2-byte-widening-2
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-byte-widening-2 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52bw2 {
        int i = (byte) 1;
    }

} {PASS}
Test Case: 5.2-byte-widening-3
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-byte-widening-3 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52bw3 {
        long l = (byte) 1;
    }

} {PASS}
Test Case: 5.2-byte-widening-4
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-byte-widening-4 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52bw4 {
        float f = (byte) 1;
    }

} {PASS}
Test Case: 5.2-byte-widening-5
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-byte-widening-5 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52bw5 {
        double d = (byte) 1;
    }

} {PASS}
Test Case: 5.2-byte-narrowing-1
Assignment conversion may narrow if a constant expression of type byte is assigned to a variable of type char

Expected Result: PASS

Regression Test:

tcltest::test 5.2-byte-narrowing-1 { Assignment conversion may narrow if
        a constant expression of type byte is assigned to a variable
        of type char } {
    
    empty_main T52bn1 {
        char c = (byte) 1;
    }

} {PASS}
Test Case: 5.2-byte-narrowing-error-1
Assignment conversion may not narrow if the expression is non-constant

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-byte-narrowing-error-1 { Assignment conversion
        may not narrow if the expression is non-constant } {
    
    empty_main T52bne1 {
        byte b = (byte) 1;
        char c = b;
    }

} {FAIL}
Test Case: 5.2-byte-narrowing-error-2
Assignment conversion may not narrow if the expression is not representable in the type of the variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-byte-narrowing-error-2 { Assignment conversion
        may not narrow if the expression is not representable in the type
        of the variable } {
    
    empty_main T52bne2 {
        char c = (byte) -1;
    }

} {FAIL}
Test Case: 5.2-short-identity-1
Assignment contexts allow the use of an identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-short-identity-1 { Assignment contexts allow the use
        of an identity conversion } {
    
    empty_main T52si1 {
        short s = (short) 1;
    }

} {PASS}
Test Case: 5.2-short-widening-1
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-short-widening-1 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52sw1 {
        int i = (short) 1;
    }

} {PASS}
Test Case: 5.2-short-widening-2
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-short-widening-2 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52sw2 {
        long l = (short) 1;
    }

} {PASS}
Test Case: 5.2-short-widening-3
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-short-widening-3 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52sw3 {
        float f = (short) 1;
    }

} {PASS}
Test Case: 5.2-short-widening-4
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-short-widening-4 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52sw4 {
        double d = (short) 1;
    }

} {PASS}
Test Case: 5.2-short-narrowing-1
Assignment conversion may narrow if a constant expression of type short is assigned to a variable of type byte

Expected Result: PASS

Regression Test:

tcltest::test 5.2-short-narrowing-1 { Assignment conversion may narrow if
        a constant expression of type short is assigned to a variable
        of type byte } {
    
    empty_main T52sn1 {
        byte b = (short) 1;
    }

} {PASS}
Test Case: 5.2-short-narrowing-2
Assignment conversion may narrow if a constant expression of type short is assigned to a variable of type char

Expected Result: PASS

Regression Test:

tcltest::test 5.2-short-narrowing-2 { Assignment conversion may narrow if
        a constant expression of type short is assigned to a variable
        of type char } {
    
    empty_main T52sn2 {
        char c = (short) 1;
    }

} {PASS}
Test Case: 5.2-short-narrowing-error-1
Assignment conversion may not narrow if the expression is non-constant

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-short-narrowing-error-1 { Assignment conversion
        may not narrow if the expression is non-constant } {
    
    empty_main T52sne1 {
        short s = (short) 1;
        char c = s;
    }

} {FAIL}
Test Case: 5.2-short-narrowing-error-2
Assignment conversion may not narrow if the expression is not representable in the type of the variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-short-narrowing-error-2 { Assignment conversion
        may not narrow if the expression is not representable in the type
        of the variable } {
    
    empty_main T52sne2 {
        char c = (short) -1;
    }

} {FAIL}
Test Case: 5.2-short-narrowing-error-3
Assignment conversion may not narrow if the expression is not representable in the type of the variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-short-narrowing-error-3 { Assignment conversion
        may not narrow if the expression is not representable in the type
        of the variable } {
    
    empty_main T52sne3 {
        byte b = (short) 128;
    }

} {FAIL}
Test Case: 5.2-char-identity-1
Assignment contexts allow the use of an identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-char-identity-1 { Assignment contexts allow the use
        of an identity conversion } {
    
    empty_main T52ci1 {
        char c = '1';
    }

} {PASS}
Test Case: 5.2-char-widening-1
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-char-widening-1 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52cw1 {
        int i = '1';
    }

} {PASS}
Test Case: 5.2-char-widening-2
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-char-widening-2 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52cw2 {
        long l = '1';
    }

} {PASS}
Test Case: 5.2-char-widening-3
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-char-widening-3 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52cw3 {
        float f = '1';
    }

} {PASS}
Test Case: 5.2-char-widening-4
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-char-widening-4 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52cw4 {
        double d = '1';
    }

} {PASS}
Test Case: 5.2-char-narrowing-1
Assignment conversion may narrow if a constant expression of type char is assigned to a variable of type byte

Expected Result: PASS

Regression Test:

tcltest::test 5.2-char-narrowing-1 { Assignment conversion may narrow if
        a constant expression of type char is assigned to a variable
        of type byte } {
    
    empty_main T52cn1 {
        byte b = '1';
    }

} {PASS}
Test Case: 5.2-char-narrowing-2
Assignment conversion may narrow if a constant expression of type char is assigned to a variable of type short

Expected Result: PASS

Regression Test:

tcltest::test 5.2-char-narrowing-2 { Assignment conversion may narrow if
        a constant expression of type char is assigned to a variable
        of type short } {
    
    empty_main T52cn2 {
        short s = '1';
    }

} {PASS}
Test Case: 5.2-char-narrowing-error-1
Assignment conversion may not narrow if the expression is non-constant

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-char-narrowing-error-1 { Assignment conversion
        may not narrow if the expression is non-constant } {
    
    empty_main T52cne1 {
        char c = '1';
        byte b = c;
    }

} {FAIL}
Test Case: 5.2-char-narrowing-error-2
Assignment conversion may not narrow if the expression is not representable in the type of the variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-char-narrowing-error-2 { Assignment conversion
        may not narrow if the expression is not representable in the type
        of the variable } {
    
    empty_main T52cne2 {
        byte b = '\u0080';
    }

} {FAIL}
Test Case: 5.2-char-narrowing-error-3
Assignment conversion may not narrow if the expression is not representable in the type of the variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-char-narrowing-error-3 { Assignment conversion
        may not narrow if the expression is not representable in the type
        of the variable } {
    
    empty_main T52cne3 {
        short s = '\u8000';
    }

} {FAIL}
Test Case: 5.2-int-identity-1
Assignment contexts allow the use of an identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-int-identity-1 { Assignment contexts allow the use
        of an identity conversion } {
    
    empty_main T52ii1 {
        int i = 1;
    }

} {PASS}
Test Case: 5.2-int-widening-1
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-int-widening-1 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52iw1 {
        long l = 1;
    }

} {PASS}
Test Case: 5.2-int-widening-2
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-int-widening-2 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52iw2 {
        float f = 1;
    }

} {PASS}
Test Case: 5.2-int-widening-3
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-int-widening-3 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52iw3 {
        double d = 1;
    }

} {PASS}
Test Case: 5.2-int-narrowing-1
Assignment conversion may narrow if a constant expression of type int is assigned to a variable of type byte

Expected Result: PASS

Regression Test:

tcltest::test 5.2-int-narrowing-1 { Assignment conversion may narrow if
        a constant expression of type int is assigned to a variable
        of type byte } {
    
    empty_main T52in1 {
        byte b = 1;
    }

} {PASS}
Test Case: 5.2-int-narrowing-2
Assignment conversion may narrow if a constant expression of type int is assigned to a variable of type short

Expected Result: PASS

Regression Test:

tcltest::test 5.2-int-narrowing-2 { Assignment conversion may narrow if
        a constant expression of type int is assigned to a variable
        of type short } {
    
    empty_main T52in2 {
        short s = 1;
    }

} {PASS}
Test Case: 5.2-int-narrowing-3
Assignment conversion may narrow if a constant expression of type int is assigned to a variable of type char

Expected Result: PASS

Regression Test:

tcltest::test 5.2-int-narrowing-3 { Assignment conversion may narrow if
        a constant expression of type int is assigned to a variable
        of type char } {
    
    empty_main T52in3 {
        char c = 1;
    }

} {PASS}
Test Case: 5.2-int-narrowing-error-1
Assignment conversion may not narrow if the expression is non-constant

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-int-narrowing-error-1 { Assignment conversion
        may not narrow if the expression is non-constant } {
    
    empty_main T52ine1 {
        int i = 1;
        byte b = i;
    }

} {FAIL}
Test Case: 5.2-int-narrowing-error-2
Assignment conversion may not narrow if the expression is not representable in the type of the variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-int-narrowing-error-2 { Assignment conversion
        may not narrow if the expression is not representable in the type
        of the variable } {
    
    empty_main T52ine2 {
        byte b = -129;
    }

} {FAIL}
Test Case: 5.2-int-narrowing-error-3
Assignment conversion may not narrow if the expression is not representable in the type of the variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-int-narrowing-error-3 { Assignment conversion
        may not narrow if the expression is not representable in the type
        of the variable } {
    
    empty_main T52ine3 {
        short s = 32768;
    }

} {FAIL}
Test Case: 5.2-int-narrowing-error-4
Assignment conversion may not narrow if the expression is not representable in the type of the variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-int-narrowing-error-4 { Assignment conversion
        may not narrow if the expression is not representable in the type
        of the variable } {
    
    empty_main T52ine4 {
        char c = -1;
    }

} {FAIL}
Test Case: 5.2-long-identity-1
Assignment contexts allow the use of an identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-long-identity-1 { Assignment contexts allow the use
        of an identity conversion } {
    
    empty_main T52li1 {
        long l = 1L;
    }

} {PASS}
Test Case: 5.2-long-widening-1
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-long-widening-1 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52lw1 {
        float f = 1L;
    }

} {PASS}
Test Case: 5.2-long-widening-2
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-long-widening-2 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52lw2 {
        double d = 1L;
    }

} {PASS}
Test Case: 5.2-long-narrowing-error-1
Assignment conversion may not narrow an expression of type long

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-long-narrowing-error-1 { Assignment conversion may
        not narrow an expression of type long } {
    
    empty_main T52lne1 {
        byte b = 1L;
    }

} {FAIL}
Test Case: 5.2-long-narrowing-error-2
Assignment conversion may not narrow an expression of type long

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-long-narrowing-error-2 { Assignment conversion may
        not narrow an expression of type long } {
    
    empty_main T52lne2 {
        short s = 1L;
    }

} {FAIL}
Test Case: 5.2-long-narrowing-error-3
Assignment conversion may not narrow an expression of type long

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-long-narrowing-error-3 { Assignment conversion may
        not narrow an expression of type long } {
    
    empty_main T52lne3 {
        char c = 1L;
    }

} {FAIL}
Test Case: 5.2-long-narrowing-error-4
Assignment conversion may not narrow an expression of type long

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-long-narrowing-error-4 { Assignment conversion may
        not narrow an expression of type long } {
    
    empty_main T52lne4 {
        int i = 1L;
    }

} {FAIL}
Test Case: 5.2-float-identity-1
Assignment contexts allow the use of an identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-float-identity-1 { Assignment contexts allow the use
        of an identity conversion } {
    
    empty_main T52fi1 {
        float f = 1.0F;
    }

} {PASS}
Test Case: 5.2-float-widening-1
Assignment contexts allow the use of a widening primitive conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-float-widening-1 { Assignment contexts allow the use
        of a widening primitive conversion } {
    
    empty_main T52fw1 {
        double d = 1.0F;
    }

} {PASS}
Test Case: 5.2-float-narrowing-error-1
Assignment conversion may not narrow an expression of type float

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-float-narrowing-error-1 { Assignment conversion may
        not narrow an expression of type float } {
    
    empty_main T52fne1 {
        byte b = 1.0F;
    }

} {FAIL}
Test Case: 5.2-float-narrowing-error-2
Assignment conversion may not narrow an expression of type float

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-float-narrowing-error-2 { Assignment conversion may
        not narrow an expression of type float } {
    
    empty_main T52fne2 {
        short s = 1.0F;
    }

} {FAIL}
Test Case: 5.2-float-narrowing-error-3
Assignment conversion may not narrow an expression of type float

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-float-narrowing-error-3 { Assignment conversion may
        not narrow an expression of type float } {
    
    empty_main T52fne3 {
        char c = 1.0F;
    }

} {FAIL}
Test Case: 5.2-float-narrowing-error-4
Assignment conversion may not narrow an expression of type float

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-float-narrowing-error-4 { Assignment conversion may
        not narrow an expression of type float } {
    
    empty_main T52fne4 {
        int i = 1.0F;
    }

} {FAIL}
Test Case: 5.2-float-narrowing-error-5
Assignment conversion may not narrow an expression of type float

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-float-narrowing-error-5 { Assignment conversion may
        not narrow an expression of type float } {
    
    empty_main T52fne5 {
        long l = 1.0F;
    }

} {FAIL}
Test Case: 5.2-double-identity-1
Assignment contexts allow the use of an identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-double-identity-1 { Assignment contexts allow the use
        of an identity conversion } {
    
    empty_main T52di1 {
        double d = 1.0D;
    }

} {PASS}
Test Case: 5.2-double-narrowing-error-1
Assignment conversion may not narrow an expression of type double

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-double-narrowing-error-1 { Assignment conversion may
        not narrow an expression of type double } {
    
    empty_main T52dne1 {
        byte b = 1.0D;
    }

} {FAIL}
Test Case: 5.2-double-narrowing-error-2
Assignment conversion may not narrow an expression of type double

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-double-narrowing-error-2 { Assignment conversion may
        not narrow an expression of type double } {
    
    empty_main T52dne2 {
        short s = 1.0D;
    }

} {FAIL}
Test Case: 5.2-double-narrowing-error-3
Assignment conversion may not narrow an expression of type double

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-double-narrowing-error-3 { Assignment conversion may
        not narrow an expression of type double } {
    
    empty_main T52dne3 {
        char c = 1.0D;
    }

} {FAIL}
Test Case: 5.2-double-narrowing-error-4
Assignment conversion may not narrow an expression of type double

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-double-narrowing-error-4 { Assignment conversion may
        not narrow an expression of type double } {
    
    empty_main T52dne4 {
        int i = 1.0D;
    }

} {FAIL}
Test Case: 5.2-double-narrowing-error-5
Assignment conversion may not narrow an expression of type double

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-double-narrowing-error-5 { Assignment conversion may
        not narrow an expression of type double } {
    
    empty_main T52dne5 {
        long l = 1.0D;
    }

} {FAIL}
Test Case: 5.2-double-narrowing-error-6
Assignment conversion may not narrow an expression of type double

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-double-narrowing-error-6 { Assignment conversion may
        not narrow an expression of type double } {
    
    empty_main T52dne6 {
        float f = 1.0D;
    }

} {FAIL}
Test Case: 5.2-boolean-identity-1
Assignment contexts allow the use of an identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-boolean-identity-1 { Assignment contexts allow the use
        of an identity conversion } {
    
    empty_main T52booli1 {
        boolean b = true;
    }

} {PASS}
Test Case: 5.2-boolean-error-1
Assignment conversion cannot assign a boolean type to another type

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-boolean-error-1 { Assignment conversion cannot
        assign a boolean type to another type } {
    
    empty_main T52boole1 {
        int i = true;
    }

} {FAIL}
Test Case: 5.2-reference-identity-1
Assignment contexts allow the use of an identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-reference-identity-1 { Assignment contexts allow the use
        of an identity conversion } {
    
    empty_main T52ri1 {
        String s = "";
    }

} {PASS}
Test Case: 5.2-reference-widening-1
Assignment contexts allow the use of a widening reference conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-reference-widening-1 { Assignment contexts allow the use
        of a widening reference conversion } {
    
    empty_main T52rw1 {
        Object o = "";
    }

} {PASS}
Test Case: 5.2-reference-widening-2
Assignment contexts allow the use of a widening reference conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-reference-widening-2 { Assignment contexts allow the use
        of a widening reference conversion } {
    
    empty_main T52rw2 {
        Object o = null;
    }

} {PASS}
Test Case: 5.2-reference-error-1
Assignment conversion cannot assign a primitive type to a reference variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-reference-error-1 { Assignment conversion cannot
        assign a primitive type to a reference variable } {
    
    empty_main T52re1 {
        Object o = 0.0D;
    }

} {FAIL}
Test Case: 5.2-reference-error-2
Assignment conversion cannot narrow

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-reference-error-2 { Assignment conversion cannot narrow } {
    
    empty_main T52re2 {
        String s = new Object();
    }

} {FAIL}
Test Case: 5.2-reference-error-3
Assignment conversion cannot assign a different type to a reference variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-reference-error-3 { Assignment conversion cannot
        assign a different type to a reference variable } {
    
    empty_main T52re3 {
        String s = new Integer();
    }

} {FAIL}
Test Case: 5.2-interface-identity-1
Assignment contexts allow the use of an identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-interface-identity-1 { Assignment contexts allow the use
        of an identity conversion } {
    
    empty_class T52ii1 {
        void foo(Cloneable c) {
            Cloneable c1 = c;
        }
    }

} {PASS}
Test Case: 5.2-interface-widening-1
Assignment contexts allow the use of a widening reference conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-interface-widening-1 { Assignment contexts allow the use
        of a widening reference conversion } {
    
    empty_class T52iw1 {
        interface I extends Cloneable {}
        void foo(I i) {
            Cloneable c = i;
        }
    }

} {PASS}
Test Case: 5.2-interface-widening-2
Assignment contexts allow the use of a widening reference conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-interface-widening-2 { Assignment contexts allow the use
        of a widening reference conversion } {
    
    empty_main T52iw2 {
        Cloneable c = null;
    }

} {PASS}
Test Case: 5.2-interface-error-1
Assignment conversion cannot assign a primitive type to a reference variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-interface-error-1 { Assignment conversion cannot
        assign a primitive type to a reference variable } {
    
    empty_main T52ie1 {
        Cloneable c = 0.0D;
    }

} {FAIL}
Test Case: 5.2-interface-error-2
Assignment conversion cannot narrow

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-interface-error-2 { Assignment conversion cannot narrow } {
    
    empty_main T52ie2 {
        Cloneable c = "";
    }

} {FAIL}
Test Case: 5.2-interface-error-3
Assignment conversion cannot assign a different type to a reference variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-interface-error-3 { Assignment conversion cannot
        assign a different type to a reference variable } {
    
    empty_main T52ie3 {
        static final class C {}
        Cloneable c = new C();
    }

} {FAIL}
Test Case: 5.2-array-identity-1
Assignment contexts allow the use of an identity conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-array-identity-1 { Assignment contexts allow the use
        of an identity conversion } {
    
    empty_class T52ai1 {
        void foo(String[] s) {
            String[] s1 = s;
        }
    }

} {PASS}
Test Case: 5.2-array-widening-1
Assignment contexts allow the use of a widening reference conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-array-widening-1 { Assignment contexts allow the use
        of a widening reference conversion } {
    
    empty_class T52aw1 {
        void foo(String[] s) {
            Object[] o = s;
        }
    }

} {PASS}
Test Case: 5.2-array-widening-2
Assignment contexts allow the use of a widening reference conversion

Expected Result: PASS

Regression Test:

tcltest::test 5.2-array-widening-2 { Assignment contexts allow the use
        of a widening reference conversion } {
    
    empty_main T52aw2 {
        Object[] o = null;
    }

} {PASS}
Test Case: 5.2-array-error-1
Assignment conversion cannot assign a primitive type to a reference variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-array-error-1 { Assignment conversion cannot
        assign a primitive type to a reference variable } {
    
    empty_main T52ae1 {
        Object[] o = 0.0D;
    }

} {FAIL}
Test Case: 5.2-array-error-2
Assignment conversion cannot narrow

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-array-error-2 { Assignment conversion cannot narrow } {
    
    empty_main T52ae2 {
        String[] s = new Object[0];
    }

} {FAIL}
Test Case: 5.2-array-error-3
Assignment conversion cannot assign a different type to a reference variable

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-array-error-3 { Assignment conversion cannot
        assign a different type to a reference variable } {
    
    empty_main T52ae3 {
        String[] s = new Integer[0];
    }

} {FAIL}
Test Case: 5.2-array-error-4
Assignment conversion cannot assign a array with a different primitive base type

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-array-error-4 { Assignment conversion cannot
        assign a array with a different primitive base type} {
    
    empty_main T52ae4 {
        int[] i = new short[0];
    }

} {FAIL}
Test Case: 5.2-array-error-5
Assignment conversion cannot assign a array with a primitive base type to an object array

Expected Result: FAIL

Regression Test:

tcltest::test 5.2-array-error-5 { Assignment conversion cannot
        assign a array with a primitive base type to an object array} {
    
    empty_main T52ae5 {
        Object[] i = new int[0];
    }

} {FAIL}

6.2

Directory : tests/jls/names/names-and-identifiers


Test Case: 6.2-identifier-1
Declarations expect an identifier, not a qualified name

Expected Result: FAIL

Regression Test:

tcltest::test 6.2-identifier-1 { Declarations expect an identifier, not a
        qualified name } {
    
    empty_class T62i1 {
        T62i1 qualified.name;
    }

} {FAIL}
Test Case: 6.2-identifier-2
Declarations expect an identifier, not a qualified name

Expected Result: FAIL

Regression Test:

tcltest::test 6.2-identifier-2 { Declarations expect an identifier, not a
        qualified name } {
    
    empty_class T62i2 {
        class Qualified.Name {}
    }

} {FAIL}
Test Case: 6.2-identifier-3
Declarations expect an identifier, not a qualified name

Expected Result: FAIL

Regression Test:

tcltest::test 6.2-identifier-3 { Declarations expect an identifier, not a
        qualified name } {
    
    empty_class T62i3 {
        interface Qualified.Name {}
    }

} {FAIL}
Test Case: 6.2-identifier-4
Declarations expect an identifier, not a qualified name

Expected Result: FAIL

Regression Test:

tcltest::test 6.2-identifier-4 { Declarations expect an identifier, not a
        qualified name } {
    
    empty_class T62i4 {
        void qualified.name() {}
    }

} {FAIL}
Test Case: 6.2-identifier-5
Declarations expect an identifier, not a qualified name

Expected Result: FAIL

Regression Test:

tcltest::test 6.2-identifier-5 { Declarations expect an identifier, not a
        qualified name } {
    
    empty_class T62i5 {
        void foo(int qualified.name) {}
    }

} {FAIL}
Test Case: 6.2-identifier-6
Declarations expect an identifier, not a qualified name

Expected Result: FAIL

Regression Test:

tcltest::test 6.2-identifier-6 { Declarations expect an identifier, not a
        qualified name } {
    
    empty_main T62i6 {
        try {
            throw new Exception();
        } catch (Exception qualified.name) {
        }
    }

} {FAIL}
Test Case: 6.2-identifier-7
Declarations expect an identifier, not a qualified name

Expected Result: FAIL

Regression Test:

tcltest::test 6.2-identifier-7 { Declarations expect an identifier, not a
        qualified name } {
    
    empty_main T62i7 {
        int qualified.name;
    }

} {FAIL}
Test Case: 6.2-identifier-8
Declarations expect an identifier, not a qualified name

Expected Result: FAIL

Regression Test:

tcltest::test 6.2-identifier-8 { Declarations expect an identifier, not a
        qualified name } {
    
    empty_main T62i8 {
        for (int qualified.name; ; );
    }

} {FAIL}
Test Case: 6.2-identifier-9
Labels expect an identifier, not a qualified name

Expected Result: FAIL

Regression Test:

tcltest::test 6.2-identifier-9 { Labels expect an identifier, not a
        qualified name } {
    
    empty_main T62i9 {
        qualified.label: toString();
    }

} {FAIL}
Test Case: 6.2-identifier-10
Labels expect an identifier, not a qualified name

Expected Result: FAIL

Regression Test:

tcltest::test 6.2-identifier-10 { Labels expect an identifier, not a
        qualified name } {
    
    empty_main T62i10 {
        qualified.label: break qualified.label;
    }

} {FAIL}
Test Case: 6.2-identifier-11
Qualified class instance creation expects an identifier, not a qualified name

Expected Result: FAIL

Regression Test:

tcltest::test 6.2-identifier-11 { Qualified class instance creation expects
        an identifier, not a qualified name } {
    
    empty_class T62i11 {
        class Inner {}
        Object o = new T62i11().new T62i11.Inner();
    }

} {FAIL}
Test Case: 6.2-example-1
First example from the specs

Expected Result: PASS

Regression Test:

tcltest::test 6.2-example-1 { First example from the specs } {
    
    compile [saveas T62e1.java {
// T62e1 is identifier
class T62e1 {
    // main, args are identifier; String is name
    public static void main(String[] args) {
        // c is identifier; Class, System.out.getClass are names
        Class c = System.out.getClass();
        // length is identifier; System.out.println, c are names
        System.out.println(c.toString().length() + 
        // first length is identifier; args, args.length are names
            args[0].length() + args.length);
    }
}
}]

} {PASS}
Test Case: 6.2-example-2
Second example from the specs: labels are independent from other uses of names

Expected Result: PASS

Regression Test:

tcltest::test 6.2-example-2 { Second example from the specs: labels are
        independent from other uses of names } {
    
    empty_class T62e2 {
        char[] value;
        int offset, count;
        int indexOf(T62e2 str, int fromIndex) {
            char[] v1 = value, v2 = str.value;
            int max = offset + (count - str.count);
            int start = offset + ((fromIndex < 0) ? 0 : fromIndex);
        i:
            for (int i = start; i <= max; i++) {
                int n = str.count, j = i, k = str.offset;
                while (n-- != 0) {
                    if (v1[j++] != v2[k++])
                        continue i;
                }
                return i - offset;
            }
            return -1;
        }
    }

} {PASS}

6.3

Directory : tests/jls/names/scope-of-a-declaration


Test Case: 6.3-1
symbol used in field initialization must be defined before it can be used

Expected Result: FAIL

Regression Test:

tcltest::test 6.3-1 { symbol used in field initialization must be defined before it can be used } {
    
    compile [saveas IllegalForwardReference.java  {
public class IllegalForwardReference {
  int a = b;
  int b = 0;
}
}]

} {FAIL}
Test Case: 6.3-2
forward reference to a field outside of an initializer is legal

Expected Result: PASS

Regression Test:

tcltest::test 6.3-2 { forward reference to a field outside of an initializer is legal } {
    
    compile [saveas LegalForwardReference.java  {
public class LegalForwardReference {
  void foo() { a = 1; }
  int a;
}
}]

} {PASS}
Test Case: 6.3-3
use of a class before it is defined is legal

Expected Result: PASS

Regression Test:

tcltest::test 6.3-3 { use of a class before it is defined is legal } {
    
    compile [saveas UseOfTypeBeforeDeclaration.java  {
public class UseOfTypeBeforeDeclaration {
  Object o = new UseOfTypeBeforeDeclaration_Type();
}

class UseOfTypeBeforeDeclaration_Type {
  Object o = new UseOfTypeBeforeDeclaration();
}
}]

} {PASS}
Test Case: 6.3-4
the scope of a class includes every known member of the package, so we should be able to make a forward ref

Expected Result: PASS

Regression Test:

tcltest::test 6.3-4 { the scope of a class includes every known member of
        the package, so we should be able to make a forward ref } {
    
    saveas GlobalOne.java  {
public class GlobalOne {
    void foo() {
	Object o = new GlobalTwo();
    }
}
}

    saveas GlobalTwo.java  {
public class GlobalTwo {
    void foo() {
	Object o = new GlobalOne();
    }
}
}

    compile GlobalOne.java GlobalTwo.java

} {PASS}

6.4.1

Directory : tests/jls/names/members-and-inheritance/members-of-a-package


Test Case: 6.4.1-class-member-1
A class declared in a package is a member of that package

Expected Result: PASS

Regression Test:

tcltest::test 6.4.1-class-member-1 { A class declared in a package
        is a member of that package } {
    

    saveas pkg/T641cm1.java {
package pkg;
public class T641cm1 {}
}

    saveas T641cm1_Test.java {
public class T641cm1_Test {
    Object o = new pkg.T641cm1();
}
}

    compile -classpath . pkg/T641cm1.java T641cm1_Test.java

} {PASS}

6.4.2

Directory : tests/jls/names/members-and-inheritance/members-of-a-class-type


Test Case: 6.4.2-1
interface member reference can not be ambiguous

Expected Result: FAIL

Regression Test:

tcltest::test 6.4.2-1 { interface member reference can not be ambiguous } {
    
    saveas AmbiguousInterfaceMember.java  {
interface One {
  int VAL = 1;
}

interface Two {
  int VAL = 2;
}

class AmbiguousInterfaceMember implements One, Two {
  int i = VAL;
}
}

    compile AmbiguousInterfaceMember.java

} {FAIL}
Test Case: 6.4.2-2
a qualified reference is not ambiguous

Expected Result: PASS

Regression Test:

tcltest::test 6.4.2-2 { a qualified reference is not ambiguous } {
    
    saveas QualifiedInterfaceMember.java  {
interface One {
  int VAL = 1;
}

interface Two {
  int VAL = 2;
}

class QualifiedInterfaceMember implements One, Two {
  int i = One.VAL;
}
}

    compile QualifiedInterfaceMember.java

} {PASS}

6.4.3

Directory : tests/jls/names/members-and-inheritance/members-of-an-interface-type


Test Case: 6.4.3-1
interface member reference can not be ambiguous

Expected Result: FAIL

Regression Test:

tcltest::test 6.4.3-1 { interface member reference can not be ambiguous } {
    
    saveas AmbiguousExtendedInterfaceMember.java  {
interface One {
  int VAL = 1;
}

interface Two {
  int VAL = 2;
}

interface AmbiguousExtendedInterfaceMember extends One, Two {
  int i = VAL;
}
}

    compile AmbiguousExtendedInterfaceMember.java

} {FAIL}
Test Case: 6.4.3-2
a qualified reference is not ambiguous

Expected Result: PASS

Regression Test:

tcltest::test 6.4.3-2 { a qualified reference is not ambiguous } {
    
    saveas QualifiedExtendedInterfaceMember.java  {
interface One {
  int VAL = 1;
}

interface Two {
  int VAL = 2;
}

interface QualifiedExtendedInterfaceMember extends One, Two {
  int i = Two.VAL;
}
}

    compile QualifiedExtendedInterfaceMember.java

} {PASS}

6.4.4

Directory : tests/jls/names/members-and-inheritance/members-of-an-array-type


Test Case: 6.4.4-1
An array object should be able to access methods defined in the java.lang.Object class

Expected Result: PASS

Regression Test:

tcltest::test 6.4.4-1 { An array object should be able to access methods
        defined in the java.lang.Object class } {
    
    compile [saveas ArrayIsObject.java  {
public class ArrayIsObject {
    public static void main(String[] args) {
        int len = args.length;
        System.out.println(len);
        Class c = args.getClass();
        System.out.println(c);
        String s = args.toString();
        System.out.println(s);
    }
}
}]

} {PASS}
Test Case: 6.4.4-2
the length member of an array is an int

Expected Result: PASS

Regression Test:

tcltest::test 6.4.4-2 { the length member of an array is an int } {
    
    compile [saveas ArrayLengthIsInt.java  {
public class ArrayLengthIsInt {
    void foo() {
        int[] foo = new int[3];
        int val = foo.length;
    }
}
}]

} {PASS}
Test Case: 6.4.4-3
compile error on attempt to change array length member

Expected Result: FAIL

Regression Test:

tcltest::test 6.4.4-3 { compile error on attempt to change array length member } {
    
    compile [saveas ArrayLengthIsFinal.java  {
public class ArrayLengthIsFinal {
    void foo() {
        int[] foo = new int[3];
        foo.length = 4;
    }
}
}]

} {FAIL}

6.5.1

Directory : tests/jls/names/meaning-of-a-name/syntactic-classification


Test Case: 6.5.1-type-1
A name in an extends clause is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-1 { A name in an extends clause is a type name, not
        an ambiguous name } {
    
    empty_class T651t1 {
        int Super;
        class Super {}
        class Sub extends Super {}
    }

} {PASS}
Test Case: 6.5.1-type-2
A name in an implements clause is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-2 { A name in an implements clause is a type name, not
        an ambiguous name } {
    
    empty_class T651t2 {
        int Super;
        interface Super {}
        class Sub implements Super {}
    }

} {PASS}
Test Case: 6.5.1-type-3
A name in an interface extends clause is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-3 { A name in an interface extends clause is a type
        name, not an ambiguous name } {
    
    empty_class T651t3 {
        int Super;
        interface Super {}
        interface Sub extends Super {}
    }

} {PASS}
Test Case: 6.5.1-type-4
A name in a field declaration is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-4 { A name in a field declaration is a type name, not
        an ambiguous name } {
    
    empty_class T651t4 {
        int T651t4;
        T651t4 t;
    }

} {PASS}
Test Case: 6.5.1-type-5
A name in the result type of a method is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-5 { A name in the result type of a method is a type
        name, not an ambiguous name } {
    
    empty_class T651t5 {
        int T651t5;
        T651t5 m() { return null; }
    }

} {PASS}
Test Case: 6.5.1-type-6
A name in a formal parameter is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-6 { A name in a formal parameter is a type name, not
        an ambiguous name } {
    
    empty_class T651t6 {
        int T651t6;
        void m(T651t6 T651t6) {}
    }

} {PASS}
Test Case: 6.5.1-type-7
A name in a throws clause is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-7 { A name in a throws clause is a type name, not
        an ambiguous name } {
    
    empty_class T651t7 {
        int Type;
        class Type extends Exception {}
        void m() throws Type {}
    }

} {PASS}
Test Case: 6.5.1-type-8
A name in the type of a local variable is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-8 { A name in the type of a local variable is a type
name, not an ambiguous name } {
    
    empty_main T651t8 {
        int T651t8;
        T651t8 t;
    }

} {PASS}
Test Case: 6.5.1-type-9
A name in an exception parameter is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-9 { A name in an exception parameter is a type name,
        not an ambiguous name } {
    
    empty_main T651t9 {
        int Type;
        class Type extends Exception {}
        try {
            throw new Type();
        } catch (Type t) {
        }
    }

} {PASS}
Test Case: 6.5.1-type-10
A name in a class literal is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-10 { A name in a class literal is a type name, not
        an ambiguous name } {
    
    empty_main T651t10 {
        int T651t10;
        T651t10.class.toString();
    }

} {PASS}
Test Case: 6.5.1-type-11
A name qualifying a this expression is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-11 { A name qualifying a this expression is a type
        name, not an ambiguous name } {
    
    empty_class T651t11 {
        void foo() {
            int T651t11;
            T651t11.this.toString();
        }
    }

} {PASS}
Test Case: 6.5.1-type-12
A name in an unqualified class instance creation expression is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-12 { A name in an unqualified class instance creation
        expression is a type name, not an ambiguous name } {
    
    empty_main T651t12 {
        int T651t12;
        new T651t12();
    }

} {PASS}
Test Case: 6.5.1-type-13
A name in an unqualified anonymous class instance creation expression is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-13 { A name in an unqualified anonymous class instance
        creation expression is a type name, not an ambiguous name } {
    
    empty_main T651t13 {
        int T651t13;
        new T651t13() {};
    }

} {PASS}
Test Case: 6.5.1-type-14
A name as the element type of an array creation expression is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-14 { A name as the element type of an array creation
        expression is a type name, not an ambiguous name } {
    
    empty_main T651t14 {
        int T651t14;
        Object o = new T651t14[1];
    }

} {PASS}
Test Case: 6.5.1-type-15
A name qualifying a super field access is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-15 { A name qualifying a super field access is a
        type name, not an ambiguous name } {
    
    empty_class T651t15 {
        class Super {
            int i;
        }
        class Sub extends Super {
            int Sub;
            int j = Sub.super.i;
        }
    }

} {PASS}
Test Case: 6.5.1-type-16
A name qualifying a super method access is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-16 { A name qualifying a super method access is a
        type name, not an ambiguous name } {
    
    empty_class T651t16 {
        void foo() {
            int T651t16;
            T651t16.super.toString();
        }
    }

} {PASS}
Test Case: 6.5.1-type-17
A name in a cast operator is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-17 { A name in a cast operator is a type name, not
        an ambiguous name } {
    
    empty_class T651t17 {
        int T651t17;
        void foo(Object o) {
            ((T651t17) o).toString();
        }
    }

} {PASS}
Test Case: 6.5.1-type-18
A name following the instanceof operator is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-18 { A name following the instanceof operator is a
        type name, not an ambiguous name } {
    
    empty_class T651t18 {
        int T651t18;
        void foo(Object o) {
            boolean b = o instanceof T651t18;
        }
    }

} {PASS}
Test Case: 6.5.1-type-19
A name in a single type import is a type name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-type-19 { A name in a single type import is a type name,
        not an ambiguous name } {
    
    compile [saveas p1/T651t19a.java {
package p1;
public class T651t19a {
    public int C;
    public int C() { return 0; }
    public static class C {}
}
    }] [saveas T651t19b.java {
import p1.T651t19a.C;
class T651t19b extends C {}
    }]

} {PASS}
Test Case: 6.5.1-typeorpackage-1
A typename qualifier is a typeorpackage name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-typeorpackage-1 { A typename qualifier is a typeorpackage
        name, not an ambiguous name } {
    
    compile [saveas T651tp1a.java {
class T651tp1a {
    int C;
    int C() { return 0; }
    static class C {
	static class Inner {}
    }
}
// T651tp1a.C is a typeorpackage, which gets resolved to a type; and not an int
class T651tp1b extends T651tp1a.C.Inner {}
    }]

} {PASS}
Test Case: 6.5.1-typeorpackage-2
An import-on-demand name is a typeorpackage name, not an ambiguous name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.1-typeorpackage-2 { An import-on-demand name is a
        typeorpackage name, not an ambiguous name } {
    
    compile [saveas p1/T651tp2a.java {
package p1;
public class T651tp2a {
    public int C;
    public int C() { return 0; }
    public static class C {
	public static class Inner {}
    }
}
    }] [saveas T651tp2b.java {
// p1.T651tp2a.C is a typeorpackage, which gets resolved to a type
import p1.T651tp2a.C.*;
class T651tp1b extends Inner {}
    }]

} {PASS}

6.5.2

Directory : tests/jls/names/meaning-of-a-name/reclassification


Test Case: 6.5.2-simple-1
A simple ambiguous name is reclassified as an expression name if it appears in the scope of any variable

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-simple-1 { A simple ambiguous name is reclassified as
        an expression name if it appears in the scope of any variable } {
    
    empty_class T652s1 {
        T652s1 t, u;
        static class t {
            static int u;
        }
        void foo() { // t refers to the field, not the class, thus t.u
            t.u = null; // is an Object, not an int
        }
    }

} {PASS}
Test Case: 6.5.2-simple-2
A simple ambiguous name is reclassified as an expression name if it appears in the scope of any variable

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-simple-2 { A simple ambiguous name is reclassified as
        an expression name if it appears in the scope of any variable } {
    
    empty_class T652s2 {
        static class Super {
            Super t, u;
        }
        static class Sub extends Super {
            static class t {
                static int u;
            }
            void foo() { // t refers to the inherited field, not the locally
                t.u = null; // declared class, thus t.u is an Object
            }
        }
    }

} {PASS}
Test Case: 6.5.2-simple-3
A simple ambiguous name is reclassified as a type name if it appears in the scope of any type, but no variable

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-simple-3 { A simple ambiguous name is reclassified as
        a type name if it appears in the scope of any type, but no variable } {
    
    compile [saveas p1/T652s3a.java {
package p1;
public class T652s3a {}
}] [saveas T652s3b.java {
    class T652s3b {
        static class p1 {
            static int T652s3a;
        }
        void foo() {
            // Even though p1.T652s3a is also a type, this is resolved to
            // the int T652s3b.p1.T652s3a.
            p1.T652s3a++;
        }
    }
}]

} {PASS}
Test Case: 6.5.2-simple-4
A simple ambiguous name is reclassified as a type name if it appears in the scope of any type, but no variable

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-simple-4 { A simple ambiguous name is reclassified as
        a type name if it appears in the scope of any type, but no variable } {
    
    compile [saveas p1/T652s4a.java {
package p1;
public class T652s4a {}
}] [saveas p2/T652s4b.java {
package p2;
public class T652s4b {
    public static class p1 {
        public static int T652s4a;
    }
}
}] [saveas T652s4c.java {
    class T652s4c extends p2.T652s4b {
        void foo() {
            // Even though p1.T652s4a is also a type, this is resolved to
            // the inherited int T652s4b.p1.T652s4a.
            p1.T652s4a++;
        }
    }
}]

} {PASS}
Test Case: 6.5.2-simple-5
A simple ambiguous name is reclassified as a package name if it is not in the scope of a variable or type; an error will eventually occur if the package is not observable

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.2-simple-5 { A simple ambiguous name is reclassified as
        a package name if it is not in the scope of a variable or type;
        an error will eventually occur if the package is not observable } {
    
    empty_class T652s5 {
        Object foo() { return null; }
        void bar() {
            foo.toString(); // there is no package foo
        }
    }

} {FAIL}
Test Case: 6.5.2-simple-6
A simple ambiguous name is reclassified as a package name if it is not in the scope of a variable or type; an error will eventually occur if the package is not observable

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.2-simple-6 { A simple ambiguous name is reclassified as
        a package name if it is not in the scope of a variable or type;
        an error will eventually occur if the package is not observable } {
    
    empty_class T652s6 {
        T652s6 foo() { return null; }
        int i;
        void bar() {
            foo.i++; // there is no package foo
        }
    }

} {FAIL}
Test Case: 6.5.2-qualified-1
If the qualifier of an ambiguous name is reclassified as a package name, the full name is reclassified as a type name if the package exists and has a type by that name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-qualified-1 { If the qualifier of an ambiguous name is
        reclassified as a package name, the full name is reclassified as
        a type name if the package exists and has a type by that name } {
    
    compile [saveas p1/T652q1.java {
package p1;
class T652q1 {
    static int i;
    void foo() {
        p1.T652q1.i++; // T652q1 is a type in package p1
    }
}
}]

} {PASS}
Test Case: 6.5.2-qualified-2
If the qualifier of an ambiguous name is reclassified as a package name, the full name is reclassified as a package name if the package exists but has no type by that name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-qualified-2 { If the qualifier of an ambiguous name is
        reclassified as a package name, the full name is reclassified as
        a package name if the package exists but has no type by that name } {
    
    empty_class T652q2 {
        // java is a package, but does not contain a type lang, so
        // java.lang is classified as a PackageName
        String s = java.lang.String.valueOf(1);
    }

} {PASS}
Test Case: 6.5.2-qualified-3
If the qualifier of an ambiguous name is reclassified as a package name, the full name is reclassified as a package name if the package exists but has no type by that name; an error will eventually occur if the subpackage is not observable

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.2-qualified-3 { If the qualifier of an ambiguous name is
        reclassified as a package name, the full name is reclassified as
        a package name if the package exists but has no type by that name;
        an error will eventually occur if the subpackage is not observable } {
    
    compile [saveas p1/T652q3.java {
package p1;
class T652q3 {
    // p1.foo is classified as a PackageName, but p1 has no subpackage foo
    Object o = p1.foo.bar();
}
}]

} {FAIL}
Test Case: 6.5.2-qualified-4
If the qualifier of an ambiguous name is reclassified as a package name but the package is not observable, the full name is reclassified as a package name and an error will eventually occur

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.2-qualified-4 { If the qualifier of an ambiguous name is
        reclassified as a package name but the package is not observable, the
        full name is reclassified as a package name and an error will
        eventually occur } {
    
    empty_class T652q4 {
        static T652q4 foo() { return null; }
        Object o;
        void bar() {
            // foo.o is classified as a PackageName, even though there is
            // no package foo (let alone foo.o)
            foo.o.toString();
        }
    }

} {FAIL}
Test Case: 6.5.2-qualified-5
If the qualifier of an ambiguous name is reclassified as a type name, the full name is reclassified as an expression name if the type contains a field by that name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-qualified-5 { If the qualifier of an ambiguous name is
        reclassified as a type name, the full name is reclassified as
        an expression name if the type contains a field by that name } {
    
    empty_class T652q5 {
        static T652q5 t, u;
        static class t {
            static int u;
        }
        void foo() { // t refers to the field, not the class, thus T652q5.t.u
            T652q5.t.u = null; // is an Object, not an int
        }
    }

} {PASS}
Test Case: 6.5.2-qualified-6
If the qualifier of an ambiguous name is reclassified as a type name, the full name is reclassified as an expression name if the type contains a field by that name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-qualified-6 { If the qualifier of an ambiguous name is
        reclassified as a type name, the full name is reclassified as
        an expression name if the type contains a field by that name } {
    
    empty_class T652q6 {
        static class Super {
            static Super t, u;
        }
        static class Sub extends Super {
            static class t {
                static int u;
            }
            void foo() { // t refers to the inherited field, not the locally
                Sub.t.u = null; // declared class, thus Sub.t.u is an Object
            }
        }
    }

} {PASS}
Test Case: 6.5.2-qualified-7
If the qualifier of an ambiguous name is reclassified as a type name, the full name is reclassified as a type name if there is a member type but no field in scope

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-qualified-7 { If the qualifier of an ambiguous name is
        reclassified as a type name, the full name is reclassified as
        a type name if there is a member type but no field in scope } {
    
    empty_class T652q7 {
        static class t {
            static int i;
        }
        int j = T652q7.t.i; // T652q7.t is a type name
    }

} {PASS}
Test Case: 6.5.2-qualified-8
If the qualifier of an ambiguous name is reclassified as a type name, the full name is reclassified as a type name if there is a member type but no field in scope

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-qualified-8 { If the qualifier of an ambiguous name is
        reclassified as a type name, the full name is reclassified as
        a type name if there is a member type but no field in scope } {
    
    empty_class T652q8 {
        static class Super {
            static class t {
                static int i;
            }
        }
        class Sub extends Super {
            int j = Sub.t.i; // Sub.t is a type name since class t is inherited
        }
    }

} {PASS}
Test Case: 6.5.2-qualified-9
If the qualifier of an ambiguous name is reclassified as a type name, it is an error if the type contains no field or member type of that name

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.2-qualified-9 { If the qualifier of an ambiguous name is
        reclassified as a type name, it is an error if the type contains no
        field or member type of that name } {
    
    empty_class T652q9 {
        static T652q9 t() { return null; }
        // T652q9 has neither a field nor member class named t
        int i;
        int j = T652q9.t.i;
    }

} {FAIL}
Test Case: 6.5.2-qualified-10
If the qualifier of an ambiguous name is reclassified as an expression name, the full name is reclassified as an expression name it the type of the qualifier contains a field by that name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-qualified-10 { If the qualifier of an ambiguous name is
        reclassified as an expression name, the full name is reclassified as
        an expression name it the type of the qualifier contains a field
        by that name } {
    
    empty_class T652q10 {
        T652q10 u;
        int i;
        void foo(T652q10 t) {
            t.u.i++; // u is a field of type T652q10, so t.u is an expression
        }
    }

} {PASS}
Test Case: 6.5.2-qualified-11
If the qualifier of an ambiguous name is reclassified as an expression name, the full name is reclassified as an expression name it the type of the qualifier contains a field by that name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-qualified-11 { If the qualifier of an ambiguous name is
        reclassified as an expression name, the full name is reclassified as
        an expression name it the type of the qualifier contains a field
        by that name } {
    
    empty_class T652q11 {
        static class Super {
            Super sup;
        }
        static class Sub extends Super {
            void bar(Sub s) {
                // sup is an inherited field in type Sub, so s.sup is an
                s.sup.toString(); // expression name
            }
        }
    }

} {PASS}
Test Case: 6.5.2-qualified-12
If the qualifier of an ambiguous name is reclassified as an expression name, it is an error if the type of the qualifier does not contain a field by that name (in other words, an expression cannot qualify a member type)

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.2-qualified-12 { If the qualifier of an ambiguous name is
        reclassified as an expression name, it is an error if the type of
        the qualifier does not contain a field by that name (in other words,
        an expression cannot qualify a member type) } {
    
    empty_class T652q12 {
        static class Member {
            static int i;
        }
        T652q12 t;
        // the type T652q12 does not contain a field named Member
        int i = t.Member.i;
    }

} {FAIL}
Test Case: 6.5.2-example-1
Example of ambiguous name resolution

Expected Result: PASS

Regression Test:

tcltest::test 6.5.2-example-1 { Example of ambiguous name resolution } {
    
    saveas org/rpgpoet/Music.java {
package org.rpgpoet;
import java.util.Random;
public interface Music { Random[] wizards = new Random[4]; }
}
    saveas org/dummy.txt "Here for cleanup purposes"
    saveas bazola/Gabriel.java {
package bazola;
class Gabriel {
    static int n = org.rpgpoet.Music.wizards.length;
    // org is classified as a package name
    // org.rpgpoet is classified as a package name
    // org.rpgpoet.Music is classified as a type name
    // org.rpgpoet.Music.wizards is classified as an expression name
}
}
    compile org/rpgpoet/Music.java bazola/Gabriel.java

} {PASS}

6.5.3.1

Directory : tests/jls/names/meaning-of-a-name/package-names/simple


Test Case: 6.5.3.1-simple-1
It is an error if there is no top-level package with the given simple package name

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.3.1-simple-1 { It is an error if there is no top-level
        package with the given simple package name } {
    
    empty_main T6531s1 {
        badpackage.Type.i++; // badpackage was reclassified from ambiguous
    }

} {FAIL}
Test Case: 6.5.3.1-simple-2
A simple package name denotes the top-level package which is in scope

Expected Result: PASS

Regression Test:

tcltest::test 6.5.3.1-simple-2 { A simple package name denotes the top-level
        package which is in scope } {
    
    compile [saveas p1/T6531s2.java {
package p1;
class T6531s2 {
    static int i;
    void foo() {
        p1.T6531s2.i++; // p1 was reclassified from ambiguous
    }
}
}]

} {PASS}

6.5.3.2

Directory : tests/jls/names/meaning-of-a-name/package-names/qualified


Test Case: 6.5.3.2-qualified-1
It is an error if there is not a member subpackage with the given qualified package name

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.3.2-qualified-1 { It is an error if there is not a member
        subpackage with the given qualified package name } {
    
    compile [saveas p1/T6532s1.java {
package p1;
class T6532s1 {
    void foo() {
        p1.badsub.Type.i++; // p1.badsub was reclassified from ambiguous
    }
}
}]

} {FAIL}
Test Case: 6.5.3.2-qualified-2
It is an error if the qualifier of a package name is not an observable package

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.3.2-qualified-2 { It is an error if the qualifier of a
        package name is not an observable package } {
    
    empty_main T6532q2 {
        // badpackage.badsub was reclassified from ambiguous
        badpackage.badsub.Type.i++;
    }

} {FAIL}
Test Case: 6.5.3.2-qualified-3
A qualified package name denotes the member subpackage of the qualifying package

Expected Result: PASS

Regression Test:

tcltest::test 6.5.3.2-qualified-3 { A qualified package name denotes the member
        subpackage of the qualifying package } {
    
    compile [saveas p1/sub/T6532q3a.java {
package p1.sub;
public class T6532q3a {
    public static int i;
}
}] [saveas p1/T6532q3b.java {
package p1;
class T6532q3b {
    int j = p1.sub.T6532q3a.i; // p1.sub was reclassified from ambiguous
}
}]

} {PASS}

6.5.4.1

Directory : tests/jls/names/meaning-of-a-name/packageortypenames/simple


Test Case: 6.5.4.1-simple-1
If a simple package-or-type name is in the scope of a type, it is reclassified as a type name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.4.1-simple-1 { If a simple package-or-type name is in the
        scope of a type, it is reclassified as a type name } {
    
    compile [saveas p1/T6541s1a.java {
package p1;
public class T6541s1a {}
    }] [saveas T6541s1b.java {
class T6541s1b {
    static class p1 {
        interface T6541s1a {}
    }
    // p1 is a type, not a package, so p1.T6541s1a is an interface, not a class
    class Sub implements p1.T6541s1a {}
}
    }]

} {PASS}
Test Case: 6.5.4.1-simple-2
If a simple package-or-type name is in the scope of a type, it is reclassified as a type name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.4.1-simple-2 { If a simple package-or-type name is in the
        scope of a type, it is reclassified as a type name } {
    
    compile [saveas p1/T6541s2a.java {
package p1;
public class T6541s2a {}
    }] [saveas p2/T6541s2b.java {
package p2;
public class T6541s2b {
    public static class p1 {
        public interface T6541s2a {}
    }
}
    }] [saveas T6541s2c.java {
class T6541s1c extends p2.T6541s2b {
    // p1 is an inherited type, not a package, so p1.T6541s2a is an
    class Sub implements p1.T6541s2a {} // interface, not a class
}
    }]

} {PASS}
Test Case: 6.5.4.1-simple-3
If a simple package-or-type name is in the scope of a type, it is reclassified as a type name

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.4.1-simple-3 { If a simple package-or-type name is in the
        scope of a type, it is reclassified as a type name } {
    
    compile [saveas T6541s3.java {
// no types are in scope during an import statement, and there is no
import T6541s3.*; // package by this name
class T6541s3 {
    class Inner {}
}
    }]

} {FAIL}
Test Case: 6.5.4.1-simple-4
If a simple package-or-type name is not in the scope of a type, it is reclassified as a package name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.4.1-simple-4 { If a simple package-or-type name is not in
        the scope of a type, it is reclassified as a package name } {
    
    compile [saveas p1/T6541s4a.java {
package p1;
class T6541s4a {}
class T6541s4b extends p1.T6541s4a {}
    }]

} {PASS}
Test Case: 6.5.4.1-simple-5
If a simple package-or-type name is not in the scope of a type, it is reclassified as a package name; an error will eventually occur if the package is not observable

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.4.1-simple-5 { If a simple package-or-type name is not in
        the scope of a type, it is reclassified as a package name; an error
        will eventually occur if the package is not observable } {
    
    compile [saveas T6541s5.java {
// badpackage is reclassified as a package, but it does not exist
class T6541s5 extends badpackage.Type {}
    }]

} {FAIL}
Test Case: 6.5.4.1-simple-6
If a simple package-or-type name is not in the scope of a type, it is reclassified as a package name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.4.1-simple-6 { If a simple package-or-type name is not in
the scope of a type, it is reclassified as a package name } {
    
    compile [saveas p1/T6541s6a.java {
package p1;
public class T6541s6a {
    public static class p2 {
        public class T6541s6b {}
    }
}
    }] [saveas p2/T6541s6b.java {
package p2;
public interface T6541s6b {}
    }] [saveas T6541s6c.java {
// the inherited class p2 is not in scope until the body of class T6541s6c,
// so p2 refers to the package, and p2.T6541s6b is an interface, not a class
class T6541s6c extends p1.T6541s6a implements p2.T6541s6b {}
    }]

} {PASS}
Test Case: 6.5.4.1-simple-7
If a simple package-or-type name is not in the scope of a type, it is reclassified as a package name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.4.1-simple-7 { If a simple package-or-type name is not in
the scope of a type, it is reclassified as a package name } {
    
    compile [saveas p1/T6541s7a.java {
package p1;
public interface T6541s7a {
    public class p2 {
        public interface T6541s7b {}
    }
}
    }] [saveas p2/T6541s7b.java {
package p2;
public class T6541s7b {}
    }] [saveas T6541s7c.java {
// the inherited interface p2 is not in scope until the body of class T6541s7c,
// so p2 refers to the package, and p2.T6541s7b is a class, not an interface
class T6541s7c extends p2.T6541s7b implements p1.T6541s7a {}
    }]

} {PASS}
Test Case: 6.5.4.1-simple-8
If a simple package-or-type name is not in the scope of a type, it is reclassified as a package name

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.4.1-simple-8 { If a simple package-or-type name is not in
        the scope of a type, it is reclassified as a package name } {
    
    compile [saveas p1/T6541s8a.java {
package p1;
public class T6541s8a {
    class p1 {}
}
class T6541s8c extends p2.T6541s8b {
    // class p1 was not inherited, although it is accessible
    // p1 resolves to a package
    p1 p;
}
    }] [saveas p2/T6541s8b.java {
package p2;
public class T6541s8b extends p1.T6541s8a {}
    }]

} {FAIL}
Test Case: 6.5.4.1-simple-9
If a simple package-or-type name is not in the scope of a type, it is reclassified as a package name

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.4.1-simple-9 { If a simple package-or-type name is not in
        the scope of a type, it is reclassified as a package name } {
    
    compile [saveas p1/T6541s9a.java {
package p1;
public class T6541s9a {
    public class p1 {}
}
class T6541s9c extends p2.T6541s9b {
    // class a.p1 was not inherited, although it is accessible
    // p1 resolves to a package
    p1 p;
}
    }] [saveas p2/T6541s9b.java {
package p2;
public class T6541s8b extends p1.T6541s8a {
    private class p1 {} // hides a.p1
}
    }]

} {FAIL}
Test Case: 6.5.4.1-simple-10
If a simple package-or-type name is not in the scope of a type, it is reclassified as a package name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.4.1-simple-10 { If a simple package-or-type name is not in
        the scope of a type, it is reclassified as a package name } {
    
    compile [saveas p1/T6541s10a.java {
package p1;
public class T6541s10a {
    class p1 {}
}
class T6541s10c extends p2.T6541s10b {
    // class p1 was not inherited, although it is accessible
    // p1 resolves to a package
    p1.T6541s10c p;
}
    }] [saveas p2/T6541s10b.java {
package p2;
public class T6541s10b extends p1.T6541s10a {}
    }]

} {PASS}
Test Case: 6.5.4.1-simple-11
If a simple package-or-type name is not in the scope of a type, it is reclassified as a package name

Expected Result: PASS

Regression Test:

tcltest::test 6.5.4.1-simple-11 { If a simple package-or-type name is not in
        the scope of a type, it is reclassified as a package name } {
    
    compile [saveas p1/T6541s11a.java {
package p1;
public class T6541s11a {
    public class p1 {}
}
class T6541s11c extends p2.T6541s11b {
    // class a.p1 was not inherited, although it is accessible
    // p1 resolves to a package
    p1.T6541s11c p;
}
    }] [saveas p2/T6541s11b.java {
package p2;
public class T6541s11b extends p1.T6541s11a {
    private class p1 {} // hides a.p1
}
    }]

} {PASS}

6.5.4.2

Directory : tests/jls/names/meaning-of-a-name/packageortypenames/qualified


Test Case: 6.5.4.2-qualified-1
A package-or-type name is reclassified as a type name if the qualifier package name contains that member type

Expected Result: PASS

Regression Test:

tcltest::test 6.5.4.2-qualified-1 { A package-or-type name is reclassified as
        a type name if the qualifier package name contains that member type } {
    
    compile [saveas p1/T6542q1a.java {
package p1;
public class T6542q1a {
    public static class Inner {}
}
}] [saveas T6542q1b.java {
class T6542q1b extends p1.T6542q1a.Inner {}
}]

} {PASS}
Test Case: 6.5.4.2-qualified-2
A package-or-type name is reclassified as a type name if the qualifier type name contains that member type

Expected Result: PASS

Regression Test:

tcltest::test 6.5.4.2-qualified-2 { A package-or-type name is reclassified as
        a type name if the qualifier type name contains that member type } {
    
    empty_class T6542q2 {
        class Middle {
            class Inner {}
        }
        T6542q2.Middle.Inner t;
    }

} {PASS}
Test Case: 6.5.4.2-qualified-3
It is an error if the qualifier type name of a package-or-type name does not contain the named member type

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.4.2-qualified-3 { It is an error if the qualifier type name
        of a package-or-type name does not contain the named member type } {
    
    empty_class T6542q3 {
        // T6542q3.Middle is not interpreted as a package name, since T6542q3
        // is not a package name; but it is still an error
        T6542q3.Middle.Inner t;
    }

} {FAIL}
Test Case: 6.5.4.2-qualified-4
A package-or-type name is reclassified as a package name if the qualifier package name does not contain that member type

Expected Result: PASS

Regression Test:

tcltest::test 6.5.4.2-qualified-4 { A package-or-type name is reclassified as
        a package name if the qualifier package name does not contain that
        member type } {
    
    compile [saveas p1/sub/T6542q4a.java {
package p1.sub;
public class T6542q4a {}
}] [saveas p1/T6542q4b.java {
package p1;
class T6542q4b {
    // p1.sub is classified as a package name
    p1.sub.T6542q4a t;
}
}]

} {PASS}
Test Case: 6.5.4.2-qualified-5
A package-or-type name is reclassified as a package name if the qualifier package name does not contain that member type; an error will eventually occur if the qualifier package is not observable

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.4.2-qualified-5 { A package-or-type name is reclassified as
        a package name if the qualifier package name does not contain that
        member type; an error will eventually occur if the qualifier package
        is not observable } {
    
    empty_class T6542q5 {
        badpackage.badsub.Type t;
    }

} {FAIL}
Test Case: 6.5.4.2-qualified-6
A package-or-type name is reclassified as a package name if the qualifier package name does not contain that member type; an error will eventually occur if the qualifier package does not contain the member subpackage

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.4.2-qualified-6 { A package-or-type name is reclassified as
        a package name if the qualifier package name does not contain that
        member type; an error will eventually occur if the qualifier package
        does not contain the member subpackage } {
    
    compile [saveas p1/T6542q6.java {
package p1;
class T6542q6 {
    p1.badsub.Type t;
}
}]

} {FAIL}

6.5.5.1

Directory : tests/jls/names/meaning-of-a-name/type-names/simple


Test Case: 6.5.5.1-nested-1
A simple type name must occur in the scope of a type by that name

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.1-nested-1 { A simple type name must occur in the scope
of a type by that name } {
    
    empty_class T6551n1 {
        NoSuchType t;
    }

} {FAIL}
Test Case: 6.5.5.1-nested-2
A simple type name favors a visible local class declaration over member types

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-nested-2 { A simple type name favors a visible local
        class declaration over member types } {
    
    empty_class T6551n2 {
        interface C {}
        void foo() {
            class C {}
            // C refers to the local class, not member interface
            class Sub extends C {}
        }
    }

} {PASS}
Test Case: 6.5.5.1-nested-3
A simple type name favors a visible local class declaration over member types

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-nested-3 { A simple type name favors a visible local
        class declaration over member types } {
    
    empty_main T6551n3 {
        class C { // local
            static final int i = 1;
        }
        new Object() {
            class C { // member
                static final int i = 2;
            }
            void foo(int j) {
                switch (j) {
                    case 0:
                    case 1:
                    // C refers to the member class, since the local is
                    // shadowed, hence C.i is 2
                    case C.i:
                }
            }
        };
    }

} {PASS}
Test Case: 6.5.5.1-nested-4
A simple type name favors a visible local class declaration over member types

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-nested-4 { A simple type name favors a visible local
        class declaration over member types } {
    
    empty_class T6551n4 {
        static class Super {
            interface C {} // member
        }
        void foo() {
            class C {} // local
            new Super() {
                // C refers to the inherited member class, since the
                // local is shadowed, hence C is an interface
                class Sub implements C {}
            };
        }
    }

} {PASS}
Test Case: 6.5.5.1-nested-5
A simple type name favors a visible local class declaration over member types

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-nested-5 { A simple type name favors a visible local
        class declaration over member types } {
    
    empty_main T6551n5 {
        class C {
            static final int i = 1;
        }
        new Object() {
            void foo(int j) {
                class C {
                    static final int i = 2;
                }
                switch (j) {
                    case 0:
                    case 1:
                    // C refers to the innermost local class, since it shadows
                    // the other version, hence C.i is 2
                    case C.i:
                }
            }
        };
    }

} {PASS}
Test Case: 6.5.5.1-nested-6
A simple type name must not have ambiguity in referring to visible member types

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-nested-6 { A simple type name must not have ambiguity in
       referring to visible member types } {
    
    empty_class T6551n6 {
        interface C {}
        void foo() {
            new Object() {
                class C {}
                // C refers to the innermost class C, not the outer interface
                class Sub extends C {}
            };
        }
    }

} {PASS}
Test Case: 6.5.5.1-nested-7
A simple type name must not have ambiguity in referring to visible member types

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-nested-7 { A simple type name must not have ambiguity in
       referring to visible member types } {
    
    empty_class T6551n7 {
        interface C {}
        static class Super {
            class C {}
        }
        void foo() {
            new Super() {
                // C refers to the inherited class Super.C, not the shadowed
                // interface T6551n7.C
                class Sub extends C {}
            };
        }
    }

} {PASS}
Test Case: 6.5.5.1-nested-8
A simple type name must not have ambiguity in referring to visible member types

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.1-nested-8 { A simple type name must not have ambiguity in
       referring to visible member types } {
    
    empty_class T6551n8 {
        interface I {
            class C {}
        }
        class Super {
            class C {}
        }
        class Sub extends Super implements I {
            C c; // C is ambiguous between I.C, Super.C
        }
    }

} {FAIL}
Test Case: 6.5.5.1-nested-9
A simple type name must not have ambiguity in referring to visible member types

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-nested-9 { A simple type name must not have ambiguity in
       referring to visible member types } {
    
    compile [saveas p1/T6551n9c.java {
package p1;
class T6551n9a {
    class C {}
}
interface T6551n9b {
    class C {}
}
public class T6551n9c extends T6551n9a implements T6551n9b {}
    }] [saveas T6551n9d.java {
class T6551n9d extends p1.T6551n9c {
    C c; // T6551n9a.C is not accessible, so this is T6551n9b.C
}
    }]

} {PASS}
Test Case: 6.5.5.1-nested-10
A simple type name favors a visible member type over top-level and single-type imports in the same compilation unit

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-nested-10 { A simple type name favors a visible
        member type over top-level and single-type imports in the same
        compilation unit } {
    
    compile [saveas p1/T6551n10a.java {
package p1;
public interface T6551n10a {}
    }] [saveas T6551n10b.java {
import p1.T6551n10a;
class T6551n10b {
    class T6551n10a {}
    // T6551n10a refers to the member class, not the imported interface
    class Sub extends T6551n10a {}
}
    }]

} {PASS}
Test Case: 6.5.5.1-nested-11
A simple type name favors a visible member type over top-level and single-type imports in the same compilation unit

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-nested-11 { A simple type name favors a visible
        member type over top-level and single-type imports in the same
        compilation unit } {
    
    compile [saveas T6551n11a.java {
interface T6551n11a {}
class T6551n11b {
    class T6551n11a {}
    // T6551n11a refers to the member class, not the top-level interface
    class Sub extends T6551n11a {}
}
    }]

} {PASS}
Test Case: 6.5.5.1-nested-12
A simple type name favors a visible member type over top-level and single-type imports in the same compilation unit

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.1-nested-12 { A simple type name favors a visible
        member type over top-level and single-type imports in the same
        compilation unit } {
    
    compile [saveas p1/T6551n12a.java {
package p1;
public class T6551n12a {
    public interface T6551n12b {}
}
    }] [saveas T6551n12b.java {
class T6551n12b extends p1.T6551n12a implements p1.T6551n12a.T6551n12b {
    void foo() {
        // the inherited member type shadows the current enclosing type
        new T6551n12b();
    }
}
    }]

} {FAIL}
Test Case: 6.5.5.1-nested-13
A simple type name favors a visible member type over top-level and single-type imports in the same compilation unit

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.1-nested-13 { A simple type name favors a visible
        member type over top-level and single-type imports in the same
        compilation unit } {
    
    compile [saveas p1/T6551n13a.java {
package p1;
public class T6551n13a {
    public interface T6551n13b {}
}
    }] [saveas p2/T6551n13b.java {
package p2;
public class T6551n13b {}
    }] [saveas T6551n13c.java {
import p2.T6551n13b;
class T6551n13c extends p1.T6551n13a {
    void foo() {
        // resolves to the inherited interface, not the imported class
        new T6551n13b();
    }
}
    }]

} {FAIL}
Test Case: 6.5.5.1-nested-14
A simple type name favors a visible member type over top-level and single-type imports in the same compilation unit

Expected Result: OK

Regression Test:

tcltest::test 6.5.5.1-nested-14 { A simple type name favors a visible
        member type over top-level and single-type imports in the same
        compilation unit } {
    
    ok_pass_or_warn [compile [saveas p1/T6551n14a.java {
package p1;
public class T6551n14a {
    public interface T6551n14b {}
}
    }] [saveas T6551n14b.java {
final class T6551n14b extends p1.T6551n14a implements p1.T6551n14a.T6551n14b {
    void foo() {
        // the inherited member type shadows the current enclosing type
        new T6551n14b() {};
    }
}
    }]]

} {OK}
Test Case: 6.5.5.1-nested-15
A simple type name favors a visible member type over top-level and single-type imports in the same compilation unit

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-nested-15 { A simple type name favors a visible
        member type over top-level and single-type imports in the same
        compilation unit } {
    
    compile [saveas p1/T6551n15a.java {
package p1;
public class T6551n15a {
    public interface T6551n15b {}
}
    }] [saveas p2/T6551n15b.java {
package p2;
public final class T6551n15b {}
    }] [saveas T6551n15c.java {
import p2.T6551n15b;
class T6551n15c extends p1.T6551n15a {
    void foo() {
        // resolves to the inherited interface, not the imported class
        new T6551n15b() {};
    }
}
    }]

} {PASS}
Test Case: 6.5.5.1-nested-16
A simple type name favors a visible member type over top-level types in the same compilation unit

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.1-nested-16 { A simple type name favors a visible
        member type over top-level types in the same compilation unit } {
    
    empty_class T6551n16 {
	static class A {
	    interface B {}
	}
	static class B extends A {
	    { new B(); } // the inherited T6551n16.A.B shadows T6551n16.B
	}
    }

} {FAIL}
Test Case: 6.5.5.1-nested-17
A simple type name favors a visible member type over top-level types in the same compilation unit

Expected Result: OK

Regression Test:

tcltest::test 6.5.5.1-nested-17 { A simple type name favors a visible
        member type over top-level types in the same compilation unit } {
    
    ok_pass_or_warn [empty_class T6551n17 {
	static class A {
	    interface B {}
	}
	final static class B extends A {
	    { new B() {}; } // the inherited T6551n16.A.B shadows T6551n16.B

	}
    }]

} {OK}
Test Case: 6.5.5.1-nested-18
A simple type name favors a visible member type over top-level types in the same compilation unit

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.1-nested-18 { A simple type name favors a visible
        member type over top-level types in the same compilation unit } {
    
    compile [saveas T6551n18a.java {
class T6551n18a {
    interface T6551n18b {}
}
class T6551n18b extends T6551n18a {
    { new T6551n18b(); } // the inherited T6551n18a.T6551n18b shadows T6551n18b
}
    }]

} {FAIL}
Test Case: 6.5.5.1-nested-19
A simple type name favors a visible member type over top-level types in the same compilation unit

Expected Result: OK

Regression Test:

tcltest::test 6.5.5.1-nested-19 { A simple type name favors a visible
        member type over top-level types in the same compilation unit } {
    
    ok_pass_or_warn [compile [saveas T6551n19a.java {
class T6551n19a {
    interface T6551n19b {}
}
final class T6551n19b extends T6551n19a {
    // the inherited T6551n19a.T6551n19b shadows T6551n19b
    { new T6551n19b() {}; }
}
    }]]

} {OK}
Test Case: 6.5.5.1-nested-20
A simple type name favors a visible member type over top-level types in the same compilation unit

Expected Result: OK

Regression Test:

tcltest::test 6.5.5.1-nested-20 { A simple type name favors a visible
        member type over top-level types in the same compilation unit } {
    
    ok_pass_or_warn [compile [saveas T6551n20a.java {
interface T6551n20a {
    class T6551n20b {}
}
interface T6551n20b extends T6551n20a {
    // the inherited T6551n20a.T6551n20b shadows T6551n20b
    T6551n20b t = new T6551n20b();
}
    }]]

} {OK}
Test Case: 6.5.5.1-nested-21
A simple type name favors a visible member type over top-level types in the same compilation unit

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.1-nested-21 { A simple type name favors a visible
        member type over top-level types in the same compilation unit } {
    
    compile [saveas T6551n21a.java {
interface T6551n21a {
    final class T6551n21b {}
}
interface T6551n21b extends T6551n21a {
    // the inherited T6551n21a.T6551n21b shadows T6551n21b
    T6551n21b t = new T6551n21b() {};
}
    }]

} {FAIL}
Test Case: 6.5.5.1-nested-22
A simple type name favors a visible member type over top-level types in the same compilation unit

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-nested-22 { A simple type name favors a visible
        member type over top-level types in the same compilation unit } {
    
    empty_class T6551n22 {
	class Inner extends T6551n22 {
	    // inherited Inner.Inner (etc.) is same as current Inner
	    Inner i;
	    Inner.Inner j = i;
	    Inner.Inner.Inner k = j;
	}
    }

} {PASS}
Test Case: 6.5.5.1-nested-23
A simple type name must not have ambiguity in referring to visible member types

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-nested-23 { A simple type name must not have ambiguity in
       referring to visible member types } {
    
    compile [saveas p1/T6551n23c.java {
package p1;
class T6551n23a {
    class C {
	public static final int i = 1;
    }
}
interface T6551n23b {
    class C {
	public static final int i = 2;
    }
}
public class T6551n23c extends T6551n23a implements T6551n23b {}
    }] [saveas T6551n23d.java {
class T6551n23d extends p1.T6551n23c {
    void m(int i) {
	switch (i) {
	    case 1:
	    case C.i: // a.C.i is not accessible, so this is b.C.i == 2
	}
    }
}
    }]

} {PASS}
Test Case: 6.5.5.1-import-1
A simple type name favors a single-type import over a top-level type in the same package

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-import-1 { A simple type name favors a single-type
        import over a top-level type in the same package } {
    
    compile [saveas p1/T6551i1a.java {
package p1;
public interface T6551i1a {}
    }] [saveas T6551i1a.java {
class T6551i1a {}
    }] [saveas T6551i1b.java {
import p1.T6551i1a;
// T6551i1a refers to the imported interface, not the class in the same package
class T6551i1b implements T6551i1a {}
    }]

} {PASS}
Test Case: 6.5.5.1-import-2
A simple type name favors a single-type import over import-on-demand

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-import-2 { A simple type name favors a single-type
        import over import-on-demand } {
    
    compile [saveas p1/T6551i2a.java {
package p1;
public class T6551i2a {
    public static final int i = 2;
}
    }] [saveas p2/T6551i2a.java {
package p2;
public class T6551i2a {
    public static final int i = 1;
}
    }] [saveas T6551i2b.java {
import p1.T6551i2a;
import p2.*;
class T6551i2b {
    void foo(int j) {
        switch (j) {
            case 0:
            case 1:
            // T6551i2a refers to the specific p1 import, not the on-demand p2,
            // so T6551i2a.i resolves to 2
            case T6551i2a.i:
        }
    }
}
    }]

} {PASS}
Test Case: 6.5.5.1-import-3
A simple type name favors a top-level type in the same package over import-on-demand

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.1-import-3 { A simple type name favors a top-level type
        in the same package over import-on-demand } {
    
    compile [saveas p1/T6551i3a.java {
package p1;
public interface T6551i3a {}
    }] [saveas T6551i3a.java {
class T6551i3a {}
    }] [saveas T6551i3b.java {
import p1.*;
// T6551i3a refers to the class in the same package, not an imported interface
class T6551i3b extends T6551i3a {}
    }]

} {PASS}
Test Case: 6.5.5.1-import-4
A simple type name may not resolve to ambiguous types from import-on-demand

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.1-import-4 { A simple type name may not resolve to
        ambiguous types from import-on-demand } {
    
    compile [saveas p1/T6551i4a.java {
package p1;
public class T6551i4a {}
    }] [saveas p2/T6551i4a.java {
package p2;
public class T6551i4a {}
    }] [saveas T6551i4b.java {
import p1.*;
import p2.*;
// T6551i4a is ambiguous between p1 and p2
class T6551i4b extends T6551i4a {}
    }]

} {FAIL}

6.5.5.2

Directory : tests/jls/names/meaning-of-a-name/type-names/qualified


Test Case: 6.5.5.2-package-1
A qualified type name must refer to a single accessible member type of the qualifying package, or an error occurs

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.2-package-1 { A qualified type name must refer to a
        single accessible member type of the qualifying package, or an error
        occurs } {
    
    compile [saveas p1/T6552p1.java {
package p1;
class T6552p1 {
    p1.T6552p1 t;
}
}]

} {PASS}
Test Case: 6.5.5.2-package-2
A qualified type name must refer to a single accessible member type of the qualifying package, or an error occurs

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.2-package-2 { A qualified type name must refer to a
        single accessible member type of the qualifying package, or an error
        occurs } {
    
    compile [saveas p1/T6552p2.java {
package p1;
class T6552p2 {
    p1.NoSuchType t;
}
    }]

} {FAIL}
Test Case: 6.5.5.2-package-3
A qualified type name must refer to a single accessible member type of the qualifying package, or an error occurs

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.2-package-3 { A qualified type name must refer to a
        single accessible member type of the qualifying package, or an error
        occurs } {
    
    compile [saveas p1/T6552p3a.java {
package p1;
class T6552p3a {
    public T6552p3a() {}
}
    }] [saveas T6552p3b.java {
// p1.T6552p3a is not accessible
class T6552p3b extends p1.T6552p3a {}
    }]

} {FAIL}
Test Case: 6.5.5.2-package-4
A qualified type name must refer to a single accessible member type of the qualifying package, or an error occurs

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.2-package-4 { A qualified type name must refer to a
        single accessible member type of the qualifying package, or an error
        occurs } {
    
    empty_class T6552p4 {
        // java.lang is not a type, but a package
        java.lang j;
    }

} {FAIL}
Test Case: 6.5.5.2-type-1
A qualified type name must refer to a single accessible member type of the qualifying type, or an error occurs

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.2-type-1 { A qualified type name must refer to a single
        accessible member type of the qualifying type, or an error occurs } {
    
    empty_class T6552t1 {
        class Inner {}
        T6552t1.Inner t;
    }

} {PASS}
Test Case: 6.5.5.2-type-2
A qualified type name must refer to a single accessible member type of the qualifying type, or an error occurs

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.2-type-2 { A qualified type name must refer to a single
        accessible member type of the qualifying type, or an error occurs } {
    
    empty_class T6552t2 {
        T6552t2.NoSuchClass t;
    }

} {FAIL}
Test Case: 6.5.5.2-type-3
A qualified type name must refer to a single accessible member type of the qualifying type, or an error occurs

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.2-type-3 { A qualified type name must refer to a single
        accessible member type of the qualifying type, or an error occurs } {
    
    compile [saveas T6552t3a.java {
class T6552t3a {
    private class C {}
}
class T6552t3b extends T6552t3a {
    // T6552t3a.C is not accessible
    T6552t3a.C t;
}
    }]

} {FAIL}
Test Case: 6.5.5.2-type-4
A qualified type name must refer to a single accessible member type of the qualifying type, or an error occurs

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.5.2-type-4 { A qualified type name must refer to a single
        accessible member type of the qualifying type, or an error occurs } {
    
    compile [saveas T6552t4a.java {
class T6552t4a {
    class C {}
}
interface T6552t4b {
    class C {}
}
class T6552t4c extends T6552t4a implements T6552t4b {
    // T6552t4c.C is ambiguous between T6552t4a.C and T6552t4b.C
    T6552t4c.C t;
}
    }]

} {FAIL}
Test Case: 6.5.5.2-type-5
A qualified type name must refer to a single accessible member type of the qualifying type, or an error occurs

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.2-type-5 { A qualified type name must refer to a single
        accessible member type of the qualifying type, or an error occurs } {
    
    compile [saveas p1/T6552t5c.java {
package p1;
class T6552t5a {
    class C {}
}
interface T6552t5b {
    class C {}
}
public class T6552t5c extends T6552t5a implements T6552t5b {}
    }] [saveas T6552t5d.java {
class T6552t5d extends p1.T6552t5c {
    // only the accessible T6552t5b.C is inherited
    T6552t5d.C t;
}
    }]

} {PASS}
Test Case: 6.5.5.2-type-6
A qualified type name must refer to a single accessible member type of the qualifying type, or an error occurs

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.2-type-6 { A qualified type name must refer to a single
        accessible member type of the qualifying type, or an error occurs } {
    
    compile [saveas p1/T6552t6c.java {
package p1;
class T6552t6a {
    class C {}
}
interface T6552t6b {
    class C {}
}
public class T6552t6c extends T6552t6a implements T6552t6b {}
    }] [saveas T6552t6d.java {
class T6552t6d {
    // a.C is not accessible, so this is b.C
    p1.T6552t6c.C t;
}
    }]

} {PASS}
Test Case: 6.5.5.2-type-7
A qualified type name must refer to a single accessible member type of the qualifying type, or an error occurs

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.2-type-7 { A qualified type name must refer to a single
        accessible member type of the qualifying type, or an error occurs } {
    
    compile [saveas p1/T6552t7c.java {
package p1;
class T6552t7a {
    protected class C {}
}
interface T6552t7b {
    class C {}
}
public class T6552t7c extends T6552t7a implements T6552t7b {}
    }] [saveas T6552t7d.java {
class T6552t7d {
    // a.C is not accessible, so this is b.C
    p1.T6552t7c.C t;
}
    }]

} {PASS}
Test Case: 6.5.5.2-type-8
A qualified type name must refer to a single accessible member type of the qualifying type, or an error occurs

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.2-type-8 { A qualified type name must refer to a single
        accessible member type of the qualifying type, or an error occurs } {
    
    compile [saveas p1/T6552t8a.java {
package p1;
public class T6552t8a {
    protected class C {}
}
    }] [saveas p1/T6552t8b.java {
package p1;
public interface T6552t8b {
    class C {}
}
    }] [saveas T6552t8c.java {
class T6552t8c extends p1.T6552t8a implements p1.T6552t8b {}
class T6552t8d {
    // a.C is not accessible, so this is b.C
    T6552t8c.C t;
}
    }]

} {PASS}
Test Case: 6.5.5.2-example-1
Example in the specs

Expected Result: PASS

Regression Test:

tcltest::test 6.5.5.2-example-1 { Example in the specs } {
    
    empty_class T6552e1 {
        public static void main(String[] args) {
            java.util.Date date
                = new java.util.Date(System.currentTimeMillis());
            // Just like Sun to deprecate their example!
            System.out.println(date/*.toLocaleString()*/);
        }
    }

} {PASS}

6.5.6.1

Directory : tests/jls/names/meaning-of-a-name/expression-names/simple


Test Case: 6.5.6.1-local-1
If a simple expression name appears in the scope of a local variable or parameter, it denotes that variable

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-local-1 { If a simple expression name appears in the
        scope of a local variable or parameter, it denotes that variable } {
    
    empty_class T6561l1 {
        int i;
        void foo(Object i) {
            i = null; // refers to the parameter, not field
        }
    }

} {PASS}
Test Case: 6.5.6.1-local-2
If a simple expression name appears in the scope of a local variable or parameter, it denotes that variable

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-local-2 { If a simple expression name appears in the
        scope of a local variable or parameter, it denotes that variable } {
    
    empty_main T6561l2 {
        final int i = 1;
        new Object() {
            void foo() {
                Object i;
                i = null; // refers to the local Object i, which shadows int i
            }
        };
    }

} {PASS}
Test Case: 6.5.6.1-local-3
If a simple expression name appears in the scope of a local variable or parameter, it denotes that variable

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-local-3 { If a simple expression name appears in the
        scope of a local variable or parameter, it denotes that variable } {
    
    empty_main T6561l3 {
        final int i = 1;
        new Object() {
            Object i;
            void foo() {
                i = null; // the field Object i shadows the local int i
            }
        };
    }

} {PASS}
Test Case: 6.5.6.1-local-4
If a simple expression name appears in the scope of a local variable or parameter, it denotes that variable

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-local-4 { If a simple expression name appears in the
        scope of a local variable or parameter, it denotes that variable } {
    
    empty_class T6561l4 {
        class Super {
            Object i;
        }
        void foo(final int i) {
            new Super() {
                void foo() {
                    // the inherited field Object i shadows the parameter int i
                    i = null;
                }
            };
        }
    }

} {PASS}
Test Case: 6.5.6.1-local-5
If a simple expression name appears in the scope of a local variable or parameter, it denotes that variable

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-local-5 { If a simple expression name appears in the
        scope of a local variable or parameter, it denotes that variable } {
    
    empty_class T6561l5 {
	int i;
	void m() {
	    try {
		throw new Error();
	    } catch (Error i) {
		i = null; // refers to the parameter, not the field
	    }
	}
    }

} {PASS}
Test Case: 6.5.6.1-field-1
If a simple expression name is not in the scope of a local variable or parameter, it must represent a single accessible field of the innermost type with the field

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.1-field-1 { If a simple expression name is not in the
        scope of a local variable or parameter, it must represent a single
        accessible field of the innermost type with the field } {
    
    empty_class T6561f1 {
        int i = no_such_field;
    }

} {FAIL}
Test Case: 6.5.6.1-field-2
If a simple expression name is not in the scope of a local variable or parameter, it must represent a single accessible field of the innermost type with the field

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-field-2 { If a simple expression name is not in the
        scope of a local variable or parameter, it must represent a single
        accessible field of the innermost type with the field } {
    
    empty_class T6561f2 {
        int i;
        int j = i;
    }

} {PASS}
Test Case: 6.5.6.1-field-3
If a simple expression name is not in the scope of a local variable or parameter, it must represent a single accessible field of the innermost type with the field

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-field-3 { If a simple expression name is not in the
        scope of a local variable or parameter, it must represent a single
        accessible field of the innermost type with the field } {
    
    empty_class T6561f3 {
        int i;
        class Inner {
            Object i;
            void foo() {
                i = null; // refers to Object Inner.i, not int T6561f3.i
            }
        }
    }

} {PASS}
Test Case: 6.5.6.1-field-4
If a simple expression name is not in the scope of a local variable or parameter, it must represent a single accessible field of the innermost type with the field

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-field-4 { If a simple expression name is not in the
        scope of a local variable or parameter, it must represent a single
        accessible field of the innermost type with the field } {
    
    empty_class T6561f4 {
        int i;
        class Super {
            Object i;
        }
        class Sub extends Super {
            void foo() {
                // refers to inherited Object Super.i, not int T6561f3.i
                i = null;
            }
        }
    }

} {PASS}
Test Case: 6.5.6.1-field-5
If a simple expression name is not in the scope of a local variable or parameter, it must represent a single accessible field of the innermost type with the field

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.1-field-5 { If a simple expression name is not in the
        scope of a local variable or parameter, it must represent a single
        accessible field of the innermost type with the field } {
    
    empty_class T6561f5 {
        class C {
            int i;
        }
        interface I {
            int i = 1;
        }
        class Sub extends C implements I {
            int j = i; // i is ambiguous between C.i, I.i
        }
    }

} {FAIL}
Test Case: 6.5.6.1-field-6
If a simple expression name is not in the scope of a local variable or parameter, it must represent a single accessible field of the innermost type with the field

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-field-6 { If a simple expression name is not in the
        scope of a local variable or parameter, it must represent a single
        accessible field of the innermost type with the field } {
    
    compile [saveas p1/T6561f6c.java {
package p1;
class T6561f6a {
    int i;
}
interface T6561f6b {
    int i = 1;
}
public class T6561f6c extends T6561f6a implements T6561f6b {}
    }] [saveas T6561f6d.java {
class T6561f6d extends p1.T6561f6c {
    int j = i; // only T6561f6b.i is inherited
}
    }]

} {PASS}
Test Case: 6.5.6.1-field-7
If a simple expression name is not in the scope of a local variable or parameter, it must represent a single accessible field of the innermost type with the field

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-field-7 { If a simple expression name is not in the
        scope of a local variable or parameter, it must represent a single
        accessible field of the innermost type with the field } {
    
    empty_class T6561f7 {
	int i;
	class A {
	    class B {
		int j = i;
	    }
	}
    }

} {PASS}
Test Case: 6.5.6.1-field-8
If a simple expression name is not in the scope of a local variable or parameter, it must represent a single accessible field of the innermost type with the field

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-field-8 { If a simple expression name is not in the
        scope of a local variable or parameter, it must represent a single
        accessible field of the innermost type with the field } {
    
    empty_class T6561f8 {
	class Super {
	    int i;
	}
	class Sub extends Super {
	    class Inner {
		{ i++; }
	    }
	}
    }

} {PASS}
Test Case: 6.5.6.1-instance-1
An expression name which resolves to an instance field must not occur in a static context

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.1-instance-1 { An expression name which resolves to an
        instance field must not occur in a static context } {
    
    empty_class T6561i1 {
        int i;
        static { i++; }
    }

} {FAIL}
Test Case: 6.5.6.1-instance-2
An expression name which resolves to an instance field must not occur in a static context

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.1-instance-2 { An expression name which resolves to an
        instance field must not occur in a static context } {
    
    empty_class T6561i2 {
        int i;
        static int j = i;
    }

} {FAIL}
Test Case: 6.5.6.1-instance-3
An expression name which resolves to an instance field must not occur in a static context

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.1-instance-3 { An expression name which resolves to an
        instance field must not occur in a static context } {
    
    empty_class T6561i3 {
        int i;
        static void m() { i++; }
    }

} {FAIL}
Test Case: 6.5.6.1-instance-4
An expression name which resolves to an instance field must not occur in a static context

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.1-instance-4 { An expression name which resolves to an
        instance field must not occur in a static context } {
    
    empty_class T6561i4 {
        int i;
        T6561i4(int j) {}
        T6561i4() { this(i++); }
    }

} {FAIL}
Test Case: 6.5.6.1-instance-5
An expression name which resolves to an instance field must not occur in a static context

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.1-instance-5 { An expression name which resolves to an
        instance field must not occur in a static context } {
    
    empty_class T6561i5 {
	int i;
	interface I {
	    int j = i;
	}
    }

} {FAIL}
Test Case: 6.5.6.1-explicit-constructor-1
Cannot access instance fields from this class within an explicit constructor

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.1-explicit-constructor-1 { Cannot access instance fields
        from this class within an explicit constructor } {
    
    empty_class T6561ec1 {
	int i;
	T6561ec1(int i) {}
	T6561ec1() {
	    this(i);
	}
    }

} {FAIL}
Test Case: 6.5.6.1-explicit-constructor-2
Cannot access instance fields from this class within an explicit constructor

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.1-explicit-constructor-2 { Cannot access instance fields
        from this class within an explicit constructor } {
    
    empty_class T6561ec2 {
	int i;
	T6561ec2(int i) {}
	class Sub extends T6561ec2 {
	    Sub() {
		super(i); // i is inherited
	    }
	}
    }

} {FAIL}
Test Case: 6.5.6.1-explicit-constructor-3
Cannot access instance fields from this class within an explicit constructor

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-explicit-constructor-3 { Cannot access instance fields
        from this class within an explicit constructor } {
    
    empty_class T6561ec3 {
	int i;
	class Inner {
	    Inner(int i) {}
	    Inner() {
		this(i); // i is not inherited, and this$0.i is available
	    }
	}
    }

} {PASS}
Test Case: 6.5.6.1-explicit-constructor-4
Cannot access instance fields from this class within an explicit constructor

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-explicit-constructor-4 { Cannot access instance fields
        from this class within an explicit constructor } {
    
    empty_class T6561ec4 {
	private int i;
	T6561ec4(int i) {}
	class Sub extends T6561ec4 {
	    Sub() {
		super(i); // i is not inherited, so it is the enclosing i
	    }
	}
    }

} {PASS}
Test Case: 6.5.6.1-explicit-constructor-5
Cannot access instance fields from this class within an explicit constructor

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-explicit-constructor-5 { Cannot access instance fields
        from this class within an explicit constructor } {
    
    compile [saveas p1/T6561ec5a.java {
package p1;
public class T6561ec5a {
    int i;
    class C extends p2.T6561ec5b {
	C(int j) {}
	C() {
	    // although c is a subclass of a, it does not inherit i, since
	    // its superclass is in a different package
	    this(i);
	}
    }
}
    }] [saveas p2/T6561ec5b.java {
package p2;
public class T6561ec5b extends p1.T6561ec5a {}
    }]

} {PASS}
Test Case: 6.5.6.1-example-1
JLS example

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.1-example-1 { JLS example } {
    
    empty_class T6561e1 {
        static int v;
        static final int f = 3;
        public static void main(String[] args) {
	    int i;
	    i = 1; // local
	    v = 2; // field
	    System.out.println(i + " " + v + " " + f);
        }
    }

} {PASS}
Test Case: 6.5.6.1-example-2
JLS example

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.1-example-2 { JLS example } {
    
    empty_class T6561e2 {
        static final int f = 3;
        public static void main(String[] args) {
	    f = 33; // compile-time error
	}
    }

} {FAIL}

6.5.6.2

Directory : tests/jls/names/meaning-of-a-name/expression-names/qualified


Test Case: 6.5.6.2-package-1
A qualified expression name may not be qualified by a package name

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.2-package-1 { A qualified expression name may not be
        qualified by a package name } {
    
    empty_class T6562p1 {
        T6562p1 foo() { return null; }
        int i;
        int j = foo.i; // foo was classified as a (non-existant) package name
    }

} {FAIL}
Test Case: 6.5.6.2-package-2
A qualified expression name may not be qualified by a package name

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.2-package-2 { A qualified expression name may not be
        qualified by a package name } {
    
    empty_class T6562p2 {
        int j = java.i; // java was classified as a package name
    }

} {FAIL}
Test Case: 6.5.6.2-type-1
A qualified expression name which is qualified by a type name must name a single accessible field of that type, which must be static

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.2-type-1 { A qualified expression name which is qualified
        by a type name must name a single accessible field of that type, which
        must be static } {
    
    empty_class T6562t1 {
        int i = T6562t1.no_such_field;
    }

} {FAIL}
Test Case: 6.5.6.2-type-2
A qualified expression name which is qualified by a type name must name a single accessible field of that type, which must be static

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.2-type-2 { A qualified expression name which is qualified
        by a type name must name a single accessible field of that type, which
        must be static } {
    
    empty_class T6562t2 {
        int i;
        int j = T6562t2.i; // i is not static
    }

} {FAIL}
Test Case: 6.5.6.2-type-3
A qualified expression name which is qualified by a type name must name a single accessible field of that type, which must be static

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.2-type-3 { A qualified expression name which is qualified
        by a type name must name a single accessible field of that type, which
        must be static } {
    
    empty_class T6562t3 {
        static int i;
        int j = T6562t3.i;
    }

} {PASS}
Test Case: 6.5.6.2-type-4
A qualified expression name which is qualified by a type name must name a single accessible field of that type, which must be static

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.2-type-4 { A qualified expression name which is qualified
        by a type name must name a single accessible field of that type, which
        must be static } {
    
    compile [saveas T6562t4.java {
interface T6562t4 {
    int i = 1;
    int j = T6562t4.i;
}
    }]

} {PASS}
Test Case: 6.5.6.2-type-5
A qualified expression name which is qualified by a type name must name a single accessible field of that type, which must be static

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.2-type-5 { A qualified expression name which is qualified
        by a type name must name a single accessible field of that type, which
        must be static } {
    
    empty_class T6562t5 {
        class C {
            int i;
        }
        interface I {
            int i = 1;
        }
        class Sub extends C implements I {}
        // ambiguous between C.i and I.i, even though only I.i is static
        int j = Sub.i;
    }

} {FAIL}
Test Case: 6.5.6.2-type-6
A qualified expression name which is qualified by a type name must name a single accessible field of that type, which must be static

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.2-type-6 { A qualified expression name which is qualified
        by a type name must name a single accessible field of that type, which
        must be static } {
    
    compile [saveas p1/T6562t6c.java {
package p1;
class T6562t6a {
    int i;
}
interface T6562t6b {
    int i = 1;
}
public class T6562t6c extends T6562t6a implements T6562t6b {}
    }] [saveas T6562t6d.java {
class T6562t6d {
    int i = p1.T6562t6c.i; // only T6562t6b.i is accessible
}
    }]

} {PASS}
Test Case: 6.5.6.2-type-7
A qualified expression name which is qualified by a type name must name a single accessible field of that type, which must be static - this tests jikes bug 3044

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.2-type-7 { A qualified expression name which is qualified
        by a type name must name a single accessible field of that type, which
        must be static - this tests jikes bug 3044 } {
    
    compile [saveas T6562t7a.java {
interface T6562t7a {
    int i = T6562t7b.i;
}
    }] [saveas T6562t7b.java {
class T6562t7b {
    final static int i;
    static { i = 1; }
}
    }]

} {PASS}
Test Case: 6.5.6.2-type-8
A qualified expression name which is qualified by a type name must name a single accessible field of that type, which must be static

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.2-type-8 { A qualified expression name which is qualified
        by a type name must name a single accessible field of that type, which
        must be static } {
    
    compile [saveas p1/T6562t8c.java {
package p1;
class T6562t8a {
    protected int i;
}
interface T6562t8b {
    int i = 1;
}
public class T6562t8c extends T6562t8a implements T6562t8b {}
    }] [saveas T6562t8d.java {
class T6562t8d extends p1.T6562t8c {
    // ambiguous - a.i and b.i are accessible
    int i = T6562t8d.i;
}
    }]

} {FAIL}
Test Case: 6.5.6.2-type-9
A qualified expression name which is qualified by a type name must name a single accessible field of that type, which must be static

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.2-type-9 { A qualified expression name which is qualified
        by a type name must name a single accessible field of that type, which
        must be static } {
    
    compile [saveas p1/T6562t9c.java {
package p1;
class T6562t9a {
    protected int i;
}
interface T6562t9b {
    int i = 1;
}
public class T6562t9c extends T6562t9a implements T6562t9b {}
    }] [saveas T6562t9d.java {
class T6562t9d extends p1.T6562t9c {
    // since a.i is an instance field, and qualifier is not d or subclass,
    // only b.i is accessible
    int i = p1.T6562t9c.i;
}
    }]

} {PASS}
Test Case: 6.5.6.2-type-10
A qualified expression name which is qualified by a type name must name a single accessible field of that type, which must be static

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.2-type-10 { A qualified expression name which is qualified
        by a type name must name a single accessible field of that type, which
        must be static } {
    
    compile [saveas p1/T6562t10c.java {
package p1;
class T6562t10a {
    protected static int i;
}
interface T6562t10b {
    int i = 1;
}
public class T6562t10c extends T6562t10a implements T6562t10b {}
    }] [saveas T6562t10d.java {
class T6562t10d extends p1.T6562t10c {
    // ambiguous - a.i and b.i are accessible
    int i = p1.T6562t10c.i;
}
    }]

} {FAIL}
Test Case: 6.5.6.2-expression-1
A qualified expression name which is qualified by an expression name must name a single accessible field of the type of the qualifier, which must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.2-expression-1 { A qualified expression name which is
        qualified by an expression name must name a single accessible field
        of the type of the qualifier, which must be a reference } {
    
    empty_class T6562e1 {
        int i;
        int j = i .i; // a primitive type has no members
    }

} {FAIL}
Test Case: 6.5.6.2-expression-2
A qualified expression name which is qualified by an expression name must name a single accessible field of the type of the qualifier, which must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.2-expression-2 { A qualified expression name which is
        qualified by an expression name must name a single accessible field
        of the type of the qualifier, which must be a reference } {
    
    empty_class T6562e2 {
        T6562e2 t;
        int i = t.no_such_field;
    }

} {FAIL}
Test Case: 6.5.6.2-expression-3
A qualified expression name which is qualified by an expression name must name a single accessible field of the type of the qualifier, which must be a reference

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.2-expression-3 { A qualified expression name which is
        qualified by an expression name must name a single accessible field
        of the type of the qualifier, which must be a reference } {
    
    empty_class T6562e3 {
        T6562e3 t;
        int i;
        int j = t.i;
    }

} {PASS}
Test Case: 6.5.6.2-expression-4
A qualified expression name which is qualified by an expression name must name a single accessible field of the type of the qualifier, which must be a reference

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.2-expression-4 { A qualified expression name which is
        qualified by an expression name must name a single accessible field
        of the type of the qualifier, which must be a reference } {
    
    compile [saveas T6562e4.java {
interface T6562e4 {
    T6562e4 t = null;
    int i = 1;
    int j = t.i; // will throw NullPointerException
}
    }]

} {PASS}
Test Case: 6.5.6.2-expression-5
A qualified expression name which is qualified by an expression name must name a single accessible field of the type of the qualifier, which must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.6.2-expression-5 { A qualified expression name which is
        qualified by an expression name must name a single accessible field
        of the type of the qualifier, which must be a reference } {
    
    empty_class T6562e5 {
        class C {
            int i;
        }
        interface I {
            int i = 1;
        }
        class Sub extends C implements I {}
        // ambiguous between C.i and I.i
        Sub s;
        int j = s.i;
    }

} {FAIL}
Test Case: 6.5.6.2-expression-6
A qualified expression name which is qualified by an expression name must name a single accessible field of the type of the qualifier, which must be a reference

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.2-expression-6 { A qualified expression name which is
        qualified by an expression name must name a single accessible field
        of the type of the qualifier, which must be a reference } {
    
    compile [saveas p1/T6562e6c.java {
package p1;
class T6562e6a {
    int i;
}
interface T6562e6b {
    int i = 1;
}
public class T6562e6c extends T6562e6a implements T6562e6b {}
    }] [saveas T6562e6d.java {
class T6562e6d {
    p1.T6562e6c t;
    int i = t.i; // only T6562e6b.i is accessible
}
    }]

} {PASS}
Test Case: 6.5.6.2-expression-7
A qualified expression name which is qualified by an expression name must name a single accessible field of the type of the qualifier, which must be a reference

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.2-expression-7 { A qualified expression name which is
        qualified by an expression name must name a single accessible field
        of the type of the qualifier, which must be a reference } {
    
    empty_class T6562e7 {
        Object o[] = {};
        int i = o.length;
    }

} {PASS}
Test Case: 6.5.6.2-expression-8
A qualified expression name may occur in a static context, even when it references an instance field

Expected Result: PASS

Regression Test:

tcltest::test 6.5.6.2-expression-8 { A qualified expression name may occur
        in a static context, even when it references an instance field } {
    
    empty_class T6562e8 {
        int i;
        static T6562e8 t;
        static {
            t.i++;
        }
    }

} {PASS}

6.5.7.1

Directory : tests/jls/names/meaning-of-a-name/method-names/simple


Test Case: 6.5.7.1-simple-1
A simple method name must name a method in the current type

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.7.1-simple-1 { A simple method name must name a method in
        the current type } {
    
    empty_class T6571s1 {
        int foo;
        int i = foo();
    }

} {FAIL}
Test Case: 6.5.7.1-simple-2
A simple method name must name a method in the current type

Expected Result: PASS

Regression Test:

tcltest::test 6.5.7.1-simple-2 { A simple method name must name a method in
        the current type } {
    
    empty_class T6571s2 {
        int foo() { return 1; }
        int i = foo();
    }

} {PASS}

6.5.7.2

Directory : tests/jls/names/meaning-of-a-name/method-names/qualified


Test Case: 6.5.7.2-package-1
A qualified method name may not be qualified by a package name

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.7.2-package-1 { A qualified method name may not be
        qualified by a package name } {
    
    empty_class T6572p1 {
        T6572p1 foo() { return null; }
        int m() { return 1; }
        int i = foo.m(); // foo was classified as a (non-existant) package name
    }

} {FAIL}
Test Case: 6.5.7.2-package-2
A qualified method name may not be qualified by a package name

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.7.2-package-2 { A qualified method name may not be
        qualified by a package name } {
    
    empty_class T6572p2 {
        String s = java.toString(); // java was classified as a package name
    }

} {FAIL}
Test Case: 6.5.7.2-type-1
A method name qualified by a type name must name at least one static method in the type

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.7.2-type-1 { A method name qualified by a type name must
        name at least one static method in the type } {
    
    empty_class T6572t1 {
        String s = Object.toString();
    }

} {FAIL}
Test Case: 6.5.7.2-type-2
A method name qualified by a type name must name at least one static method in the type

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.7.2-type-2 { A method name qualified by a type name must
        name at least one static method in the type } {
    
    empty_class T6572t2 {
        String s = T6572t2.noSuchMethod();
    }

} {FAIL}
Test Case: 6.5.7.2-type-3
A method name qualified by a type name must name at least one static method in the type

Expected Result: PASS

Regression Test:

tcltest::test 6.5.7.2-type-3 { A method name qualified by a type name must
        name at least one static method in the type } {
    
    empty_class T6572t3 {
        static int m() { return 1; }
        int i = T6572t3.m();
    }

} {PASS}
Test Case: 6.5.7.2-expression-1
A method name qualified by an expression name must name at least one method in the type of the expression

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.7.2-expression-1 { A method name qualified by an expression
        name must name at least one method in the type of the expression} {
    
    empty_class T6572e1 {
        T6572e1 t;
        String s = t.noSuchMethod();
    }

} {FAIL}
Test Case: 6.5.7.2-expression-2
A method name qualified by an expression name must name at least one method in the type of the expression

Expected Result: PASS

Regression Test:

tcltest::test 6.5.7.2-expression-2 { A method name qualified by an expression
        name must name at least one method in the type of the expression} {
    
    empty_class T6572e2 {
        static int m() { return 1; }
        T6572e2 t;
        int i = t.m();
    }

} {PASS}
Test Case: 6.5.7.2-expression-3
A method name qualified by an expression name must name at least one method in the type of the expression

Expected Result: FAIL

Regression Test:

tcltest::test 6.5.7.2-expression-3 { A method name qualified by an expression
        name must name at least one method in the type of the expression} {
    
    empty_class T6572e3 {
        int t;
        int i = t.toString(); // primitive types have no members
    }

} {FAIL}

6.6.1

Directory : tests/jls/names/access-control/determining-accessibility


Test Case: 6.6.1-1
A class declared public is accessible from outside the package

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-1 {A class declared public is accessible from outside
        the package} {
    
    compile [saveas T661_1a.java {
class T661_1a {
    pkg.T661_1b ref;
}
    }] [saveas pkg/T661_1b.java {
package pkg;
public class T661_1b {}
    }]

} {PASS}
Test Case: 6.6.1-2
A class declared public is accessible from outside the package when the .java source is loaded from the CLASSPATH

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-2 {A class declared public is accessible from outside
        the package when the .java source is loaded from the CLASSPATH} {
    
    saveas pkg/T661_2a.java {
package pkg;
public class T661_2a {}
    }
    compile -classpath . [saveas T661_2b.java {
class T661_2b {
    pkg.T661_2a ref;
}
    }]

} {PASS}
Test Case: 6.6.1-3
A class declared public is accessible from outside the package when the .class file is loaded from the CLASSPATH

Expected Result: PASS PASS

Regression Test:

tcltest::test 6.6.1-3 {A class declared public is accessible from outside
        the package when the .class file is loaded from the CLASSPATH} {
    
    set result [compile [saveas pkg/T661_3a.java {
package pkg;
public class T661_3a {}
    }]]
    delete pkg/T661_3a.java
    list $result [compile -classpath . [saveas T661_3b.java {
class T661_3b {
    pkg.T661_3a ref;
}
    }]]

} {PASS PASS}
Test Case: 6.6.1-4
An interface declared public is accessible from outside the package

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-4 {An interface declared public is accessible from outside
        the package} {
    
    compile [saveas T661_4a.java {
class T661_4a {
    pkg.T661_4b ref;
}
    }] [saveas pkg/T661_4b.java {
package pkg;
public interface T661_4b {}
    }]

} {PASS}
Test Case: 6.6.1-5
An interface declared public is accessible from outside the package when the .java source is loaded from the CLASSPATH

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-5 {An interface declared public is accessible from outside
        the package when the .java source is loaded from the CLASSPATH} {
    
    saveas pkg/T661_5a.java {
package pkg;
public interface T661_5a {}
    }
    compile -classpath . [saveas T661_5b.java {
class T661_5b {
    pkg.T661_5a ref;
}
    }]

} {PASS}
Test Case: 6.6.1-6
An interface declared public is accessible from outside the package when the .class file is loaded from the CLASSPATH

Expected Result: PASS PASS

Regression Test:

tcltest::test 6.6.1-6 {An interface declared public is accessible from outside
        the package when the .class file is loaded from the CLASSPATH} {
    
    set result [compile [saveas pkg/T661_6a.java {
package pkg;
public interface T661_6a {}
    }]]
    delete pkg/T661_6a.java
    list $result [compile -classpath . [saveas T661_6b.java {
class T661_6b {
    pkg.T661_6a ref;
}
    }]]

} {PASS PASS}
Test Case: 6.6.1-7
Access a public class from inside the package

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-7 {Access a public class from inside the package} {
    
    compile [saveas pkg/T661_7a.java {
package pkg;
public class T661_7a {}
    }] [saveas pkg/T661_7b.java {
package pkg;
class T661_7b {
    pkg.T661_7a ref;
}
    }]

} {PASS}
Test Case: 6.6.1-8
A class with default access is inaccessible from outside the package

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-8 {A class with default access is inaccessible from outside
        the package} {
    
    compile [saveas T661_8a.java {
class T661_8a {
    pkg.T661_8b ref;
}
    }] [saveas pkg/T661_8b.java {
package pkg;
class T661_8b {}
    }]

} {FAIL}
Test Case: 6.6.1-9
A class with default access is inaccessible from outside the package when the .java source is loaded from the CLASSPATH

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-9 {A class with default access is inaccessible from outside
        the package when the .java source is loaded from the CLASSPATH} {
    
    saveas pkg/T661_9a.java {
package pkg;
class T661_9a {}
    }
    compile -classpath . [saveas T661_9b.java {
class T661_9b {
    pkg.T661_9a ref;
}
    }]

} {FAIL}
Test Case: 6.6.1-10
A class with default access is inaccessible from outside the package when the .class file is loaded from the CLASSPATH

Expected Result: PASS FAIL

Regression Test:

tcltest::test 6.6.1-10 {A class with default access is inaccessible from outside
        the package when the .class file is loaded from the CLASSPATH} {
    
    set result [compile [saveas pkg/T661_10a.java {
package pkg;
class T661_10a {}
    }]]
    delete pkg/T661_10a.java
    list $result [compile -classpath . [saveas T661_10b.java {
class T661_10b {
    pkg.T661_10a ref;
}
    }]]

} {PASS FAIL}
Test Case: 6.6.1-11
An interface with default access is inaccessible from outside the package

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-11 {An interface with default access is inaccessible from
        outside the package} {
    
    compile [saveas T661_11a.java {
class T661_11a {
    pkg.T661_11b ref;
}
    }] [saveas pkg/T661_11b.java {
package pkg;
interface T661_11b {}
    }]

} {FAIL}
Test Case: 6.6.1-12
An interface with default access is inaccessible from outside the package when the .java source is loaded from the CLASSPATH

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-12 {An interface with default access is inaccessible from
        outside the package when the .java source is loaded from the
        CLASSPATH} {
    
    saveas pkg/T661_12a.java {
package pkg;
interface T661_12a {}
    }
    compile -classpath . [saveas T661_12b.java {
class T661_12b {
    pkg.T661_12a ref;
}
    }]

} {FAIL}
Test Case: 6.6.1-13
An interface with default access is inaccessible from outside the package when the .class file is loaded from the CLASSPATH

Expected Result: PASS FAIL

Regression Test:

tcltest::test 6.6.1-13 {An interface with default access is inaccessible from
        outside the package when the .class file is loaded from the CLASSPATH} {
    
    set result [compile [saveas pkg/T661_13a.java {
package pkg;
interface T661_13a {}
    }]]
    delete pkg/T661_13a.java
    list $result [compile -classpath . [saveas T661_13b.java {
class T661_13b {
    pkg.T661_13a ref;
}
    }]]

} {PASS FAIL}
Test Case: 6.6.1-14
Access a default class from inside the package

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-14 {Access a default class from inside the package} {
    
    compile [saveas pkg/T661_14a.java {
package pkg;
class T661_14a {}
    }] [saveas pkg/T661_14b.java {
package pkg;
class T661_14b {
    pkg.T661_14a ref;
}
    }]

} {PASS}
Test Case: 6.6.1-15
A class field declared public is accessible from outside the package

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-15 {A class field declared public is accessible from
        outside the package} {
    
    compile [saveas pkg/T661_15.java {
package pkg;
public class T661_15 {
    public static int FIELD = 0;
}
    }] [saveas T661_15_Test.java {
class T661_15_Test {
    int i = pkg.T661_15.FIELD;
}
    }]

} {PASS}
Test Case: 6.6.1-16
A class field declared public is accessible from outside the package when the .java source is loaded from the CLASSPATH

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-16 {A class field declared public is accessible from
        outside the package when the .java source is loaded from
        the CLASSPATH } {
    
    saveas pkg/T661_16.java {
package pkg;
public class T661_16 {
    public static int FIELD = 0;
}
    }
    compile -classpath . [saveas T661_16_Test.java {
class T661_16_Test {
    int i = pkg.T661_16.FIELD;
}
    }]

} {PASS}
Test Case: 6.6.1-17
A class field declared public is accessible from outside the package when the .class file is loaded from the CLASSPATH

Expected Result: PASS PASS

Regression Test:

tcltest::test 6.6.1-17 {A class field declared public is accessible from
        outside the package when the .class file is loaded from the
        CLASSPATH} {
    
    set result [compile [saveas pkg/T661_17.java {
package pkg;
public class T661_17 {
    public static int FIELD = 0;
}
    }]]
    delete pkg/T661_17.java
    list $result [compile -classpath . [saveas T661_17_Test.java {
class T661_17_Test {
    int i = pkg.T661_17.FIELD;
}
    }]]

} {PASS PASS}
Test Case: 6.6.1-array-1
Arrays are exactly as accessible as their component type

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-1 { Arrays are exactly as accessible as their
        component type } {
    
    compile [saveas T661a1.java {
class T661a1 {
    pkg.Array1[] ref;
}
    }] [saveas pkg/Array1.java {
package pkg;
public class Array1 {}
    }]

} {PASS}
Test Case: 6.6.1-array-2
Arrays are exactly as accessible as their component type

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-2 { Arrays are exactly as accessible as their
        component type } {
    
    compile [saveas T661a2.java {
class T661a2 {
    pkg.Array2[] ref;
}
    }] [saveas pkg/Array2.java {
package pkg;
class Array2 {}
    }]

} {FAIL}
Test Case: 6.6.1-array-3
Arrays are exactly as accessible as their component type

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-3 { Arrays are exactly as accessible as their
        component type } {
    
    compile [saveas T661a3.java {
class T661a3 {
    pkg.Array3.A[] ref;
}
    }] [saveas pkg/Array3.java {
package pkg;
public class Array3 {
    protected static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-4
Arrays are exactly as accessible as their component type

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-4 { Arrays are exactly as accessible as their
        component type } {
    
    compile [saveas T661a4.java {
class T661a4 extends pkg.Array4 {
    pkg.Array4.A[] ref;
}
    }] [saveas pkg/Array4.java {
package pkg;
public class Array4 {
    protected static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-5
Arrays are exactly as accessible as their component type

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-5 { Arrays are exactly as accessible as their
        component type } {
    
    compile [saveas T661a5.java {
class T661a5 extends pkg.Array5 {
    pkg.Array5.A[] ref;
}
    }] [saveas pkg/Array5.java {
package pkg;
public class Array5 {
    private static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-6
Arrays are exactly as accessible as their component type

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-6 { Arrays are exactly as accessible as their
        component type } {
    
    compile [saveas T661a6.java {
class T661a6 {
    Array6.A[] ref;
}
class Array6 {
    protected static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-7
Arrays are exactly as accessible as their component type

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-7 { Arrays are exactly as accessible as their
        component type } {
    
    compile [saveas T661a7.java {
class T661a7 {
    Array7.A[] ref;
}
class Array7 {
    static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-8
Arrays are exactly as accessible as their component type

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-8 { Arrays are exactly as accessible as their
        component type } {
    
    compile [saveas T661a8.java {
class T661a8 {
    Array8.A[] ref;
}
class Array8 {
    private static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-9
Arrays are exactly as accessible as their component type

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-9 { Arrays are exactly as accessible as their
        component type } {
    
    empty_class T661a9 {
        class Inner {
            Array[] ref;
        }
        private static class Array {}
    }

} {PASS}
Test Case: 6.6.1-array-10
The public length field of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-10 { The public length field of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a10.java {
class T661a10 {
    int i = pkg.Array10.array.length;
}
    }] [saveas pkg/Array10.java {
package pkg;
public class Array10 {
    public static A[] array;
    public static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-11
The public length field of an array is accessible only if the array class is accessible

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-11 { The public length field of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a11.java {
class T661a11 {
    int i = pkg.Array11.array.length;
}
    }] [saveas pkg/Array11.java {
package pkg;
public class Array11 {
    public static A[] array;
    protected static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-12
The public length field of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-12 { The public length field of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a12.java {
class T661a12 extends pkg.Array12 {
    int i = pkg.Array12.array.length;
}
    }] [saveas pkg/Array12.java {
package pkg;
public class Array12 {
    public static A[] array;
    protected static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-13
The public length field of an array is accessible only if the array class is accessible

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-13 { The public length field of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a13.java {
class T661a13 {
    int i = pkg.Array13.array.length;
}
    }] [saveas pkg/Array13.java {
package pkg;
public class Array13 {
    public static A[] array;
    static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-14
The public length field of an array is accessible only if the array class is accessible

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-14 { The public length field of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a14.java {
class T661a14 {
    int i = pkg.Array14.array.length;
}
    }] [saveas pkg/Array14.java {
package pkg;
public class Array14 {
    public static A[] array;
    private static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-15
The public length field of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-15 { The public length field of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a15.java {
class T661a15 {
    int i = Array15.array.length;
}
class Array15 {
    static A[] array;
    protected static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-16
The public length field of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-16 { The public length field of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a16.java {
class T661a16 {
    int i = Array16.array.length;
}
class Array16 {
    static A[] array;
    static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-17
The public length field of an array is accessible only if the array class is accessible

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-17 { The public length field of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a17.java {
class T661a17 {
    int i = Array17.array.length;
}
class Array17 {
    static A[] array;
    private static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-18
The public length field of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-18 { The public length field of an array is
        accessible only if the array class is accessible } {
    
    empty_class T661a18 {
        class Inner {
            int i = Array18.array.length;
        }
        static class Array18 {
            static A[] array;
            private static class A {}
        }
    }

} {PASS}
Test Case: 6.6.1-array-19
A public member method of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-19 { A public member method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a19.java {
class T661a19 {
    Object o = pkg.Array19.array.toString();
}
    }] [saveas pkg/Array19.java {
package pkg;
public class Array19 {
    public static A[] array;
    public static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-20
A public member method of an array is accessible only if the array class is accessible

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-20 { A public member method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a20.java {
class T661a20 {
    Object o = pkg.Array20.array.toString();
}
    }] [saveas pkg/Array20.java {
package pkg;
public class Array20 {
    public static A[] array;
    protected static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-21
A public member method of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-21 { A public member method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a21.java {
class T661a21 extends pkg.Array21 {
    Object o = pkg.Array21.array.toString();
}
    }] [saveas pkg/Array21.java {
package pkg;
public class Array21 {
    public static A[] array;
    protected static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-22
A public member method of an array is accessible only if the array class is accessible

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-22 { A public member method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a22.java {
class T661a22 {
    Object o = pkg.Array22.array.toString();
}
    }] [saveas pkg/Array22.java {
package pkg;
public class Array22 {
    public static A[] array;
    static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-23
A public member method of an array is accessible only if the array class is accessible

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-23 { A public member method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a23.java {
class T661a23 {
    Object o = pkg.Array23.array.toString();
}
    }] [saveas pkg/Array23.java {
package pkg;
public class Array23 {
    public static A[] array;
    private static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-24
A public member method of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-24 { A public member method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a24.java {
class T661a24 {
    Object o = Array24.array.toString();
}
class Array24 {
    static A[] array;
    protected static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-25
A public member method of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-25 { A public member method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a25.java {
class T661a25 {
    Object o = Array25.array.toString();
}
class Array25 {
    static A[] array;
    static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-26
A public member method of an array is accessible only if the array class is accessible

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-26 { A public member method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a26.java {
class T661a26 {
    Object o = Array26.array.toString();
}
class Array26 {
    static A[] array;
    private static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-27
A public member method of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-27 { A public member method of an array is
        accessible only if the array class is accessible } {
    
    empty_class T661a27 {
        class Inner {
            Object o = Array27.array.toString();
        }
        static class Array27 {
            static A[] array;
            private static class A {}
        }
    }

} {PASS}
Test Case: 6.6.1-array-28
The public clone method of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-28 { The public clone method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a28.java {
class T661a28 {
    Object o = pkg.Array28.array.clone();
}
    }] [saveas pkg/Array28.java {
package pkg;
public class Array28 {
    public static A[] array;
    public static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-29
The public clone method of an array is accessible only if the array class is accessible

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-29 { The public clone method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a29.java {
class T661a29 {
    Object o = pkg.Array29.array.clone();
}
    }] [saveas pkg/Array29.java {
package pkg;
public class Array29 {
    public static A[] array;
    protected static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-30
The public clone method of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-30 { The public clone method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a30.java {
class T661a30 extends pkg.Array30 {
    Object o = pkg.Array30.array.clone();
}
    }] [saveas pkg/Array30.java {
package pkg;
public class Array30 {
    public static A[] array;
    protected static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-31
The public clone method of an array is accessible only if the array class is accessible

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-31 { The public clone method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a31.java {
class T661a31 {
    Object o = pkg.Array31.array.clone();
}
    }] [saveas pkg/Array31.java {
package pkg;
public class Array31 {
    public static A[] array;
    static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-32
The public clone method of an array is accessible only if the array class is accessible

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-32 { The public clone method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a32.java {
class T661a32 {
    Object o = pkg.Array32.array.clone();
}
    }] [saveas pkg/Array32.java {
package pkg;
public class Array32 {
    public static A[] array;
    private static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-33
The public clone method of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-33 { The public clone method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a33.java {
class T661a33 {
    Object o = Array33.array.clone();
}
class Array33 {
    static A[] array;
    protected static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-34
The public clone method of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-34 { The public clone method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a34.java {
class T661a34 {
    Object o = Array34.array.clone();
}
class Array34 {
    static A[] array;
    static class A {}
}
    }]

} {PASS}
Test Case: 6.6.1-array-35
The public clone method of an array is accessible only if the array class is accessible

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.1-array-35 { The public clone method of an array is
        accessible only if the array class is accessible } {
    
    compile [saveas T661a35.java {
class T661a35 {
    Object o = Array35.array.clone();
}
class Array35 {
    static A[] array;
    private static class A {}
}
    }]

} {FAIL}
Test Case: 6.6.1-array-36
The public clone method of an array is accessible only if the array class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 6.6.1-array-36 { The public clone method of an array is
        accessible only if the array class is accessible } {
    
    empty_class T661a36 {
        class Inner {
            Object o = Array36.array.clone();
        }
        static class Array36 {
            static A[] array;
            private static class A {}
        }
    }

} {PASS}

6.6.2.1

Directory : tests/jls/names/access-control/details-on-protected-access/protected-member


Test Case: 6.6.2.1-protected-static-field-1
Access to a protected static field is legal in the same package

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-field-1 { Access to a protected
        static field is legal in the same package } {
    
    compile [saveas T6621psf1a.java {
class T6621psf1a {
    protected static int i;
}
class T6621psf1b {
    int j = T6621psf1a.i++;
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-field-2
Access to a protected static field is illegal outside the package in a non-subclass

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-static-field-2 { Access to a protected
        static field is illegal outside the package in a non-subclass } {
    
    compile [saveas p1/T6621psf2a.java {
package p1;
public class T6621psf2a {
    protected static int i;
}
    }] [saveas T6621psf2b.java {
class T6621psf2b {
    int j = p1.T6621psf2a.i++;
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-static-field-3
Access to a protected static field is legal outside the package in a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-field-3 { Access to a protected
        static field is legal outside the package in a subclass, regardless
        of the type of the qualifier } {
    
    compile [saveas p1/T6621psf3a.java {
package p1;
public class T6621psf3a {
    protected static int i;
}
    }] [saveas T6621psf3b.java {
class T6621psf3b extends p1.T6621psf3a {
    int j = p1.T6621psf3a.i++;
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-field-4
Access to a protected static field is legal outside the package in a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-field-4 { Access to a protected
        static field is legal outside the package in a subclass, regardless
        of the type of the qualifier } {
    
    compile [saveas p1/T6621psf4a.java {
package p1;
public class T6621psf4a {
    protected static int i;
}
    }] [saveas p1/T6621psf4b.java {
package p1;
public class T6621psf4b extends T6621psf4a {}
    }] [saveas T6621psf4c.java {
class T6621psf4c extends p1.T6621psf4a {
    int j = p1.T6621psf4b.i++;
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-field-5
Access to a protected static field is legal outside the package in a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-field-5 { Access to a protected
        static field is legal outside the package in a subclass, regardless
        of the type of the qualifier } {
    
    compile [saveas p1/T6621psf5a.java {
package p1;
public class T6621psf5a {
    protected static int i;
}
    }] [saveas p1/T6621psf5c.java {
package p1;
public class T6621psf5c extends p2.T6621psf5b {}
    }] [saveas p2/T6621psf5b.java {
package p2;
public class T6621psf5b extends p1.T6621psf5a {
    int j = p1.T6621psf5c.i++;
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-field-6
Access to a protected static field is legal outside the package in the body of a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-field-6 { Access to a protected
        static field is legal outside the package in the body of a subclass,
        regardless of the type of the qualifier } {
    
    compile [saveas p1/T6621psf6a.java {
package p1;
public class T6621psf6a {
    protected static int i;
}
    }] [saveas T6621psf6b.java {
class T6621psf6b extends p1.T6621psf6a {
    Object o = new Object() {
        { p1.T6621psf6a.i++; }
    };
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-field-7
Access to a protected static field is legal outside the package in the body of a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-field-7 { Access to a protected
        static field is legal outside the package in the body of a subclass,
        regardless of the type of the qualifier } {
    
    compile [saveas p1/T6621psf7a.java {
package p1;
public class T6621psf7a {
    protected static int i;
}
    }] [saveas p1/T6621psf7b.java {
package p1;
public class T6621psf7b extends T6621psf7a {}
    }] [saveas T6621psf7c.java {
class T6621psf7c extends p1.T6621psf7a {
    Object o = new Object() {
        { p1.T6621psf7b.i++; }
    };
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-field-8
Access to a protected static field is legal outside the package in the body of a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-field-8 { Access to a protected
        static field is legal outside the package in the body of a subclass,
        regardless of the type of the qualifier } {
    
    compile [saveas p1/T6621psf8a.java {
package p1;
public class T6621psf8a {
    protected static int i;
}
    }] [saveas p1/T6621psf8c.java {
package p1;
public class T6621psf8c extends p2.T6621psf8b {}
    }] [saveas p2/T6621psf8b.java {
package p2;
public class T6621psf8b extends p1.T6621psf8a {
    Object o = new Object() {
        { p1.T6621psf8c.i++; }
    };
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-instance-field-1
Access to a protected instance field is legal in the same package

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-instance-field-1 { Access to a protected
        instance field is legal in the same package } {
    
    compile [saveas T6621pif1a.java {
class T6621pif1a {
    protected int i;
}
class T6621pif1b {
    int j = new T6621pif1a().i++;
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-instance-field-2
Access to a protected instance field is illegal outside the package in a non-subclass

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-instance-field-2 { Access to a protected
        instance field is illegal outside the package in a non-subclass } {
    
    compile [saveas p1/T6621pif2a.java {
package p1;
public class T6621pif2a {
    protected int i;
}
    }] [saveas T6621pif2b.java {
class T6621pif2b {
    int j = new p1.T6621pif2a().i++;
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-instance-field-3
Access to a protected instance field is legal outside the package in a subclass only if the qualifier is the type the access occurs in

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-instance-field-3 { Access to a protected
        instance field is legal outside the package in a subclass only
        if the qualifier is the type the access occurs in } {
    
    compile [saveas p1/T6621pif3a.java {
package p1;
public class T6621pif3a {
    protected int i;
}
    }] [saveas T6621pif3b.java {
class T6621pif3b extends p1.T6621pif3a {
    int j = new p1.T6621pif3a().i++;
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-instance-field-4
Access to a protected instance field is legal outside the package in a subclass only if the qualifier is the type the access occurs in

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-instance-field-4 { Access to a protected
        instance field is legal outside the package in a subclass only
        if the qualifier is the type the access occurs in } {
    
    compile [saveas p1/T6621pif4a.java {
package p1;
public class T6621pif4a {
    protected int i;
}
    }] [saveas p1/T6621pif4b.java {
package p1;
public class T6621pif4b extends T6621pif4a {}
    }] [saveas T6621pif4c.java {
class T6621pif4c extends p1.T6621pif4a {
    int j = new p1.T6621pif4b().i++;
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-instance-field-5
Access to a protected instance field is legal outside the package in a subclass only if the qualifier is the type the access occurs in

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-instance-field-5 { Access to a protected
        instance field is legal outside the package in a subclass only
        if the qualifier is the type the access occurs in } {
    
    compile [saveas p1/T6621pif5a.java {
package p1;
public class T6621pif5a {
    protected static int i;
}
    }] [saveas p1/T6621pif5c.java {
package p1;
public class T6621pif5c extends p2.T6621pif5b {}
    }] [saveas p2/T6621pif5b.java {
package p2;
public class T6621pif5b extends p1.T6621pif5a {
    int j = new p1.T6621pif5c().i++;
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-instance-field-6
Access to a protected instance field is legal outside the package in the body of a subclass only if the qualifier is the type the access occurs in

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-instance-field-6 { Access to a protected
        instance field is legal outside the package in the body of a subclass
        only if the qualifier is the type the access occurs in } {
    
    compile [saveas p1/T6621pif6a.java {
package p1;
public class T6621pif6a {
    protected int i;
}
    }] [saveas T6621pif6b.java {
class T6621pif6b extends p1.T6621pif6a {
    Object o = new Object() {
        { new p1.T6621pif6a().i++; }
    };
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-instance-field-7
Access to a protected instance field is legal outside the package in the body of a subclass only if the qualifier is the type the access occurs in

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-instance-field-7 { Access to a protected
        instance field is legal outside the package in the body of a subclass
        only if the qualifier is the type the access occurs in } {
    
    compile [saveas p1/T6621pif7a.java {
package p1;
public class T6621pif7a {
    protected int i;
}
    }] [saveas p1/T6621pif7b.java {
package p1;
public class T6621pif7b extends T6621pif7a {}
    }] [saveas T6621pif7c.java {
class T6621pif7c extends p1.T6621pif7a {
    Object o = new Object() {
        { new p1.T6621pif7b().i++; }
    };
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-instance-field-8
Access to a protected instance field is legal outside the package in the body of a subclass only if the qualifier is the type the access occurs in

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-instance-field-8 { Access to a protected
        instance field is legal outside the package in the body of a subclass
        only if the qualifier is the type the access occurs in } {
    
    compile [saveas p1/T6621pif8a.java {
package p1;
public class T6621pif8a {
    protected int i;
}
    }] [saveas p1/T6621pif8c.java {
package p1;
public class T6621pif8c extends p2.T6621pif8b {}
    }] [saveas p2/T6621pif8b.java {
package p2;
public class T6621pif8b extends p1.T6621pif8a {
    Object o = new Object() {
        { new p1.T6621pif8c().i++; }
    };
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-method-1
Access to a protected static method is legal in the same package

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-method-1 { Access to a protected
        static method is legal in the same package } {
    
    compile [saveas T6621psm1a.java {
class T6621psm1a {
    protected static void m() {}
}
class T6621psm1b {
    { T6621psm1a.m(); }
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-method-2
Access to a protected static method is illegal outside the package in a non-subclass

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-static-method-2 { Access to a protected
        static method is illegal outside the package in a non-subclass } {
    
    compile [saveas p1/T6621psm2a.java {
package p1;
public class T6621psm2a {
    protected static void m() {}
}
    }] [saveas T6621psm2b.java {
class T6621psm2b {
    { p1.T6621psm2a.m(); }
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-static-method-3
Access to a protected static method is legal outside the package in a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-method-3 { Access to a protected
        static method is legal outside the package in a subclass, regardless
        of the type of the qualifier } {
    
    compile [saveas p1/T6621psm3a.java {
package p1;
public class T6621psm3a {
    protected static void m() {}
}
    }] [saveas T6621psm3b.java {
class T6621psm3b extends p1.T6621psm3a {
    { p1.T6621psm3a.m(); }
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-method-4
Access to a protected static method is legal outside the package in a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-method-4 { Access to a protected
        static method is legal outside the package in a subclass, regardless
        of the type of the qualifier } {
    
    compile [saveas p1/T6621psm4a.java {
package p1;
public class T6621psm4a {
    protected static void m() {}
}
    }] [saveas p1/T6621psm4b.java {
package p1;
public class T6621psm4b extends T6621psm4a {}
    }] [saveas T6621psm4c.java {
class T6621psm4c extends p1.T6621psm4a {
    { p1.T6621psm4b.m(); }
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-method-5
Access to a protected static method is legal outside the package in a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-method-5 { Access to a protected
        static method is legal outside the package in a subclass, regardless
        of the type of the qualifier } {
    
    compile [saveas p1/T6621psm5a.java {
package p1;
public class T6621psm5a {
    protected static void m() {}
}
    }] [saveas p1/T6621psm5c.java {
package p1;
public class T6621psm5c extends p2.T6621psm5b {}
    }] [saveas p2/T6621psm5b.java {
package p2;
public class T6621psm5b extends p1.T6621psm5a {
    { p1.T6621psm5c.m(); }
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-method-6
Access to a protected static method is legal outside the package in the body of a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-method-6 { Access to a protected
        static method is legal outside the package in the body of a subclass,
        regardless of the type of the qualifier } {
    
    compile [saveas p1/T6621psm6a.java {
package p1;
public class T6621psm6a {
    protected static void m() {}
}
    }] [saveas T6621psm6b.java {
class T6621psm6b extends p1.T6621psm6a {
    Object o = new Object() {
        { p1.T6621psm6a.m(); }
    };
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-method-7
Access to a protected static method is legal outside the package in the body of a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-method-7 { Access to a protected
        static method is legal outside the package in the body of a subclass,
        regardless of the type of the qualifier } {
    
    compile [saveas p1/T6621psm7a.java {
package p1;
public class T6621psm7a {
    protected static void m() {}
}
    }] [saveas p1/T6621psm7b.java {
package p1;
public class T6621psm7b extends T6621psm7a {}
    }] [saveas T6621psm7c.java {
class T6621psm7c extends p1.T6621psm7a {
    Object o = new Object() {
        { p1.T6621psm7b.m(); }
    };
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-static-method-8
Access to a protected static method is legal outside the package in the body of a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-static-method-8 { Access to a protected
        static method is legal outside the package in the body of a subclass,
        regardless of the type of the qualifier } {
    
    compile [saveas p1/T6621psm8a.java {
package p1;
public class T6621psm8a {
    protected static void m() {}
}
    }] [saveas p1/T6621psm8c.java {
package p1;
public class T6621psm8c extends p2.T6621psm8b {}
    }] [saveas p2/T6621psm8b.java {
package p2;
public class T6621psm8b extends p1.T6621psm8a {
    Object o = new Object() {
        { p1.T6621psm8c.m(); }
    };
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-instance-method-1
Access to a protected instance method is legal in the same package

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-instance-method-1 { Access to a protected
        instance method is legal in the same package } {
    
    compile [saveas T6621pim1a.java {
class T6621pim1a {
    protected void m() {}
}
class T6621pim1b {
    { new T6621pim1a().m(); }
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-instance-method-2
Access to a protected instance method is illegal outside the package in a non-subclass

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-instance-method-2 { Access to a protected
        instance method is illegal outside the package in a non-subclass } {
    
    compile [saveas p1/T6621pim2a.java {
package p1;
public class T6621pim2a {
    protected void m() {}
}
    }] [saveas T6621pim2b.java {
class T6621pim2b {
    { new p1.T6621pim2a().m(); }
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-instance-method-3
Access to a protected instance method is legal outside the package in a subclass only if the qualifier is the type the access occurs in

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-instance-method-3 { Access to a protected
        instance method is legal outside the package in a subclass only
        if the qualifier is the type the access occurs in } {
    
    compile [saveas p1/T6621pim3a.java {
package p1;
public class T6621pim3a {
    protected void m() {}
}
    }] [saveas T6621pim3b.java {
class T6621pim3b extends p1.T6621pim3a {
    { new p1.T6621pim3a().m(); }
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-instance-method-4
Access to a protected instance method is legal outside the package in a subclass only if the qualifier is the type the access occurs in

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-instance-method-4 { Access to a protected
        instance method is legal outside the package in a subclass only
        if the qualifier is the type the access occurs in } {
    
    compile [saveas p1/T6621pim4a.java {
package p1;
public class T6621pim4a {
    protected void m() {}
}
    }] [saveas p1/T6621pim4b.java {
package p1;
public class T6621pim4b extends T6621pim4a {}
    }] [saveas T6621pim4c.java {
class T6621pim4c extends p1.T6621pim4a {
    { new p1.T6621pim4b().m(); }
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-instance-method-5
Access to a protected instance method is legal outside the package in a subclass only if the qualifier is the type the access occurs in

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-instance-method-5 { Access to a protected
        instance method is legal outside the package in a subclass only
        if the qualifier is the type the access occurs in } {
    
    compile [saveas p1/T6621pim5a.java {
package p1;
public class T6621pim5a {
    protected static void m() {}
}
    }] [saveas p1/T6621pim5c.java {
package p1;
public class T6621pim5c extends p2.T6621pim5b {}
    }] [saveas p2/T6621pim5b.java {
package p2;
public class T6621pim5b extends p1.T6621pim5a {
    { new p1.T6621pim5c().m(); }
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-instance-method-6
Access to a protected instance method is legal outside the package in the body of a subclass only if the qualifier is the type the access occurs in

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-instance-method-6 { Access to a protected
        instance method is legal outside the package in the body of a subclass
        only if the qualifier is the type the access occurs in } {
    
    compile [saveas p1/T6621pim6a.java {
package p1;
public class T6621pim6a {
    protected void m() {}
}
    }] [saveas T6621pim6b.java {
class T6621pim6b extends p1.T6621pim6a {
    Object o = new Object() {
        { new p1.T6621pim6a().m(); }
    };
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-instance-method-7
Access to a protected instance method is legal outside the package in the body of a subclass only if the qualifier is the type the access occurs in

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-instance-method-7 { Access to a protected
        instance method is legal outside the package in the body of a subclass
        only if the qualifier is the type the access occurs in } {
    
    compile [saveas p1/T6621pim7a.java {
package p1;
public class T6621pim7a {
    protected void m() {}
}
    }] [saveas p1/T6621pim7b.java {
package p1;
public class T6621pim7b extends T6621pim7a {}
    }] [saveas T6621pim7c.java {
class T6621pim7c extends p1.T6621pim7a {
    Object o = new Object() {
        { new p1.T6621pim7b().m(); }
    };
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-instance-method-8
Access to a protected instance method is legal outside the package in the body of a subclass only if the qualifier is the type the access occurs in

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-instance-method-8 { Access to a protected
        instance method is legal outside the package in the body of a subclass
        only if the qualifier is the type the access occurs in } {
    
    compile [saveas p1/T6621pim8a.java {
package p1;
public class T6621pim8a {
    protected void m() {}
}
    }] [saveas p1/T6621pim8c.java {
package p1;
public class T6621pim8c extends p2.T6621pim8b {}
    }] [saveas p2/T6621pim8b.java {
package p2;
public class T6621pim8b extends p1.T6621pim8a {
    Object o = new Object() {
        { new p1.T6621pim8c().m(); }
    };
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-type-1
Access to a protected member type is legal in the same package

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-type-1 { Access to a protected
        member type is legal in the same package } {
    
    compile [saveas T6621pt1a.java {
class T6621pt1a {
    protected class Inner {};
}
class T6621pt1b {
    Class c = T6621pt1a.Inner.class;
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-type-2
Access to a protected member type is illegal outside the package in a non-subclass

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.1-protected-type-2 { Access to a protected
        member type is illegal outside the package in a non-subclass } {
    
    compile [saveas p1/T6621pt2a.java {
package p1;
public class T6621pt2a {
    protected class Inner {}
}
    }] [saveas T6621pt2b.java {
class T6621pt2b {
    Class c = p1.T6621pt2a.Inner.class;
}
    }]

} {FAIL}
Test Case: 6.6.2.1-protected-type-3
Access to a protected member type is legal outside the package in a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-type-3 { Access to a protected
        member type is legal outside the package in a subclass, regardless
        of the type of the qualifier } {
    
    compile [saveas p1/T6621pt3a.java {
package p1;
public class T6621pt3a {
    protected class Inner {}
}
    }] [saveas T6621pt3b.java {
class T6621pt3b extends p1.T6621pt3a {
    Class c = p1.T6621pt3a.Inner.class;
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-type-4
Access to a protected member type is legal outside the package in a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-type-4 { Access to a protected
        member type is legal outside the package in a subclass, regardless
        of the type of the qualifier } {
    
    compile [saveas p1/T6621pt4a.java {
package p1;
public class T6621pt4a {
    protected class Inner {}
}
    }] [saveas p1/T6621pt4b.java {
package p1;
public class T6621pt4b extends T6621pt4a {}
    }] [saveas T6621pt4c.java {
class T6621pt4c extends p1.T6621pt4a {
    Class c = p1.T6621pt4b.Inner.class;
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-type-5
Access to a protected member type is legal outside the package in a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-type-5 { Access to a protected
        member type is legal outside the package in a subclass, regardless
        of the type of the qualifier } {
    
    compile [saveas p1/T6621pt5a.java {
package p1;
public class T6621pt5a {
    protected class Inner {}
}
    }] [saveas p1/T6621pt5c.java {
package p1;
public class T6621pt5c extends p2.T6621pt5b {}
    }] [saveas p2/T6621pt5b.java {
package p2;
public class T6621pt5b extends p1.T6621pt5a {
    Class c = p1.T6621pt5c.Inner.class;
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-type-6
Access to a protected member type is legal outside the package in the body of a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-type-6 { Access to a protected
        member type is legal outside the package in the body of a subclass,
        regardless of the type of the qualifier } {
    
    compile [saveas p1/T6621pt6a.java {
package p1;
public class T6621pt6a {
    protected class Inner {}
}
    }] [saveas T6621pt6b.java {
class T6621pt6b extends p1.T6621pt6a {
    Object o = new Object() {
        { Class c = p1.T6621pt6a.Inner.class; }
    };
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-type-7
Access to a protected member type is legal outside the package in the body of a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-type-7 { Access to a protected
        member type is legal outside the package in the body of a subclass,
        regardless of the type of the qualifier } {
    
    compile [saveas p1/T6621pt7a.java {
package p1;
public class T6621pt7a {
    protected class Inner {}
}
    }] [saveas p1/T6621pt7b.java {
package p1;
public class T6621pt7b extends T6621pt7a {}
    }] [saveas T6621pt7c.java {
class T6621pt7c extends p1.T6621pt7a {
    Object o = new Object() {
        { Class c = p1.T6621pt7b.Inner.class; }
    };
}
    }]

} {PASS}
Test Case: 6.6.2.1-protected-type-8
Access to a protected member type is legal outside the package in the body of a subclass, regardless of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.1-protected-type-8 { Access to a protected
        member type is legal outside the package in the body of a subclass,
        regardless of the type of the qualifier } {
    
    compile [saveas p1/T6621pt8a.java {
package p1;
public class T6621pt8a {
    protected class Inner {}
}
    }] [saveas p1/T6621pt8c.java {
package p1;
public class T6621pt8c extends p2.T6621pt8b {}
    }] [saveas p2/T6621pt8b.java {
package p2;
public class T6621pt8b extends p1.T6621pt8a {
    Object o = new Object() {
        { Class c = p1.T6621pt8c.Inner.class; }
    };
}
    }]

} {PASS}

6.6.2.2

Directory : tests/jls/names/access-control/details-on-protected-access/protected-constructor


Test Case: 6.6.2.2-protected-superctor-1
A protected superconstructor may be always be accessed

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.2-protected-superctor-1 { A protected superconstructor may
        be always be accessed } {
    
    compile [saveas T6622ps1a.java {
class T6622ps1a {
    protected T6622ps1a() {}
}
class T6622ps1b extends T6622ps1a {}
    }]

} {PASS}
Test Case: 6.6.2.2-protected-superctor-2
A protected superconstructor may be always be accessed

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.2-protected-superctor-2 { A protected superconstructor may
        be always be accessed } {
    
    compile [saveas p1/T6622ps2a.java {
package p1;
public class T6622ps2a {
    protected T6622ps2a() {}
}
    }] [saveas T6622ps2b.java {
class T6622ps2b extends p1.T6622ps2a {}
    }]

} {PASS}
Test Case: 6.6.2.2-protected-superctor-3
A protected superconstructor may be always be accessed, even by an anonymous class

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.2-protected-superctor-3 { A protected superconstructor may
        be always be accessed, even by an anonymous class } {
    
    compile [saveas T6622ps3a.java {
class T6622ps3a {
    protected T6622ps3a() {}
}
class T6622ps3b {
    Object o = new T6622ps3a() {};
}
    }]

} {PASS}
Test Case: 6.6.2.2-protected-superctor-4
A protected superconstructor may be always be accessed, even by an anonymous class

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.2-protected-superctor-4 { A protected superconstructor may
        be always be accessed, even by an anonymous class } {
    
    compile [saveas p1/T6622ps4a.java {
package p1;
public class T6622ps4a {
    protected T6622ps4a() {}
}
    }] [saveas T6622ps4b.java {
class T6622ps4b {
    Object o = new p1.T6622ps4a() {};
}
    }]

} {PASS}
Test Case: 6.6.2.2-protected-superctor-5
A protected superconstructor may always be accessed, even by a inner member class

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.2-protected-superctor-5 { A protected superconstructor may
        always be accessed, even by a inner member class } {
    
    compile [saveas p1/T6622ps5a.java {
package p1;
public class T6622ps5a {
    protected T6622ps5a() {}
}
    }] [saveas T6622ps5b.java {
class T6622ps5b {
    class C extends p1.T6622ps5a {}
}
    }]

} {PASS}
Test Case: 6.6.2.2-protected-creation-1
A protected constructor may be accessed by instance creation in the same package

Expected Result: PASS

Regression Test:

tcltest::test 6.6.2.2-protected-creation-1 { A protected constructor may
        be accessed by instance creation in the same package } {
    
    compile [saveas T6622pc1a.java {
class T6622pc1a {
    protected T6622pc1a() {}
}
class T6622pc1b {
    Object o = new T6622pc1a();
}
    }]

} {PASS}
Test Case: 6.6.2.2-protected-creation-2
A protected constructor may not be accessed by instance creation outside the same package

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.2-protected-creation-2 { A protected constructor may
        not be accessed by instance creation outside the same package } {
    
    compile [saveas p1/T6622pc2a.java {
package p1;
public class T6622pc2a {
    protected T6622pc2a() {}
}
    }] [saveas T6622pc2b.java {
class T6622pc2b {
    Object o = new p1.T6622pc2a();
}
    }]

} {FAIL}
Test Case: 6.6.2.2-protected-creation-3
A protected constructor may not be accessed by instance creation outside the same package, even when the access is in a subclass

Expected Result: FAIL

Regression Test:

tcltest::test 6.6.2.2-protected-creation-3 { A protected constructor may
        not be accessed by instance creation outside the same package,
        even when the access is in a subclass } {
    
    compile [saveas p1/T6622pc3a.java {
package p1;
public class T6622pc3a {
    protected T6622pc3a() {}
}
    }] [saveas T6622pc3b.java {
class T6622pc3b extends p1.T6622pc3a {
    Object o = new p1.T6622pc3a();
}
    }]

} {FAIL}

7.1

Directory : tests/jls/packages/package-members


Test Case: 7.1-unnamed-1
The unnamed package may not contain duplicate members

Expected Result: FAIL

Regression Test:

tcltest::test 7.1-unnamed-1 { The unnamed package may not contain duplicate
        members } {
    
    compile [saveas T71u1.java {
class T71u1 {}
class T71u1 {}
    }]

} {FAIL}
Test Case: 7.1-unnamed-2
The unnamed package may not contain duplicate members

Expected Result: FAIL

Regression Test:

tcltest::test 7.1-unnamed-2 { The unnamed package may not contain duplicate
        members } {
    
    compile [saveas T71u2.java {
class T71u2 {}
interface T71u2 {}
    }]

} {FAIL}
Test Case: 7.1-unnamed-3
The unnamed package may not contain duplicate members

Expected Result: FAIL

Regression Test:

tcltest::test 7.1-unnamed-3 { The unnamed package may not contain duplicate
        members } {
    
    compile [saveas T71u3.java {
interface T71u3 {}
interface T71u3 {}
    }]

} {FAIL}
Test Case: 7.1-unnamed-4
The unnamed package may not contain duplicate members

Expected Result: FAIL

Regression Test:

tcltest::test 7.1-unnamed-4 { The unnamed package may not contain duplicate
        members } {
    
    compile [saveas T71u4a.java {
class T71u4a {}
    }] [saveas T71u4b.java {
class T71u4a {} // duplicate of the one in file T71u4a
class T71u4b {}
    }]

} {FAIL}
Test Case: 7.1-named-1
A named package may not contain duplicate members

Expected Result: FAIL

Regression Test:

tcltest::test 7.1-named-1 { A named package may not contain duplicate
        members } {
    
    compile [saveas p1/T71n1.java {
package p1;
class T71n1 {}
class T71n1 {}
    }]

} {FAIL}
Test Case: 7.1-named-2
A named package may not contain duplicate members

Expected Result: FAIL

Regression Test:

tcltest::test 7.1-named-2 { A named package may not contain duplicate
        members } {
    
    compile [saveas p1/T71n2.java {
package p1;
class T71n2 {}
interface T71n2 {}
    }]

} {FAIL}
Test Case: 7.1-named-3
A named package may not contain duplicate members

Expected Result: FAIL

Regression Test:

tcltest::test 7.1-named-3 { A named package may not contain duplicate
        members } {
    
    compile [saveas p1/T71n3.java {
package p1;
interface T71n3 {}
interface T71n3 {}
    }]

} {FAIL}
Test Case: 7.1-named-4
A named package may not contain duplicate members

Expected Result: FAIL

Regression Test:

tcltest::test 7.1-named-4 { A named package may not contain duplicate
        members } {
    
    compile [saveas p1/T71n4a.java {
package p1;
class T71n4a {}
    }] [saveas p1/T71n4b.java {
package p1;
class T71n4a {} // duplicate of the one in file T71n4a
class T71n4b {}
    }]

} {FAIL}
Test Case: 7.1-named-5
A named package may not contain duplicate members

Expected Result: FAIL

Regression Test:

tcltest::test 7.1-named-5 { A named package may not contain duplicate
        members } {
    
    compile [saveas p1/T71n5/T71n5a.java {
package p1.T71n5;
class T71n5a {}
    }] [saveas p1/T71n5.java {
package p1;
class T71n5 {}
    }]

} {FAIL}
Test Case: 7.1-named-6
A named package may not contain duplicate members

Expected Result: FAIL

Regression Test:

tcltest::test 7.1-named-6 { A named package may not contain duplicate
        members } {
    
    compile [saveas p1/T71n6/T71n6a.java {
package p1.T71n6;
class T71n6a {}
    }] [saveas p1/T71n6.java {
package p1;
interface T71n6 {}
    }]

} {FAIL}
Test Case: 7.1-named-7
A named package may not contain duplicate members

Expected Result: FAIL

Regression Test:

tcltest::test 7.1-named-7 { A named package may not contain duplicate
        members } {
    
    compile [saveas java/lang.java {
package java;
class lang {}
    }]

} {FAIL}

7.3

Directory : tests/jls/packages/compilation-units


Test Case: 7.3-1
A compilation unit may be empty

Expected Result: PASS

Regression Test:

tcltest::test 7.3-1 { A compilation unit may be empty } {
    
    compile [saveas T731.java {}]

} {PASS}
Test Case: 7.3-2
A compilation unit may contain only a package statement

Expected Result: PASS

Regression Test:

tcltest::test 7.3-2 { A compilation unit may contain only a package statement } {
    
    compile [saveas test/T732.java {package test;}]

} {PASS}
Test Case: 7.3-3
A compilation unit may contain only import statements

Expected Result: PASS

Regression Test:

tcltest::test 7.3-3 { A compilation unit may contain only import statements } {
    
    compile [saveas T733.java {import java.io.*;}]

} {PASS}
Test Case: 7.3-4
A compilation unit may contain only a type declaration

Expected Result: PASS

Regression Test:

tcltest::test 7.3-4 { A compilation unit may contain only a type declaration } {
    
    compile [saveas T734.java {class T734 {}}]

} {PASS}
Test Case: 7.3-5
Type declarations are optional in compilation units

Expected Result: PASS

Regression Test:

tcltest::test 7.3-5 { Type declarations are optional in compilation units } {
    
    compile [saveas test/T735.java {package test; import java.io.*;}]

} {PASS}
Test Case: 7.3-6
Package declarations are optional in compilation units

Expected Result: PASS

Regression Test:

tcltest::test 7.3-6 { Package declarations are optional in compilation units } {
    
    compile [saveas T736.java {import java.io.*; class T736 {}}]

} {PASS}
Test Case: 7.3-7
Import declarations are optional in compilation units

Expected Result: PASS

Regression Test:

tcltest::test 7.3-7 { Import declarations are optional in compilation units } {
    
    compile [saveas test/T737.java {package test; class T737 {}}]

} {PASS}
Test Case: 7.3-8
Compilation units may contain package, import, and type-declarations

Expected Result: PASS

Regression Test:

tcltest::test 7.3-8 { Compilation units may contain package, import, and
        type-declarations } {
    
    compile [saveas test/T738.java {package test; import java.io.*; class T738 {}}]

} {PASS}
Test Case: 7.3-9
package must come before import

Expected Result: FAIL

Regression Test:

tcltest::test 7.3-9 { package must come before import } {
    
    compile [saveas test/T739.java {import java.io.*; package test;}]

} {FAIL}
Test Case: 7.3-10
package must come before type-declarations

Expected Result: FAIL

Regression Test:

tcltest::test 7.3-10 { package must come before type-declarations } {
    
    compile [saveas test/T7310.java {class T7310 {} package test;}]

} {FAIL}
Test Case: 7.3-11
import must come before type-declarations

Expected Result: FAIL

Regression Test:

tcltest::test 7.3-11 { import must come before type-declarations } {
    
    compile [saveas T7311.java {class T7311 {} import java.io.*;}]

} {FAIL}
Test Case: 7.3-12
import must come before type-declarations, in this case, the extra ;

Expected Result: FAIL

Regression Test:

tcltest::test 7.3-12 { import must come before type-declarations,
        in this case, the extra ; } {
    
    compile [saveas test/T7312.java {package test;; import java.io.*;}]

} {FAIL}
Test Case: 7.3-13
Every compilation unit implicitly imports every public type from java.lang

Expected Result: PASS

Regression Test:

tcltest::test 7.3-13 { Every compilation unit implicitly imports
        every public type from java.lang } {
    
     compile [saveas test/T7313.java {
package test; class T7313 {
    Object o;
    String s;
    Integer i;
}
}]

} {PASS}

7.4.1

Directory : tests/jls/packages/package-declarations/named-packages


Test Case: 7.4.1-1
compiler should not generate error when compiling a class with a package statement that defines a package that can not be located on the CLASSPATH.

Expected Result: PASS

Regression Test:

tcltest::test 7.4.1-1 {compiler should not generate error when
        compiling a class with a package statement that defines a package
        that can not be located on the CLASSPATH.} {
    
    compile [saveas ClassInNewPackage.java  {
package some_package_that_is_not_known_at_compile_time;

public class ClassInNewPackage {}
}]

} {PASS}

7.4.2

Directory : tests/jls/packages/package-declarations/unnamed-packages


Test Case: 7.4.2-1
Create a public class in the default package

Expected Result: PASS

Regression Test:

tcltest::test 7.4.2-1 {Create a public class in the default package} {
    
    compile [saveas T742_1a.java {
public class T742_1a {}
class T742_1b extends T742_1a {}
    }]

} {PASS}
Test Case: 7.4.2-2
Extend a class in the default package with another class in default package

Expected Result: PASS

Regression Test:

tcltest::test 7.4.2-2 {Extend a class in the default package with
        another class in default package} {
    
    saveas T742_2a.java "class T742_2a {}"
    compile [saveas T742_2b.java {
class T742_2b extends T742_2a {}
    }]

} {PASS}
Test Case: 7.4.2-3
Extend a class in the default package with another class in default package

Expected Result: PASS

Regression Test:

tcltest::test 7.4.2-3 {Extend a class in the default package with
        another class in default package} {
    
    compile [saveas T742_3a.java "class T742_3a {}"]
    delete T742_3a.java
    compile -classpath . [saveas T742_3b.java {
class T742_3b extends T742_3a {}
    }]

} {PASS}
Test Case: 7.4.2-subpackage-1
the unnamed package has no subpackages. Therefore, in a compilation unit in the unnamed package, a member type does not conflict with named packages

Expected Result: PASS

Regression Test:

tcltest::test 7.4.2-subpackage-1 { the unnamed package has no subpackages.
        Therefore, in a compilation unit in the unnamed package, a member type
        does not conflict with named packages } {
    
    compile [saveas java.java "class java {}"]

} {PASS}
Test Case: 7.4.2-subpackage-2
the unnamed package has no subpackages. Therefore, in a compilation unit in the unnamed package, a member type does not conflict with named packages

Expected Result: PASS

Regression Test:

tcltest::test 7.4.2-subpackage-2 { the unnamed package has no subpackages.
        Therefore, in a compilation unit in the unnamed package, a member type
        does not conflict with named packages } {
    
    compile [saveas p1.java "class p1 {}"] [saveas p1/T742s2.java {
package p1;
class T742s2 {}
    }]

} {PASS}

7.5.1

Directory : tests/jls/packages/import-declarations/single-type-import-declaration


Test Case: 7.5.1-1
Doing an import of a class that does not exist should fail

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-1 { Doing an import of a class that does not exist
        should fail} {
    
    compile [saveas T7511.java {
import foo.a_class_that_does_not_exist;
public class T7511 {}
}]

} {FAIL}
Test Case: 7.5.1-2
Cannot import from the unnamed package

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-2 { Cannot import from the unnamed package } {
    
    compile [saveas ClassInDefaultPackage.java {
public class T7512a {}
}] [saveas foo/T7512b.java {
package foo;
import T7512a;
public class T7512b extends T7512a {}
}]

} {FAIL}
Test Case: 7.5.1-3
Importing a non-public class should fail

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-3 { Importing a non-public class should fail} {
    
    compile [saveas foo/T7513a.java {
package foo;
class T7513a {}
}] [saveas T7513b.java {
import foo.T7513a;
class T7513b extends T7513a {}
}]

} {FAIL}
Test Case: 7.5.1-4
Cannot import from the unnamed package

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-4 { Cannot import from the unnamed package } {
    
    compile [saveas ClassInDefaultPackage.java {
public class T7514a {
    public static class Inner {}
}
}] [saveas foo/T7514b.java {
package foo;
import T7514a.Inner;
public class T7514b extends Inner {}
}]

} {FAIL}
Test Case: 7.5.1-canonical-1
A single-type import must give the canonical name of a class

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-canonical-1 { A single-type import must give the
        canonical name of a class } {
    
    compile [saveas p1/T751c1a.java {
package p1;
public class T751c1a {
    public static class Inner {}
}
}] [saveas p1/T751c1b.java {
package p1;
public class T751c1b extends T751c1a {}
}] [saveas T751c1c.java {
import p1.T751c1b.Inner; // not canonical
class T751c1c extends Inner {}
}]

} {FAIL}
Test Case: 7.5.1-canonical-2
Imports use the canonical name, even if a prefix name exists in the current package or prior import

Expected Result: PASS

Regression Test:

tcltest::test 7.5.1-canonical-2 { Imports use the canonical name, even if a
        prefix name exists in the current package or prior import } {
    
    compile [saveas T751c2/Sub/T751c2a.java {
package T751c2.Sub;
public class T751c2a {}
}] [saveas T751c2/T751c2.java {
package T751c2;
import T751c2.Sub.T751c2a;
public class T751c2 extends T751c2a {}
}]

} {PASS}
Test Case: 7.5.1-canonical-3
Imports use the canonical name, hence local and anonymous classes (which do not have a canonical name) cannot be imported

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-canonical-3 { Imports use the canonical name, hence local
        and anonymous classes (which do not have a canonical name) cannot
        be imported } {
    
    compile [saveas p1/T751c3a.java {
package p1;
public class T751c3a {
    static Object o = new Object() {};
}
}] [saveas T751c3b.java {
    // Compilers are not required to use T751c3a$1 as the anonymous class
    // name, but it is a common choice
import p1.T751c3a$1;
class T751c3b {}
}]

} {FAIL}
Test Case: 7.5.1-accessible-1
A single-type import must name an accessible type

Expected Result: PASS

Regression Test:

tcltest::test 7.5.1-accessible-1 { A single-type import must name an
        accessible type } {
    
    compile [saveas p1/T751a1a.java {
package p1;
class T751a1a {
    interface Inner {}
}
}] [saveas p1/T751a1b.java {
package p1;
import p1.T751a1a.Inner;
class T751a1b implements Inner {}
}]

} {PASS}
Test Case: 7.5.1-accessible-2
A single-type import must name an accessible type

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-accessible-2 { A single-type import must name an
        accessible type } {
    
    compile [saveas p1/T751a2a.java {
package p1;
public class T751a2a {
    private interface Inner {}
}
}] [saveas T751a2b.java {
import p1.T751a2a.Inner;
class T751a2b implements Inner {}
}]

} {FAIL}
Test Case: 7.5.1-accessible-3
A single-type import must name an accessible type

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-accessible-3 { A single-type import must name an
        accessible type } {
    
    compile [saveas p1/T751a3a.java {
package p1;
class T751a3a {
    public interface Inner {}
}
}] [saveas T751a3b.java {
import p1.T751a3a.Inner; // Inner is public, but T751a3a is not accessible
class T751a3b implements Inner {}
}]

} {FAIL}
Test Case: 7.5.1-accessible-4
A single-type import must name an accessible type

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-accessible-4 { A single-type import must name an
        accessible type } {
    
    compile [saveas p1/T751a4a.java {
package p1;
import p1.T751a4a.Inner; // not accessible outside class body
class T751a4a {
    private class Inner {}
}
}]

} {FAIL}
Test Case: 7.5.1-accessible-5
A single-type import must name an accessible type

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-accessible-5 { A single-type import must name an
        accessible type } {
    
    compile [saveas p1/T751a5a.java {
package p1;
public class T751a5a {
    protected class Inner {}
}
}] [saveas T751a5b.java {
import p1.T751a5a.Inner; // not accessible outside body of subclass
class T751a5b extends p1.T751a5a {}
}]

} {FAIL}
Test Case: 7.5.1-shadow-1
A single-type import shadows an otherwise accessible top-level type in another compilation unit

Expected Result: PASS

Regression Test:

tcltest::test 7.5.1-shadow-1 { A single-type import shadows an otherwise
        accessible top-level type in another compilation unit } {
    
    compile [saveas p1/T751s1a.java {
package p1;
public class T751s1a {}
}] [saveas p2/T751s1a.java {
package p2;
interface T751s1a {}
}] [saveas p2/T751s1b.java {
package p2;
import p1.T751s1a; // now T751s1a refers to a class, not an interface
class T751s1b extends T751s1a {}
}]

} {PASS}
Test Case: 7.5.1-shadow-2
A single-type import shadows an otherwise accessible top-level type in another compilation unit

Expected Result: PASS

Regression Test:

tcltest::test 7.5.1-shadow-2 { A single-type import shadows an otherwise
        accessible top-level type in another compilation unit } {
    
    compile [saveas p1/T751s2a.java {
package p1;
public class T751s2a {}
}] [saveas p2/T751s2a.java {
package p2;
interface T751s2a {}
}] [saveas p3/T751s2b.java {
package p3;
import p2.*;
import p1.T751s2a; // p2.T751s2a is shadowed by p1.T751s2a
class T751s2b extends T751s2a {}
}]

} {PASS}
Test Case: 7.5.1-duplicate-1
Importing the same class twice is legal

Expected Result: PASS

Regression Test:

tcltest::test 7.5.1-duplicate-1 { Importing the same class twice is legal } {
    
    compile [saveas p1/T751d1a.java {
package p1;
public class T751d1a {}
}] [saveas T751d1b.java {
import p1.T751d1a;
import p1.T751d1a;
class T751d1b extends T751d1a {}
}]

} {PASS}
Test Case: 7.5.1-duplicate-2
Importing two classes of the same name is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-duplicate-2 { Importing two classes of the same name is
        illegal } {
    
    compile [saveas p1/T751d2a.java {
package p1;
public class T751d2a {}
}] [saveas p2/T751d2a.java {
package p2;
public class T751d2a {}
}] [saveas T751d2b.java {
import p1.T751d2a;
import p2.T751d2a;
class T751d2b extends T751d2a {}
}]

} {FAIL}
Test Case: 7.5.1-duplicate-3
It is an error to single-type import a distinct type with the same name as one in the compilation unit

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-duplicate-3 { It is an error to single-type import a
        distinct type with the same name as one in the compilation unit } {
    
    compile [saveas p1/T751d3a.java {
package p1;
public class T751d3a {}
}] [saveas T751d3a.java {
import p1.T751d3a;
class T751d3a {}
}]

} {FAIL}
Test Case: 7.5.1-duplicate-4
It is legal to import the class being declared in a compilation unit

Expected Result: OK

Regression Test:

tcltest::test 7.5.1-duplicate-4 { It is legal to import the class being
        declared in a compilation unit } {
    
    ok_pass_or_warn [compile [saveas p1/T751d4a.java {
package p1;
import p1.T751d4a;
public class T751d4a {}
}]]

} {OK}
Test Case: 7.5.1-subpackage-1
Single-type import cannot import subpackages

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.1-subpackage-1 { Single-type import cannot import
        subpackages } {
    
    compile [saveas T751sub1.java {
import java.util;
class T751sub1 extends util.Random {}
}]

} {FAIL}

7.5.2

Directory : tests/jls/packages/import-declarations/type-import-on-demand-declaration


Test Case: 7.5.2-1
import *; is not a valid import statement

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.2-1 {import *; is not a valid import statement} {
    
    compile [saveas T7521.java  {
import *;
public class T7521 {}
}]

} {FAIL}
Test Case: 7.5.2-unnamed-1
Imports cannot occur from the unnamed package

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.2-unnamed-1 { Imports cannot occur from the unnamed
        package } {
    
    compile [saveas T752u1a.java {
public class T752u1a {
    public static class Inner {}
}
}] [saveas p1/T752u1b.java {
package p1;
import T752u1a.*;
class T752u1b extends Inner {}
}]

} {FAIL}
Test Case: 7.5.2-canonical-1
A type-import-on-demand must use canonical package or type names

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.2-canonical-1 { A type-import-on-demand must use canonical
        package or type names } {
    
    compile [saveas p1/T752c1a.java {
package p1;
public class T752c1a {
    public static class Middle {
        public static class Inner {}
    }
}
}] [saveas p1/T752c1b.java {
package p1;
public class T752c1b extends T752c1a {}
}] [saveas T752c1c.java {
import p1.T752c1b.Middle.*; // not canonical
class T752c1c extends Inner {}
}]

} {FAIL}
Test Case: 7.5.2-canonical-2
Imports use the canonical name, even if a prefix name exists in the current package or prior import

Expected Result: PASS

Regression Test:

tcltest::test 7.5.2-canonical-2 { Imports use the canonical name, even if a
        prefix name exists in the current package or prior import } {
    
    compile [saveas T752c2/Sub/T752c2a.java {
package T752c2.Sub;
public class T752c2a {}
}] [saveas T752c2/T752c2.java {
package T752c2;
import T752c2.Sub.*;
public class T752c2 extends T752c2a {}
}]

} {PASS}
Test Case: 7.5.2-canonical-3
Imports on demand work on a class which does not have member types, such that nothing is imported; contrast this with single-type imports which require the imported type exist

Expected Result: PASS

Regression Test:

tcltest::test 7.5.2-canonical-3 { Imports on demand work on a class which does
        not have member types, such that nothing is imported; contrast this
        with single-type imports which require the imported type exist } {
    
    compile [saveas p1/T752c3a.java {
package p1;
public class T752c3a {}
}] [saveas T752c3b.java {
import p1.T752c3a.*; // nothing imported
class T752c3b {}
}]

} {PASS}
Test Case: 7.5.2-canonical-4
Imports use the canonical name, hence local and anonymous classes (which do not have a canonical name) cannot be imported

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.2-canonical-4 { Imports use the canonical name, hence local
        and anonymous classes (which do not have a canonical name) cannot
        be imported } {
    
    compile [saveas p1/T752c4a.java {
package p1;
public class T752c4a {
    static Object o = new Object() {};
}
}] [saveas T752c4b.java {
import p1.*;
class T752c4b {
    // Compilers are not required to use T752c4a$1 as the anonymous class
    // name, but it is a common choice
    Object o = new T752c4a$1();
}
}]

} {FAIL}
Test Case: 7.5.2-accessible-1
It is an error for an import statement to mention an inaccessible type or package

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.2-accessible-1 { It is an error for an import statement to
        mention an inaccessible type or package } {
    
    compile [saveas T752a1.java {
import non_existant_package.*;
class T752a1 {}
}]

} {FAIL}
Test Case: 7.5.2-accessible-2
It is an error for an import statement to mention an inaccessible type or package

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.2-accessible-2 { It is an error for an import statement to
        mention an inaccessible type or package } {
    
    compile [saveas p1/T752a2a.java {
package p1;
class T752a2a {
    public static class Inner {}
}
}] [saveas T752a2b.java {
import p1.T752a2a.*;
class T752a2b extends Inner {}
}]

} {FAIL}
Test Case: 7.5.2-accessible-3
It is an error for an import statement to mention an inaccessible type or package

Expected Result: PASS

Regression Test:

tcltest::test 7.5.2-accessible-3 { It is an error for an import statement to
        mention an inaccessible type or package } {
    
    compile [saveas p1/T752a3a.java {
package p1;
class T752a3a {
    interface Inner {}
}
}] [saveas p1/T752a3b.java {
package p1;
import p1.T752a3a.*;
class T752a3b implements Inner {}
}]

} {PASS}
Test Case: 7.5.2-accessible-4
Only the accessible types are imported by import-on-demand

Expected Result: PASS

Regression Test:

tcltest::test 7.5.2-accessible-4 { Only the accessible types are imported
        by import-on-demand } {
    
    compile [saveas p1/T752a4a.java {
package p1;
class T752a4a {}
}] [saveas p2/T752a4a.java {
package p2;
public class T752a4a {}
}] [saveas T752a4b.java {
import p1.*;
import p2.*;
class T752a4b extends T752a4a {}
}]

} {PASS}
Test Case: 7.5.2-accessible-5
Only the accessible types are imported by import-on-demand

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.2-accessible-5 { Only the accessible types are imported
        by import-on-demand } {
    
    compile [saveas p1/T752a5a.java {
package p1;
import p1.T752a5a.*; // does not import Inner
class T752a5a {
    private class Inner {}
}
class T752a5b extends Inner {}
}]

} {FAIL}
Test Case: 7.5.2-duplicate-1
It is legal to have duplicate imports

Expected Result: PASS

Regression Test:

tcltest::test 7.5.2-duplicate-1 { It is legal to have duplicate imports } {
    
    compile [saveas p1/T752d1a.java {
package p1;
public class T752d1a {}
}] [saveas T752d1b.java {
import p1.*;
import p1.*;
class T752d1b extends T752d1a {}
}]

} {PASS}
Test Case: 7.5.2-duplicate-2
It is legal to import the current package

Expected Result: PASS

Regression Test:

tcltest::test 7.5.2-duplicate-2 { It is legal to import the current package } {
    
    compile [saveas p1/T752d2.java {
package p1;
import p1.*;
class T752d2 {}
}]

} {PASS}
Test Case: 7.5.2-duplicate-3
It is legal to import a type declared in the same compilation unit

Expected Result: PASS

Regression Test:

tcltest::test 7.5.2-duplicate-3 { It is legal to import a type declared in
        the same compilation unit } {
    
    compile [saveas p1/T752d3a.java {
package p1;
import p1.T752d3a.*;
class T752d3a {
    static class Inner {}
}
class T752d3b extends Inner {}
}]

} {PASS}
Test Case: 7.5.2-duplicate-4
It is legal to import the same simple name on demand from multiple packages, if no ambiguous reference is made to that simple name

Expected Result: PASS

Regression Test:

tcltest::test 7.5.2-duplicate-4 { It is legal to import the same simple name
        on demand from multiple packages, if no ambiguous reference is made
        to that simple name } {
    
    compile [saveas p1/T752d4a.java {
package p1;
public class T752d4a {}
}] [saveas p2/T752d4a.java {
package p2;
public class T752d4a {}
}] [saveas T752d4b.java {
import p1.*;
import p2.*;
class T752d4b {}
}]

} {PASS}
Test Case: 7.5.2-inherited-1
Type import on demand does not include inherited member types, just declared ones

Expected Result: FAIL

Regression Test:

tcltest::test 7.5.2-inherited-1 { Type import on demand does not include
        inherited member types, just declared ones } {
    
    compile [saveas p1/T752i1a.java {
package p1;
import p1.T752i1b.*; // does not import T752i1a.Inner
class T752i1a {
    class Inner {}
}
class T752i1b extends T752i1a {
    class Extra {}
}
class T752i1c extends Inner {}
}]

} {FAIL}

7.5.3

Directory : tests/jls/packages/import-declarations/automatic-imports


Test Case: 7.5.3-automatic-1
All classes have an implicit import java.lang.*;

Expected Result: PASS

Regression Test:

tcltest::test 7.5.3-automatic-1 { All classes have an implicit import
        java.lang.*; } {
    
    compile [saveas T753a1.java {
class T753a1 extends Object {
    Integer i;
}
}]

} {PASS}
Test Case: 7.5.3-automatic-2
It is not an error to explicitly import from java.lang

Expected Result: PASS

Regression Test:

tcltest::test 7.5.3-automatic-2 { It is not an error to explicitly import
        from java.lang } {
    
    compile [saveas T753a2.java {
import java.lang.*;
import java.lang.Object;
import java.lang.Integer;
class T753a2 extends Object {
    Integer i;
}
}]

} {PASS}

7.5.4

Directory : tests/jls/packages/import-declarations/strange-example


Test Case: 7.5.4-example-1
Example in the JLS: imported names are not in scope in later imports

Expected Result: PASS

Regression Test:

tcltest::test 7.5.4-example-1 { Example in the JLS: imported names are not
        in scope in later imports } {
    
    compile [saveas Vector/Mosquito.java {
package Vector;
public class Mosquito {}
}] [saveas T754e1.java {
import java.util.Vector;
import Vector.Mosquito;
class T754e1 {
    public static void main(String[] args) {
        System.out.println(new Vector().getClass());
        System.out.println(new Mosquito().getClass());
    }
}
}]

} {PASS}

7.6

Directory : tests/jls/packages/top-level-type-declarations


Test Case: 7.6-syntax-1
; is a valid top-level TypeDeclaration

Expected Result: PASS

Regression Test:

tcltest::test 7.6-syntax-1 { ; is a valid top-level TypeDeclaration } {
    
    compile [saveas T76syntax1.java {;}]

} {PASS}
Test Case: 7.6-syntax-2
top-level TypeDeclaration

Expected Result: PASS

Regression Test:

tcltest::test 7.6-syntax-2 { top-level TypeDeclaration } {
    
    compile [saveas T76syntax2.java {
class T76syntax2 {}
}]

} {PASS}
Test Case: 7.6-syntax-3
top-level TypeDeclaration

Expected Result: PASS

Regression Test:

tcltest::test 7.6-syntax-3 { top-level TypeDeclaration } {
    
    compile [saveas T76syntax3.java {
interface T76syntax3 {}
}]

} {PASS}
Test Case: 7.6-scope-1
TypeDeclaration within a package must have a unique Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 7.6-scope-1 { TypeDeclaration within a package must
        have a unique Identifier } {
    
    compile [saveas T76scope1.java {
class Point {}
interface Point {}
}]

} {FAIL}
Test Case: 7.6-scope-2
TypeDeclaration cannot conflict with single-type-imports

Expected Result: FAIL

Regression Test:

tcltest::test 7.6-scope-2 { TypeDeclaration cannot conflict with
        single-type-imports } {
    
    compile [saveas T76scope2.java {
import java.util.Vector;
class Vector {}
    }]

} {FAIL}
Test Case: 7.6-scope-3
TypeDeclaration may shadow types in general imports

Expected Result: PASS

Regression Test:

tcltest::test 7.6-scope-3 {  TypeDeclaration may shadow types
        in general imports } {
    
    compile [saveas T76scope3.java {
import java.util.*;
class Vector {}
    }]

} {PASS}
Test Case: 7.6-scope-4
TypeDeclaration may have forward references within a compilation unit

Expected Result: PASS

Regression Test:

tcltest::test 7.6-scope-4 { TypeDeclaration may have forward
        references within a compilation unit } {
    
    compile [saveas T76scope4.java {
class first {
    second a;
}
class second {
    first b;
}
    }]

} {PASS}
Test Case: 7.6-name-1
Test fully qualified toplevel type name

Expected Result: PASS

Regression Test:

tcltest::test 7.6-name-1 { Test fully qualified toplevel type name } {
    
    compile [saveas T76name1pkg/pclass.java {
package T76name1pkg;
public class pclass {}
    }] [saveas T76name1.java {
class T76name1 extends T76name1pkg.pclass {}
}]

} {PASS}
Test Case: 7.6-name-2
Test fully qualified toplevel type name

Expected Result: PASS

Regression Test:

tcltest::test 7.6-name-2 { Test fully qualified toplevel type name } {
    
    compile [saveas T76name2pkg/pinterface.java {
package T76name2pkg;
public interface pinterface {}
    }] [saveas T76name2.java {
interface T76name2 extends T76name2pkg.pinterface {}
}]

} {PASS}
Test Case: 7.6-name-3
TypeDeclaration need not be related to the file name if class is not public

Expected Result: PASS

Regression Test:

tcltest::test 7.6-name-3 { TypeDeclaration need not be related
        to the file name if class is not public } {
    
    compile [saveas 76name3.java {
class Unrelated {}
}]

} {PASS}
Test Case: 7.6-optional-restrictions-1
Multiple classes may reside within a compilation unit, if secondary classes are not public and not referenced in other files

Expected Result: PASS

Regression Test:

tcltest::test 7.6-optional-restrictions-1 { Multiple classes may reside
        within a compilation unit, if secondary classes are not public and
        not referenced in other files } {
    
    saveas one.java {
class one {
    three three;
}
class three extends two {}
}

    saveas two.java {
class two extends one {}
}

    compile two.java

} {PASS}
Test Case: 7.6-modifiers-1
Top-level types may not be static

Expected Result: FAIL

Regression Test:

tcltest::test 7.6-modifiers-1 { Top-level types may not be static } {
    
    compile [saveas T76modifiers1.java {static class T76modifiers1 {}}]

} {FAIL}
Test Case: 7.6-modifiers-2
Top-level types may not be protected

Expected Result: FAIL

Regression Test:

tcltest::test 7.6-modifiers-2 { Top-level types may not be protected } {
    
    compile [saveas T76modifiers2.java {protected class T76modifiers2 {}}]

} {FAIL}
Test Case: 7.6-modifiers-3
Top-level types may not be private

Expected Result: FAIL

Regression Test:

tcltest::test 7.6-modifiers-3 { Top-level types may not be private } {
    
    compile [saveas T76modifiers3.java {private class T76modifiers3 {}}]

} {FAIL}
Test Case: 7.6-unnamed-scope-1
Top-level types are not in scope (not available by simple name) in import statements, so nothing can be imported from the unnamed package

Expected Result: FAIL

Regression Test:

tcltest::test 7.6-unnamed-scope-1 { Top-level types are not in scope (not available
        by simple name) in import statements, so nothing can be imported
        from the unnamed package } {
    
    saveas T76us1.java {public class T76us1 {}}
    saveas p/T76us1_1.java {
package p;
import T76us1;
class T76us1_1 {
    T76us1 t;
}
    }
    compile T76us1.java p/T76us1_1.java

} {FAIL}
Test Case: 7.6-unnamed-scope-2
Top-level types are not in scope (not available by simple name) in import statements, so nothing can be imported from the unnamed package

Expected Result: FAIL

Regression Test:

tcltest::test 7.6-unnamed-scope-2 { Top-level types are not in scope (not available
        by simple name) in import statements, so nothing can be imported
        from the unnamed package } {
    
    saveas T76us2.java {
public class T76us2 {
    public static class Inner {}
}
    }
    saveas p/T76us2_1.java {
package p;
import T76us2.Inner;
class T76us2_1 {
    Inner t;
}
    }
    compile T76us2.java p/T76us2_1.java

} {FAIL}
Test Case: 7.6-unnamed-scope-3
Top-level types are not in scope (not available by simple name) in import statements, so nothing can be imported from the unnamed package

Expected Result: FAIL

Regression Test:

tcltest::test 7.6-unnamed-scope-3 { Top-level types are not in scope (not available
        by simple name) in import statements, so nothing can be imported
        from the unnamed package } {
    
    saveas T76us3.java {
public class T76us3 {
    public static class Inner {}
}
    }
    saveas p/T76us3_1.java {
package p;
import T76us3.*;
class T76us3_1 {
    Inner t;
}
    }
    compile T76us3.java p/T76us3_1.java

} {FAIL}

8.1

Directory : tests/jls/classes/class-declaration


Test Case: 8.1-enclosing-1
A class may not have the same simple name as an enclosing type

Expected Result: FAIL

Regression Test:

tcltest::test 8.1-enclosing-1 { A class may not have the same simple name as
        an enclosing type } {
    
    empty_class T81e1 {
	class T81e1 {}
    }

} {FAIL}
Test Case: 8.1-enclosing-2
A class may not have the same simple name as an enclosing type

Expected Result: FAIL

Regression Test:

tcltest::test 8.1-enclosing-2 { A class may not have the same simple name as
        an enclosing type } {
    
    empty_class T81e2 {
	static class Foo {
	    // even though there is no enclosing instance T81e2, this clashes
	    class T81e2 {}
	}
    }

} {FAIL}
Test Case: 8.1-enclosing-3
A class may not have the same simple name as an enclosing type

Expected Result: FAIL

Regression Test:

tcltest::test 8.1-enclosing-3 { A class may not have the same simple name as
        an enclosing type } {
    
    compile [saveas T81e3.java {
interface T81e3 {
    class T81e3 {}
}
    }]

} {FAIL}
Test Case: 8.1-enclosing-4
A class may not have the same simple name as an enclosing type

Expected Result: PASS

Regression Test:

tcltest::test 8.1-enclosing-4 { A class may not have the same simple name as
        an enclosing type } {
    
    empty_class T81e4 {
	Object o = new T81e4() {}; // anonymous classes have no simple name
    }

} {PASS}
Test Case: 8.1-enclosing-5
A class may not have the same simple name as an enclosing type

Expected Result: FAIL

Regression Test:

tcltest::test 8.1-enclosing-5 { A class may not have the same simple name as
        an enclosing type } {
    
    empty_main T81e5 {
	class T81e5 {} // local classes have the same restrictions
    }

} {FAIL}
Test Case: 8.1-enclosing-6
A class may not have the same simple name as an enclosing type

Expected Result: FAIL

Regression Test:

tcltest::test 8.1-enclosing-6 { A class may not have the same simple name as
        an enclosing type } {
    
    empty_main T81e6 {
	class Local {
	    class Local {}
	}
    }

} {FAIL}
Test Case: 8.1-enclosing-7
A class may not have the same simple name as an enclosing type

Expected Result: FAIL

Regression Test:

tcltest::test 8.1-enclosing-7 { A class may not have the same simple name as
        an enclosing type } {
    
    empty_main T81e7 {
	class Local {
	    {
		class Local {}
	    }
	}
    }

} {FAIL}
Test Case: 8.1-enclosing-8
A class may not have the same simple name as an enclosing type

Expected Result: FAIL

Regression Test:

tcltest::test 8.1-enclosing-8 { A class may not have the same simple name as
        an enclosing type } {
    
    empty_main T81e8 {
	class Local {
	    Local(Object o) {}
	    Local() {
		this(new Object() {
		    class Local {}
		});
	    }
	}
    }

} {FAIL}

8.1.1

Directory : tests/jls/classes/class-declaration/class-modifiers


Test Case: 8.1.1-valid-modifier-1
public is valid ClassModifier

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1-valid-modifier-1 { public is valid ClassModifier } {
    
    compile [saveas T811vm1.java {
public class T811vm1 {}
    }]

} {PASS}
Test Case: 8.1.1-valid-modifier-2
abstract is valid ClassModifier

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1-valid-modifier-2 { abstract is valid ClassModifier } {
    
    compile [saveas T811vm2.java {
abstract class T811vm2 {}
    }]

} {PASS}
Test Case: 8.1.1-valid-modifier-3
final is valid ClassModifier

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1-valid-modifier-3 { final is valid ClassModifier } {
    
    compile [saveas T811vm3.java {
final class T811vm3 {}
    }]

} {PASS}
Test Case: 8.1.1-valid-modifier-4
strictfp is valid ClassModifier

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1-valid-modifier-4 { strictfp is valid ClassModifier } {
    
    compile [saveas T811vm4.java {
strictfp class T811vm4 {}
    }]

} {PASS}
Test Case: 8.1.1-duplicate-modifier-1
compile time error to specify a class modifier twice

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1-duplicate-modifier-1 { compile time
        error to specify a class modifier twice } {
    
    compile [saveas T811dm1.java {
public public class T811dm1 {}
    }]

} {FAIL}
Test Case: 8.1.1-duplicate-modifier-2
compile time error to specify a class modifier twice

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1-duplicate-modifier-2 { compile time
        error to specify a class modifier twice } {
    
    compile [saveas T811dm2.java {
abstract abstract class T811dm2 {}
    }]

} {FAIL}
Test Case: 8.1.1-duplicate-modifier-3
compile time error to specify a class modifier twice

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1-duplicate-modifier-3 { compile time
        error to specify a class modifier twice } {
    
    compile [saveas T811dm3.java {
final final class T811dm3 {}
    }]

} {FAIL}
Test Case: 8.1.1-duplicate-modifier-4
compile time error to specify a class modifier twice

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1-duplicate-modifier-4 { compile time
        error to specify a class modifier twice } {
    
    compile [saveas T811dm4.java {
strictfp strictfp class T811dm4 {}
    }]

} {FAIL}

8.1.1.1

Directory : tests/jls/classes/class-declaration/class-modifiers/abstract-classes


Test Case: 8.1.1.1-1
declare an abstract class

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-1 { declare an abstract class } {
    
    compile [saveas T8111_1.java "abstract class T8111_1 {}"]

} {PASS}
Test Case: 8.1.1.1-2
Compile time error on attempt to create an instance of an abstract class, even if it has no abstract methods

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-2 { Compile time error on attempt to create an instance
        of an abstract class, even if it has no abstract methods } {
    
    compile [saveas T8111_2.java {
abstract class T8111_2 {
    Object o = new T8111_2();
}
    }]

} {FAIL}
Test Case: 8.1.1.1-3
declare an abstract class with an abstract method

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-3 { declare an abstract class with an abstract method } {
    
    compile [saveas T8111_3.java {
abstract class T8111_3 {
    abstract void foo();
}
    }]

} {PASS}
Test Case: 8.1.1.1-4
a non-abstract class can not have an abstract method

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-4 { a non-abstract class can not have an abstract
        method } {
    
    empty_class T8111_4 {
	abstract void foo();
    }

} {FAIL}
Test Case: 8.1.1.1-5
An attempt to inherit from an abstract superclass containing an abstract method without implementing the abstract method or declaring the subclass abstract is a compile time error

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-5 { An attempt to inherit from an abstract superclass
        containing an abstract method without implementing the abstract method
        or declaring the subclass abstract is a compile time error } {
    
    compile [saveas T8111_5a.java {
abstract class T8111_5a {
    abstract void foo();
}
class T8111_5b extends T8111_5a {}
    }]

} {FAIL}
Test Case: 8.1.1.1-6
An attempt to inherit from an abstract superclass that extends another class that has an abstract method without implementing the abstract method or declaring the subclass abstract should generate a compile time error

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-6 { An attempt to inherit from an abstract superclass that
        extends another class that has an abstract method without implementing
        the abstract method or declaring the subclass abstract should generate
        a compile time error } {
    
    compile [saveas T8111_6a.java {
abstract class T8111_6a {
    abstract void foo();
}
abstract class T8111_6b extends T8111_6a {}
class T8111_6c extends T8111_6b {}
    }]

} {FAIL}
Test Case: 8.1.1.1-7
inherit from an abstract class with an abstract method, the subclass must be marked as abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-7 { inherit from an abstract class with an
        abstract method, the subclass must be marked as abstract } {
    
    compile [saveas T8111_7a.java {
abstract class T8111_7a {
    abstract void foo();
}
abstract class T8111_7b extends T8111_7a {}
    }]

} {PASS}
Test Case: 8.1.1.1-8
Compile time error on attempt to create an instance of an abstract class that inherits from and abstract class

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-8 { Compile time error on attempt to create an instance
        of an abstract class that inherits from and abstract class } {
    
    compile [saveas T8111_8.java {
abstract class T8111_8 {
    abstract void foo();
    Object o = new T8111_8();
}
    }]

} {FAIL}
Test Case: 8.1.1.1-9
It should be possible to inherit from an abstract class that defines no abstract methods, the subclass does not need to be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-9 { It should be possible to inherit from an abstract
        class that defines no abstract methods, the subclass does not need to
        be abstract } {
    
    compile [saveas T8111_9a.java {
abstract class T8111_9a {}
class T8111_9b extends T8111_9a {}
    }]

} {PASS}
Test Case: 8.1.1.1-10
Inherit from an abstract class with no methods that also inherits from an abstract class with no methods, subclass does not need to be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-10 { Inherit from an abstract class with no methods that
        also inherits from an abstract class with no methods, subclass does not
        need to be abstract } {
    
    compile [saveas T8111_10a.java {
abstract class T8111_10a {}
abstract class T8111_10b extends T8111_10a {}
class T8111_10c extends T8111_10b {}
    }]

} {PASS}
Test Case: 8.1.1.1-11
Implement an abstract method inherited from an abstract superclass

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-11 { Implement an abstract method inherited from an
        abstract superclass } {
    
  compile [saveas T8111_11a.java {
abstract class T8111_11a {
    abstract void foo();
}
abstract class T8111_11b extends T8111_11a {}
class T8111_11c extends T8111_11b {
    void foo() {}
}
    }]

} {PASS}
Test Case: 8.1.1.1-12
A compile time error should be generated when an abstract class has two methods with the same signature but different return types, this would create an abstract class that could not be sub-classed

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-12 { A compile time error should be generated when an
        abstract class has two methods with the same signature but different
        return types, this would create an abstract class that could not be
        sub-classed } {
    
    compile [saveas T8111_12a.java {
interface T8111_12a {
    void foo();
}
abstract class T8111_12b implements T8111_12a {
    public abstract int foo();
}
    }]

} {FAIL}
Test Case: 8.1.1.1-default-abstract-1
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-default-abstract-1 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da1a.java {
package p1;
public abstract class T8111da1a {
  abstract void m();
}
    }] [saveas T8111da1b.java {
class T8111da1b extends p1.T8111da1a {}
    }]

} {FAIL}
Test Case: 8.1.1.1-default-abstract-2
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-2 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da2a.java {
package p1;
public abstract class T8111da2a {
  abstract void m();
}
    }] [saveas T8111da2b.java {
abstract class T8111da2b extends p1.T8111da2a {}
    }]

} {PASS}
Test Case: 8.1.1.1-default-abstract-3
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-default-abstract-3 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da3a.java {
package p1;
public abstract class T8111da3a {
  abstract void m();
}
    }] [saveas T8111da3b.java {
abstract class T8111da3b extends p1.T8111da3a {}
class T8111da3c extends T8111da3b {}
    }]

} {FAIL}
Test Case: 8.1.1.1-default-abstract-4
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-4 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da4a.java {
package p1;
public abstract class T8111da4a {
  abstract void m();
}
    }] [saveas T8111da4b.java {
abstract class T8111da4b extends p1.T8111da4a {}
abstract class T8111da4c extends T8111da4b {}
    }]

} {PASS}
Test Case: 8.1.1.1-default-abstract-5
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-default-abstract-5 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da5a.java {
package p1;
public abstract class T8111da5a {
  abstract void m();
}
    }] [saveas p2/T8111da5b.java {
package p2;
public abstract class T8111da5b extends p1.T8111da5a {}
    }] [saveas p1/T8111da5c.java {
package p1;
public class T8111da5c extends p2.T8111da5b {}
    }]

} {FAIL}
Test Case: 8.1.1.1-default-abstract-6
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-6 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da6a.java {
package p1;
public abstract class T8111da6a {
  abstract void m();
}
    }] [saveas p2/T8111da6b.java {
package p2;
public abstract class T8111da6b extends p1.T8111da6a {}
    }] [saveas p1/T8111da6c.java {
package p1;
public abstract class T8111da6c extends p2.T8111da6b {}
    }]

} {PASS}
Test Case: 8.1.1.1-default-abstract-7
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-default-abstract-7 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da7b.java {
package p1;
abstract class T8111da7a {
  abstract void m();
}
public abstract class T8111da7b extends T8111da7a {}
    }] [saveas T8111da7c.java {
abstract class T8111da7c extends p1.T8111da7b {}
class T8111da7d extends T8111da7c {}
    }]

} {FAIL}
Test Case: 8.1.1.1-default-abstract-8
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-8 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da8b.java {
package p1;
abstract class T8111da8a {
  abstract void m();
}
public abstract class T8111da8b extends T8111da8a {}
    }] [saveas T8111da8c.java {
abstract class T8111da8c extends p1.T8111da8b {}
abstract class T8111da8d extends T8111da8c {}
    }]

} {PASS}
Test Case: 8.1.1.1-default-abstract-9
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-9 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da9a.java {
package p1;
public abstract class T8111da9a {
  abstract void m();
}
    }] [saveas p2/T8111da9b.java {
package p2;
public abstract class T8111da9b extends p1.T8111da9a {}
class T8111da9d extends p1.T8111da9c {}
    }] [saveas p1/T8111da9c.java {
package p1;
public abstract class T8111da9c extends p2.T8111da9b {
    void m() {} // overrides a.m(), even though a.m() is not inherited!
}
    }]

} {PASS}
Test Case: 8.1.1.1-default-abstract-10
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-10 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da10a.java {
package p1;
public abstract class T8111da10a {
    abstract void m();
}
class T8111da10c extends p2.T8111da10b {
    void m() {} // overrides a.m(), even though a.m() is not inherited!
}
    }] [saveas p2/T8111da10b.java {
package p2;
public abstract class T8111da10b extends p1.T8111da10a {}
    }]

} {PASS}
Test Case: 8.1.1.1-default-abstract-11
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: OK

Regression Test:

tcltest::test 8.1.1.1-default-abstract-11 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    ok_pass_or_warn [compile [saveas p1/T8111da11a.java {
package p1;
public abstract class T8111da11a {
    abstract void m();
}
    }] [saveas T8111da11b.java {
abstract class T8111da11b extends p1.T8111da11a {
    // b.m() does not implement a.m(), since it is not accessible; no concrete
    // subclass of b can exist (either it would be out of p1, and still not
    // implement a.m(), or it would be in p1, and cannot override a.m and b.m
    // simultaneously)
    protected int m() { return 1; }
}
    }]]

} {OK}
Test Case: 8.1.1.1-default-abstract-12
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: OK

Regression Test:

tcltest::test 8.1.1.1-default-abstract-12 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    ok_pass_or_warn [compile [saveas p1/T8111da12a.java {
package p1;
public abstract class T8111da12a {
    abstract void m();
}
    }] [saveas T8111da12b.java {
interface T8111da12b {
    int m();
}
abstract class T8111da12c extends p1.T8111da12a implements T8111da12b {
    // c is legal: since a.m is not inherited, there are no conflicting
    // signatures. However, no concrete subclass of c can exist (either it
    // would be out of p1, and not implement a.m(), or it would be in p1, and
    // cannot override a.m and b.m simultaneously)
}
    }]]

} {OK}
Test Case: 8.1.1.1-default-abstract-13
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-default-abstract-13 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da13a.java {
package p1;
public class T8111da13a {
    public abstract class C {
	abstract void m();
    }
    public interface I {
	void m();
    }
}
    }] [saveas T8111da13b.java {
class T8111da13b extends p1.T8111da13a {
    class D extends C implements I {
	// this implements I.m, but not C.m, since that was not accessible
	// therefore, C.m remains unimplemented, and D must be abstract
	public void m() {}
    }
}
    }]

} {FAIL}
Test Case: 8.1.1.1-default-abstract-14
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-14 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da14a.java {
package p1;
public class T8111da14a {
    public abstract class C {
	abstract void m();
    }
    public interface I {
	void m();
    }
}
    }] [saveas T8111da14b.java {
class T8111da14b extends p1.T8111da14a {
    abstract class D extends C implements I {
	// this implements I.m, but not C.m, since that was not accessible
	// therefore, C.m remains unimplemented, and D must be abstract
	public void m() {}
    }
}
    }]

} {PASS}
Test Case: 8.1.1.1-default-abstract-15
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-default-abstract-15 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da15a.java {
package p1;
public class T8111da15a {
    public abstract class C {
	abstract void m();
    }
    public interface I {
	void m();
    }
}
    }] [saveas T8111da15b.java {
class T8111da15b extends p1.T8111da15a {
    abstract class D extends C implements I {
	// this implements I.m, but not C.m, since that was not accessible
	// therefore, C.m remains unimplemented, and E must be abstract
	public void m() {}
    }
    class E extends D {}
}
    }]

} {FAIL}
Test Case: 8.1.1.1-default-abstract-16
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-16 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da16a.java {
package p1;
public class T8111da16a {
    public abstract class C {
	abstract void m();
    }
    public interface I {
	void m() throws Exception;
    }
}
    }] [saveas T8111da16b.java {
class T8111da16b extends p1.T8111da16a {
    abstract class D extends C implements I {
	// since C.m is not accessible, this only implements I.m, and hence can
	// throw. However, since C.m remains unimplemented, a concrete subclass
	// will have to override D.m and lose the throws clause
	public void m() throws Exception {}
    }
}
    }]

} {PASS}
Test Case: 8.1.1.1-default-abstract-17
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-default-abstract-17 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da17a.java {
package p1;
public class T8111da17a {
    public abstract class C {
	abstract void m();
    }
    public interface I {
	void m() throws Exception;
    }
}
class T8111da17c extends p2.T8111da17b {
    class E extends D {
	// This overrides and implements C.m (even though B.m was not inherited)
	// so it cannot throw
	public void m() throws Exception {}
    }
}
    }] [saveas p2/T8111da17b.java {
package p2;
public class T8111da17b extends p1.T8111da17a {
    abstract class D extends C implements I {
	// since C.m is not accessible, this only implements I.m, and hence can
	// throw. However, since C.m remains unimplemented, a concrete subclass
	// will have to override D.m and lose the throws clause
	public void m() throws Exception {}
    }
}
    }]

} {FAIL}
Test Case: 8.1.1.1-default-abstract-18
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-18 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da18a.java {
package p1;
public class T8111da18a {
    public abstract class C {
	abstract void m();
    }
    public interface I {
	void m() throws Exception;
    }
}
class T8111da18c extends p2.T8111da18b {
    class E extends D {
	// This overrides and implements C.m (even though B.m was not inherited)
	// so it cannot throw
	public void m() {}
    }
}
    }] [saveas p2/T8111da18b.java {
package p2;
public class T8111da18b extends p1.T8111da18a {
    public abstract class D extends C implements I {
	// since C.m is not accessible, this only implements I.m, and hence can
	// throw. However, since C.m remains unimplemented, a concrete subclass
	// will have to override D.m and lose the throws clause
	public void m() throws Exception {}
    }
}
    }]

} {PASS}
Test Case: 8.1.1.1-default-abstract-19
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-default-abstract-19 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da19a.java {
package p1;
public class T8111da19a {
    abstract class C {
	abstract void m();
    }
    interface I {
	void m();
    }
    protected abstract class C1 extends C implements I {}
}
    }] [saveas T8111da19b.java {
class T8111da19b extends p1.T8111da19a {
    class D extends C1 {
	// this implements I.m, but not C.m, since that was not accessible
	// therefore, C.m remains unimplemented, and D must be abstract
	public void m() {}
    }
}
    }]

} {FAIL}
Test Case: 8.1.1.1-default-abstract-20
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-20 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da20a.java {
package p1;
public class T8111da20a {
    abstract class C {
	abstract void m();
    }
    interface I {
	void m();
    }
    protected abstract class C1 extends C implements I {}
}
    }] [saveas T8111da20b.java {
class T8111da20b extends p1.T8111da20a {
    abstract class D extends C1 {
	// this implements I.m, but not C.m, since that was not accessible
	// therefore, C.m remains unimplemented, and D must be abstract
	public void m() {}
    }
}
    }]

} {PASS}
Test Case: 8.1.1.1-default-abstract-21
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-default-abstract-21 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da21a.java {
package p1;
public class T8111da21a {
    abstract class C {
	abstract void m();
    }
    interface I {
	void m();
    }
    protected abstract class C1 extends C implements I {}
}
    }] [saveas T8111da21b.java {
class T8111da21b extends p1.T8111da21a {
    abstract class D extends C1 {
	// this implements I.m, but not C.m, since that was not accessible
	// therefore, C.m remains unimplemented, and E must be abstract
	public void m() {}
    }
    class E extends D {}
}
    }]

} {FAIL}
Test Case: 8.1.1.1-default-abstract-22
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-22 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da22a.java {
package p1;
public class T8111da22a {
    abstract class C {
	abstract void m();
    }
    interface I {
	void m() throws Exception;
    }
    protected abstract class C1 extends C implements I {}
}
    }] [saveas T8111da22b.java {
class T8111da22b extends p1.T8111da22a {
    abstract class D extends C1 {
	// since C.m is not accessible, this only implements I.m, and hence can
	// throw. However, since C.m remains unimplemented, a concrete subclass
	// will have to override D.m and lose the throws clause
	public void m() throws Exception {}
    }
}
    }]

} {PASS}
Test Case: 8.1.1.1-default-abstract-23
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.1-default-abstract-23 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da23a.java {
package p1;
public class T8111da23a {
    abstract class C {
	abstract void m();
    }
    interface I {
	void m() throws Exception;
    }
    protected abstract class C1 extends C implements I {}
}
class T8111da23c extends p2.T8111da23b {
    class E extends D {
	// This overrides and implements C.m (even though B.m was not inherited)
	// so it cannot throw
	public void m() throws Exception {}
    }
}
    }] [saveas p2/T8111da23b.java {
package p2;
public class T8111da23b extends p1.T8111da23a {
    abstract class D extends C1 {
	// since C.m is not accessible, this only implements I.m, and hence can
	// throw. However, since C.m remains unimplemented, a concrete subclass
	// will have to override D.m and lose the throws clause
	public void m() throws Exception {}
    }
}
    }]

} {FAIL}
Test Case: 8.1.1.1-default-abstract-24
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-24 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da24a.java {
package p1;
public class T8111da24a {
    abstract class C {
	abstract void m();
    }
    interface I {
	void m() throws Exception;
    }
    protected abstract class C1 extends C implements I {}
}
class T8111da24c extends p2.T8111da24b {
    class E extends D {
	// This overrides and implements C.m (even though B.m was not inherited)
	// so it cannot throw
	public void m() {}
    }
}
    }] [saveas p2/T8111da24b.java {
package p2;
public class T8111da24b extends p1.T8111da24a {
    public abstract class D extends C1 {
	// since C.m is not accessible, this only implements I.m, and hence can
	// throw. However, since C.m remains unimplemented, a concrete subclass
	// will have to override D.m and lose the throws clause
	public void m() throws Exception {}
    }
}
    }]

} {PASS}
Test Case: 8.1.1.1-default-abstract-25
Default access abstract methods are not inherited across class boundaries, but do affect whether the class must be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.1.1-default-abstract-25 { Default access abstract methods are
        not inherited across class boundaries, but do affect whether the
        class must be abstract } {
    
    compile [saveas p1/T8111da25a.java {
package p1;
public abstract class T8111da25a {
    abstract void m();
}
    }] [saveas p2/T8111da25b.java {
package p2;
public abstract class T8111da25b extends p1.T8111da25a {
    // the change in signature is legal, since a.m is not inherited
    abstract int m() throws Exception;
}
class T8111da25d extends p1.T8111da25c {
    // With the implementation of b.m, there are no abstract methods in d
    int m() throws Exception { return 1; }
}
    }] [saveas p1/T8111da25c.java {
package p1;
public abstract class T8111da25c extends p2.T8111da25b {
    // this class must be abstract, even though it implements a.m
    void m() {} // overrides the non-inherited a.m!
}
    }]

} {PASS}

8.1.1.2

Directory : tests/jls/classes/class-declaration/class-modifiers/final-classes


Test Case: 8.1.1.2-conflicting-modifier-1
a final class cannot also be declared abstract

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.2-conflicting-modifier-1 { a final class
        cannot also be declared abstract } {
    
    compile [saveas T8112cm1.java {
final abstract class T8112cm1 {}
    }]

} {FAIL}
Test Case: 8.1.1.2-invalid-subclass-1
A compile-time error occurs if the name of a final class appears in the extends clause of another class declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.2-invalid-subclass-1 { A compile-time
        error occurs if the name of a final class appears
        in the extends clause of another class declaration } {
    
    compile [saveas T8112is1.java {
final class T8112is1_super {}
class T8112is1 extends T8112is1_super {}
    }]

} {FAIL}
Test Case: 8.1.1.2-invalid-subclass-2
A final class can not be extended via an anymous innerclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.1.2-invalid-subclass-2 { A final
        class can not be extended via an
        anymous innerclass } {
    
    compile [saveas T8112is2.java {
final class T8112is2 {
    Object o = new T8112is2() {};
}
    }]

} {FAIL}

8.1.2

Directory : tests/jls/classes/class-declaration/inner-classes-and-enclosing-instances


Test Case: 8.1.2-static-1
Static variables inside inner class must be compile-time constants

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-1 { Static variables inside inner class must be
        compile-time constants } {
    
    empty_class T812s1 {
        class I {
            // not primitive or String
            private final static String[] k = {"test", "test2"};
        }
    }

} {FAIL}
Test Case: 8.1.2-static-2
Static variables inside inner class must be compile-time constant

Expected Result: PASS

Regression Test:

tcltest::test 8.1.2-static-2 { Static variables inside inner class must be
        compile-time constant } {
    
    empty_class T812s2 {
        class I {
            // good
            private final static int k = 5;
        }
    }

} {PASS}
Test Case: 8.1.2-static-3
Static variables inside inner class must be compile-time constant

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-3 { Static variables inside inner class must be
        compile-time constant } {
    
    empty_class T812s3 {
        class I {
            // not final
            private static int k = 5;
        }
    }

} {FAIL}
Test Case: 8.1.2-static-4
Static variables inside inner class must be compile-time constant

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-4 { Static variables inside inner class must be
        compile-time constant } {
    
    empty_class T812s4 {
        class I {
            // not constant
            private static int k = new Integer(5).intValue();
        }
    }

} {FAIL}
Test Case: 8.1.2-static-5
static initializers are not allowed in anonymous classes

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-5 { static initializers are not allowed in
        anonymous classes } {
    
    empty_class T812s5 {
        Object o = new Object() {
            static {}
        };
    }

} {FAIL}
Test Case: 8.1.2-static-6
syntax error in illegal static initializers should not cause core dump (jikes bug 343)

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-6 { syntax error in illegal static initializers
        should not cause core dump (jikes bug 343) } {
    
    empty_class T812s6 {
        Object o = new Object() {
            static { a }
        };
    }

} {FAIL}
Test Case: 8.1.2-static-7
local classes in static context still may not have static members

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-7 { local classes in static context still may not
        have static members } {
    
    empty_main T812s7 {
        class Local { // in static main
            static int i;
        }
    }

} {FAIL}
Test Case: 8.1.2-static-8
local classes in static context still may not have static members

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-8 { local classes in static context still may not
        have static members } {
    
    empty_main T812s8 {
        class Local { // in static main
            static void foo() {}
        }
    }

} {FAIL}
Test Case: 8.1.2-static-9
local classes in static context still may not have static members

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-9 { local classes in static context still may not
        have static members } {
    
    empty_main T812s9 {
        class Local { // in static main
            static {}
        }
    }

} {FAIL}
Test Case: 8.1.2-static-10
local classes in static context still may not have static members

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-10 { local classes in static context still may not
        have static members } {
    
    empty_main T812s10 {
        class Local { // in static main
            static class Inner {}
        }
    }

} {FAIL}
Test Case: 8.1.2-static-11
local classes in static context still may not have static members

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-11 { local classes in static context still may not
        have static members } {
    
    empty_main T812s11 {
        class Local { // in static main
            interface Inner {}
        }
    }

} {FAIL}
Test Case: 8.1.2-static-12
anonymous classes in static context still may not have static members

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-12 { anonymous classes in static context still
        may not have static members } {
    
    empty_main T812s12 {
        new Object() { // in static main
            static int i;
        };
    }

} {FAIL}
Test Case: 8.1.2-static-13
anonymous classes in static context still may not have static members

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-13 { anonymous classes in static context still
        may not have static members } {
    
    empty_main T812s13 {
        new Object() { // in static main
            static void foo() {}
        };
    }

} {FAIL}
Test Case: 8.1.2-static-14
anonymous classes in static context still may not have static members

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-14 { anonymous classes in static context still
        may not have static members } {
    
    empty_main T812s14 {
        new Object() { // in static main
            static {}
        };
    }

} {FAIL}
Test Case: 8.1.2-static-15
anonymous classes in static context still may not have static members

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-15 { anonymous classes in static context still
        may not have static members } {
    
    empty_main T812s15 {
        new Object() { // in static main
            static class Inner {}
        };
    }

} {FAIL}
Test Case: 8.1.2-static-16
anonymous classes in static context still may not have static members

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-16 { anonymous classes in static context still
        may not have static members } {
    
    empty_main T812s16 {
        new Object() { // in static main
            interface Inner {}
        };
    }

} {FAIL}
Test Case: 8.1.2-static-17
anonymous classes in static context still may not have static members

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-static-17 { anonymous classes in static context still
        may not have static members } {
    
    empty_class T812s17 {
        T812s17(Object o) {}
        T812s17() {
            // static context in explicit constructor invocation
            this(new Object() {
                static int i;
            });
        }
    }

} {FAIL}
Test Case: 8.1.2-enclosing-1
A parameter used but not declared in an inner class must be declared final

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-enclosing-1 { A parameter used but not declared
        in an inner class must be declared final } {
    
    empty_class T812e1 {
void foo(int i)
{
    new Object() {
        int j = i = 0;
    };
}
    }

} {FAIL}
Test Case: 8.1.2-enclosing-2
A local used but not declared in an inner class must be declared final

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-enclosing-2 { A local used but not declared
        in an inner class must be declared final } {
    
    empty_class T812e2 {
void foo()
{
    int i = 0;
    new Object() {
        int j = i = 0;
    };
}
    }

} {FAIL}
Test Case: 8.1.2-enclosing-3
A blank final field may not be assigned within an inner class

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-enclosing-3 { A blank final field may not be
        assigned within an inner class } {
    
    empty_class T812e3 {
void foo()
{
    final int i;
    new Object() {
        int j = i = 0;
    };
}
    }

} {FAIL}
Test Case: 8.1.2-enclosing-4
A final field may not be assigned within an inner class

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-enclosing-4 { A final field may not be
        assigned within an inner class } {
    
    empty_class T812e4 {
void foo()
{
    final int i = 0;
    new Object() {
        int j = i = 0;
    };
}
    }

} {FAIL}
Test Case: 8.1.2-enclosing-5
A final parameter may not be assigned within an inner class

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.2-enclosing-5 { A final parameter may not be
        assigned within an inner class } {
    
    empty_class T812e5 {
void foo(final int i)
{
    new Object() {
        int j = i = 0;
    };
}
    }

} {FAIL}

8.1.3

Directory : tests/jls/classes/class-declaration/superclasses-and-subclasses


Test Case: 8.1.3-circular-1
Circular dependencies are illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-circular-1 { Circular dependencies are illegal } {
    
    compile [saveas T813c1.java {
class T813c1 implements T813c1.Inner {
    interface Inner {}
}
    }]

} {FAIL}
Test Case: 8.1.3-circular-2
Circular dependencies are illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-circular-2 { Circular dependencies are illegal } {
    
    compile [saveas T813c2.java {
class T813c2 extends T813c2.Inner {
    class Inner {}
}
    }]

} {FAIL}
Test Case: 8.1.3-circular-3
Circular dependencies are illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-circular-3 { Circular dependencies are illegal } {
    
    compile [saveas T813c3.java {
class T813c3 extends T813c3 {}
    }]

} {FAIL}
Test Case: 8.1.3-circular-4
Circular dependencies are illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-circular-4 { Circular dependencies are illegal } {
    
    compile [saveas T813c4.java {
class T813c4_1 extends T813c4_2 {}
class T813c4_2 extends T813c4_1 {}
    }]

} {FAIL}
Test Case: 8.1.3-circular-5
Circular dependencies are illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-circular-5 { Circular dependencies are illegal } {
    
    compile [saveas T813c5.java {
class T813c5_1 implements T813c5_2.Inner2 {
    interface Inner1 {}
}
class T813c5_2 {
    interface Inner2 extends T813c5_1.Inner1 {}
}
    }]

} {FAIL}
Test Case: 8.1.3-circular-6
Circular dependencies are illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-circular-6 { Circular dependencies are illegal } {
    
    empty_class T813c6 {
        void foo() {
            class Local extends Local {}
        }
    }

} {FAIL}
Test Case: 8.1.3-non-circular-1
In spite of cross-referencing, this declaration is not circular, but is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.1.3-non-circular-1 { In spite of cross-referencing, this
        declaration is not circular, but is legal } {
    
    compile [saveas T813nc1.java {
class T813nc1 {
    static class Inner1 extends Two.Inner2 {}
}
class Two extends T813nc1 {
    static class Inner2 {}
}
    }]

} {PASS}
Test Case: 8.1.3-object-1
Object must not have an extends clause

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-object-1 { Object must not have an extends clause } {
    
    set result [compile -classpath T813o1  [saveas T813o1/java/lang/Object.java {
package java.lang;
public class Object extends Object {
    public native boolean equals(Object o);
    public native int hashCode();
    public native String toString();
    protected native void finalize() throws Throwable;
    protected native Object clone() throws CloneNotSupportedException;
    public final native Class getClass();
    public final native void notify() throws IllegalMonitorStateException;
    public final native void notifyAll() throws IllegalMonitorStateException;
    public final native void wait()
        throws IllegalMonitorStateException, InterruptedException;
    public final native void wait(long ms)
        throws IllegalMonitorStateException, InterruptedException;
    public final native void wait(long ms, int ns)
        throws IllegalMonitorStateException, InterruptedException;
}
}]]
    saveas T813o1/java/dummy "need this for cleanup of directory we create"
    saveas T813o1/dummy "need this for cleanup of directory we create"
    return $result

} {FAIL}
Test Case: 8.1.3-object-2
Object must not have an extends clause

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-object-2 { Object must not have an extends clause } {
    
    set result [compile -classpath T813o2  [saveas T813o2/java/lang/Object.java {
package java.lang;
class C {}
public class Object extends C {
    public native boolean equals(Object o);
    public native int hashCode();
    public native String toString();
    protected native void finalize() throws Throwable;
    protected native Object clone() throws CloneNotSupportedException;
    public final native Class getClass();
    public final native void notify() throws IllegalMonitorStateException;
    public final native void notifyAll() throws IllegalMonitorStateException;
    public final native void wait()
        throws IllegalMonitorStateException, InterruptedException;
    public final native void wait(long ms)
        throws IllegalMonitorStateException, InterruptedException;
    public final native void wait(long ms, int ns)
        throws IllegalMonitorStateException, InterruptedException;
}
}]]
    saveas T813o2/java/dummy "need this for cleanup of directory we create"
    saveas T813o2/dummy "need this for cleanup of directory we create"
    return $result

} {FAIL}
Test Case: 8.1.3-object-3
Object must not have an extends clause

Expected Result: PASS

Regression Test:

tcltest::test 8.1.3-object-3 { Object must not have an extends clause } {
    
    set result [compile -classpath T813o3  [saveas T813o3/java/lang/Object.java {
package java.lang;
public class Object {
    public native boolean equals(Object o);
    public native int hashCode();
    public native String toString();
    protected native void finalize() throws Throwable;
    protected native Object clone() throws CloneNotSupportedException;
    public final native Class getClass();
    public final native void notify() throws IllegalMonitorStateException;
    public final native void notifyAll() throws IllegalMonitorStateException;
    public final native void wait()
        throws IllegalMonitorStateException, InterruptedException;
    public final native void wait(long ms)
        throws IllegalMonitorStateException, InterruptedException;
    public final native void wait(long ms, int ns)
        throws IllegalMonitorStateException, InterruptedException;
}
}]]
    saveas T813o3/java/dummy "need this for cleanup of directory we create"
    saveas T813o3/dummy "need this for cleanup of directory we create"
    return $result

} {PASS}
Test Case: 8.1.3-object-4
A class with no extends clause implicitly extends java.lang.Object, even if it is shadowed

Expected Result: PASS

Regression Test:

tcltest::test 8.1.3-object-4 { A class with no extends clause implicitly
        extends java.lang.Object, even if it is shadowed } {
    
    compile [saveas T813o4.java "class Object {}"]

} {PASS}
Test Case: 8.1.3-superclass-1
A superclass must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-superclass-1 { A superclass must be accessible } {
    
    compile [saveas T813s1.java "class T813s1 extends NoSuchClass {}"]

} {FAIL}
Test Case: 8.1.3-superclass-2
A superclass must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-superclass-2 { A superclass must be accessible } {
    
    compile [saveas p1/T813s2a.java {
package p1;
class T813s2a {}
    }] [saveas T813s2b.java {
class T813s2b extends p1.T813s2a {}
    }]

} {FAIL}
Test Case: 8.1.3-superclass-3
A superclass must be a class

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-superclass-3 { A superclass must be a class } {
    
    compile [saveas T813s3a.java {
interface T813s3a {}
class T813s3b extends T813s3a {}
}]

} {FAIL}
Test Case: 8.1.3-superclass-4
A superclass must be non-final

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-superclass-4 { A superclass must be non-final } {
    
    compile [saveas T813s4a.java {
final class T813s4a {}
class T813s4b extends T813s4a {}
}]

} {FAIL}
Test Case: 8.1.3-superclass-5
A superclass must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-superclass-5 { A superclass must be accessible } {
    
    compile [saveas p1/T813s5a.java {
package p1;
public class T813s5a {
    protected static class Inner {}
}
}] [saveas T813s5b.java {
class T813s5b extends p1.T813s5a.Inner {}
}]

} {FAIL}
Test Case: 8.1.3-superclass-6
A superclass must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.3-superclass-6 { A superclass must be accessible } {
    
    compile [saveas T813s6a.java {
class T813s6a {
    private static class Inner {}
}
class T813s6b extends T813s6a.Inner {}
}]

} {FAIL}
Test Case: 8.1.3-superclass-7
A superclass must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 8.1.3-superclass-7 { A superclass must be accessible } {
    
    compile [saveas p1/T813s7a.java {
package p1;
public class T813s7a {
    protected class Inner {}
}
    }] [saveas T813s7b.java {
class T813s7b extends p1.T813s7a {
    class Sub extends Inner {}
}
    }]

} {PASS}
Test Case: 8.1.3-superclass-8
A superclass must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 8.1.3-superclass-8 { A superclass must be accessible } {
    
    empty_class T813s8 {
	private class One {}
	class Two extends One {}
    }

} {PASS}
Test Case: 8.1.3-superclass-9
Test for accessible inner superclass - Jikes bug 3202

Expected Result: PASS

Regression Test:

tcltest::test 8.1.3-superclass-9 { Test for accessible inner superclass - Jikes
        bug 3202 } {
    
    compile [saveas T813s9_1.java {
class T813s9_1 {
    class One {}
}
class T813s9_2 extends T813s9_1 {
    class Two extends One {}
}
class T813s9_3 extends T813s9_2 {
    class Three extends Two {}
}
    }]

} {PASS}
Test Case: 8.1.3-superclass-10
A superclass name may be non-canonical

Expected Result: PASS

Regression Test:

tcltest::test 8.1.3-superclass-10 { A superclass name may be non-canonical } {
    
    compile [saveas T813s10a.java {
class T813s10a {
    static class Super {}
}
class T813s10b extends T813s10a {}
class T813s10c extends T813s10b.Super {}
    }]

} {PASS}
Test Case: 8.1.3-superclass-11
A superclass name may be non-canonical

Expected Result: PASS

Regression Test:

tcltest::test 8.1.3-superclass-11 { A superclass name may be non-canonical } {
    
    compile [saveas T813s11a.java {
class T813s11a {
    static class Super {}
}
class T813s11b extends T813s11a {
    class C extends Super {}
}
    }]

} {PASS}
Test Case: 8.1.3-superclass-12
A superclass name may be non-canonical

Expected Result: PASS

Regression Test:

tcltest::test 8.1.3-superclass-12 { A superclass name may be non-canonical } {
    
    compile [saveas T813s12a.java {
class T813s12a {
    static class Super {}
}
class T813s12b extends T813s12a {
    class C extends T813s12b.Super {}
}
    }]

} {PASS}
Test Case: 8.1.3-superclass-13
A superclass name may be non-canonical

Expected Result: PASS

Regression Test:

tcltest::test 8.1.3-superclass-13 { A superclass name may be non-canonical } {
    
    compile [saveas T813s13a.java {
class T813s13a {
    static class Super {}
}
class T813s13b extends T813s13a {
    class C extends Super {}
}
class T813s13c extends T813s13b.Super {}
    }]

} {PASS}

8.1.4

Directory : tests/jls/classes/class-declaration/superinterfaces


Test Case: 8.1.4-object-1
Object must not have an implements clause. The JLS doesn't list this, but compare 8.1.3 for extends clauses

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.4-object-1 { Object must not have an implements clause.
        The JLS doesn't list this, but compare 8.1.3 for extends clauses } {
    
    set result [compile -classpath T814o1  [saveas T814o1/java/lang/Object.java {
package java.lang;
interface I {}
public class Object implements I {
    public native boolean equals(Object o);
    public native int hashCode();
    public native String toString();
    protected native void finalize() throws Throwable;
    protected native Object clone() throws CloneNotSupportedException;
    public final native Class getClass();
    public final native void notify() throws IllegalMonitorStateException;
    public final native void notifyAll() throws IllegalMonitorStateException;
    public final native void wait()
        throws IllegalMonitorStateException, InterruptedException;
    public final native void wait(long ms)
        throws IllegalMonitorStateException, InterruptedException;
    public final native void wait(long ms, int ns)
        throws IllegalMonitorStateException, InterruptedException;
}
}]]
    saveas T814o1/java/dummy "need this for cleanup of directory we create"
    saveas T814o1/dummy "need this for cleanup of directory we create"
    return $result

} {FAIL}
Test Case: 8.1.4-superinterface-1
A superinterface must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.4-superinterface-1 { A superinterface must be accessible } {
    
    compile [saveas T814s1.java "class T814s1 implements NoSuchType {}"]

} {FAIL}
Test Case: 8.1.4-superinterface-2
A superinterface must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.4-superinterface-2 { A superinterface must be accessible } {
    
    compile [saveas p1/T814s2a.java {
package p1;
interface T814s2a {}
}] [saveas T814s2b.java {
class T814s2b implements p1.T814s2a {}
}]

} {FAIL}
Test Case: 8.1.4-superinterface-3
A superinterface must be an interface

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.4-superinterface-3 { A superinterface must be an
        interface } {
    
    compile [saveas T814s3a.java {
class T814s3a {}
class T814s3b implements T814s3a {}
}]

} {FAIL}
Test Case: 8.1.4-superinterface-4
A superinterface must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.4-superinterface-4 { A superinterface must be accessible } {
    
    compile [saveas p1/T814s4a.java {
package p1;
public class T814s4a {
    protected interface Inner {}
}
}] [saveas T814s4b.java {
class T814s4b implements p1.T814s4a.Inner {}
}]

} {FAIL}
Test Case: 8.1.4-superinterface-5
A superinterface must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.4-superinterface-5 { A superinterface must be accessible } {
    
    compile [saveas T814s5a.java {
class T814s5a {
    private interface Inner {}
}
class T814s5b implements T814s5a.Inner {}
}]

} {FAIL}
Test Case: 8.1.4-superinterface-6
A superinterface must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 8.1.4-superinterface-6 { A superinterface must be accessible } {
    
    compile [saveas p1/T814s6a.java {
package p1;
public class T814s6a {
    protected interface Inner {}
}
    }] [saveas T814s6b.java {
class T814s6b extends p1.T814s6a {
    class Sub implements Inner {}
}
    }]

} {PASS}
Test Case: 8.1.4-superinterface-7
A superinterface must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 8.1.4-superinterface-7 { A superinterface must be accessible } {
    
    empty_class T814s7 {
	private interface One {}
	class Two implements One {}
    }

} {PASS}
Test Case: 8.1.4-superinterface-8
A superinterface name may be non-canonical

Expected Result: PASS

Regression Test:

tcltest::test 8.1.4-superinterface-8 { A superinterface name may be
        non-canonical } {
    
    compile [saveas T814s8a.java {
class T814s8a {
    interface Super {}
}
class T814s8b extends T814s8a {}
class T814s8c implements T814s8b.Super {}
    }]

} {PASS}
Test Case: 8.1.4-superinterface-9
A superinterface name may be non-canonical

Expected Result: PASS

Regression Test:

tcltest::test 8.1.4-superinterface-9 { A superinterface name may be
        non-canonical } {
    
    compile [saveas T814s9a.java {
class T814s9a {
    interface Super {}
}
class T814s9b extends T814s9a {
    class C implements Super {}
}
    }]

} {PASS}
Test Case: 8.1.4-superinterface-10
A superinterface name may be non-canonical

Expected Result: PASS

Regression Test:

tcltest::test 8.1.4-superinterface-10 { A superinterface name may be
        non-canonical } {
    
    compile [saveas T814s10a.java {
class T814s10a {
    interface Super {}
}
class T814s10b extends T814s10a {
    class C implements T814s10b.Super {}
}
    }]

} {PASS}
Test Case: 8.1.4-superinterface-11
A superinterface name may be non-canonical

Expected Result: PASS

Regression Test:

tcltest::test 8.1.4-superinterface-11 { A superinterface name may be
        non-canonical } {
    
    compile [saveas T814s11a.java {
class T814s11a {
    interface Super {}
}
class T814s11b extends T814s11a {
    class C implements Super {}
}
class T814s11c implements T814s11b.Super {}
    }]

} {PASS}
Test Case: 8.1.4-duplicate-1
A class may not have duplicate superinterfaces

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.4-duplicate-1 { A class may not have duplicate
        superinterfaces } {
    
    compile [saveas T814d1.java {
class T814d1 implements Cloneable, Cloneable {}
}]

} {FAIL}
Test Case: 8.1.4-duplicate-2
A class may not have duplicate superinterfaces

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.4-duplicate-2 { A class may not have duplicate
        superinterfaces } {
    
    compile [saveas T814d2.java {
class T814d2 implements java.lang.Cloneable, Cloneable {}
}]

} {FAIL}
Test Case: 8.1.4-duplicate-3
A class may not have duplicate superinterfaces

Expected Result: PASS

Regression Test:

tcltest::test 8.1.4-duplicate-3 { A class may not have duplicate
        superinterfaces } {
    
    compile [saveas T814d3a.java {
interface T814d3a {}
interface T814d3b extends T814d3a {}
class T814d3c implements T814d3a, T814d3b {}
}]

} {PASS}
Test Case: 8.1.4-duplicate-4
A class may not have duplicate superinterfaces

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.4-duplicate-4 { A class may not have duplicate
        superinterfaces } {
    
    compile [saveas T814d4a.java {
class T814d4a {
    interface I {}
}
class T814d4b extends T814d4a {}
class T814d4c implements T814d4a.I, T814d4b.I {}
}]

} {FAIL}
Test Case: 8.1.4-abstract-1
A class must implement, or inherit an implementation, of all methods of its superinterfaces, or be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.4-abstract-1 { A class must implement, or inherit an
        implementation, of all methods of its superinterfaces, or be
        abstract } {
    
    compile [saveas T814a1a.java {
interface T814a1a {
    String toString();
}
class T814a1b implements T814a1a {}
}]

} {PASS}
Test Case: 8.1.4-abstract-2
A class must implement, or inherit an implementation, of all methods of its superinterfaces, or be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.4-abstract-2 { A class must implement, or inherit an
        implementation, of all methods of its superinterfaces, or be
        abstract } {
    
    compile [saveas T814a2a.java {
interface T814a2a {
    String foo();
}
class T814a2b implements T814a2a {}
}]

} {FAIL}
Test Case: 8.1.4-abstract-3
A class must implement, or inherit an implementation, of all methods of its superinterfaces, or be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.4-abstract-3 { A class must implement, or inherit an
        implementation, of all methods of its superinterfaces, or be
        abstract } {
    
    compile [saveas T814a3a.java {
interface T814a3a {
    String foo();
}
abstract class T814a3b implements T814a3a {}
}]

} {PASS}
Test Case: 8.1.4-abstract-4
A class must implement, or inherit an implementation, of all methods of its superinterfaces, or be abstract

Expected Result: PASS

Regression Test:

tcltest::test 8.1.4-abstract-4 { A class must implement, or inherit an
        implementation, of all methods of its superinterfaces, or be
        abstract } {
    
    compile [saveas T814a4.java {
interface Fish {
    int getNumberOfScales();
}
interface Piano {
    int getNumberOfScales();
}
class T814a4 implements Fish, Piano {
    // You can tune a piano, but can you tuna fish?
    public int getNumberOfScales() { return 91; }
}
}]

} {PASS}
Test Case: 8.1.4-conflict-1
Multiple superinterfaces must not conflict

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.4-conflict-1 { Multiple superinterfaces must not conflict } {
    
    compile [saveas T814c1.java {
interface Fish {
    int getNumberOfScales();
}
interface StringBass {
    double getNumberOfScales();
}
class T814c1 implements Fish, StringBass {
    public double getNumberOfScales() { return 91; }
}
}]

} {FAIL}
Test Case: 8.1.4-conflict-2
Multiple superinterfaces must not conflict

Expected Result: PASS

Regression Test:

tcltest::test 8.1.4-conflict-2 { Multiple superinterfaces must not conflict } {
    
    compile [saveas T814c2a.java {
class E1 extends Exception {}
class E2 extends Exception {}
class E3 extends Exception {}
interface T814c2a { void foo() throws E1, E2; }
interface T814c2b { void foo() throws E2, E3; }
class T814c2c implements T814c2a, T814c2b {
    public void foo() throws E2 {}
}
}]

} {PASS}
Test Case: 8.1.4-conflict-3
Multiple superinterfaces must not conflict

Expected Result: FAIL

Regression Test:

tcltest::test 8.1.4-conflict-3 { Multiple superinterfaces must not conflict } {
    
    compile [saveas T814c3.java {
class E1 extends Exception {}
class E2 extends Exception {}
class E3 extends Exception {}
interface T814c3a { void foo() throws E1, E2; }
interface T814c3b { void foo() throws E2, E3; }
class T814c3c implements T814c3a, T814c3b {
    public void foo() throws E1, E3 {}
}
}]

} {FAIL}

8.2

Directory : tests/jls/classes/class-members


Test Case: 8.2-accessibility-inherited-member-1
members declared public are accessible in a subclass

Expected Result: PASS

Regression Test:

tcltest::test 8.2-accessibility-inherited-member-1 { members
        declared public are accessible in a subclass } {
    
    saveas T82aim1.java {
class T82aim1 {
    public int foo;
}

class T82aim1_Test extends T82aim1 {
    void bar() { foo = 0; }
}
    }

    compile T82aim1.java

} {PASS}
Test Case: 8.2-accessibility-inherited-member-2
members declared public are accessible in a subclass

Expected Result: PASS

Regression Test:

tcltest::test 8.2-accessibility-inherited-member-2 { members
        declared public are accessible in a subclass } {
    
    saveas T82aim2.java {
class T82aim2 {
    public void foo() {}
}

class T82aim2_Test extends T82aim2 {
    void bar() { foo(); }
}
    }

    compile T82aim2.java

} {PASS}
Test Case: 8.2-accessibility-inherited-member-3
members declared protected are accessible in a subclass

Expected Result: PASS

Regression Test:

tcltest::test 8.2-accessibility-inherited-member-3 { members
        declared protected are accessible in a subclass } {
    
    saveas T82aim3.java {
class T82aim3 {
    protected int foo;
}

class T82aim3_Test extends T82aim3 {
    void bar() { foo = 0; }
}
    }

    compile T82aim3.java

} {PASS}
Test Case: 8.2-accessibility-inherited-member-4
members declared protected are accessible in a subclass

Expected Result: PASS

Regression Test:

tcltest::test 8.2-accessibility-inherited-member-4 { members
        declared protected are accessible in a subclass } {
    
    saveas T82aim4.java {
class T82aim4 {
    protected void foo() {}
}

class T82aim4_Test extends T82aim4 {
    void bar() { foo(); }
}
    }

    compile T82aim4.java

} {PASS}
Test Case: 8.2-accessibility-inherited-member-5
members declared private are not accessible in a subclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.2-accessibility-inherited-member-5 { members
        declared private are not accessible in a subclass } {
    
    saveas T82aim5.java {
class T82aim5 {
    private int foo;
}

class T82aim5_Test extends T82aim5 {
    void bar() { foo = 0; }
}
    }

    compile T82aim5.java

} {FAIL}
Test Case: 8.2-accessibility-inherited-member-6
members declared private are not accessible in a subclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.2-accessibility-inherited-member-6 { members
        declared private are not accessible in a subclass } {
    
    saveas T82aim6.java {
class T82aim6 {
    private void foo() {}
}

class T82aim6_Test extends T82aim6 {
    void bar() { foo(); }
}
    }

    compile T82aim6.java

} {FAIL}
Test Case: 8.2-accessibility-inherited-member-7
members with default protection are accessible in a subclass

Expected Result: PASS

Regression Test:

tcltest::test 8.2-accessibility-inherited-member-7 { members
        with default protection are accessible in a subclass } {
    
    saveas T82aim7.java {
class T82aim7 {
    int foo;
}

class T82aim7_Test extends T82aim7 {
    void bar() { foo = 0; }
}
    }

    compile T82aim7.java

} {PASS}
Test Case: 8.2-accessibility-inherited-member-8
members with default protection are accessible in a subclass

Expected Result: PASS

Regression Test:

tcltest::test 8.2-accessibility-inherited-member-8 { members
        with default protection are accessible in a subclass } {
    
    saveas T82aim8.java {
class T82aim8 {
    void foo() {}
}

class T82aim8_Test extends T82aim8 {
    void bar() { foo(); }
}
    }

    compile T82aim8.java

} {PASS}
Test Case: 8.2-constructor-not-inherited-1
A constructor is not a class member and is therefore not inherited

Expected Result: FAIL

Regression Test:

tcltest::test 8.2-constructor-not-inherited-1 { A constructor
        is not a class member and is therefore not inherited } {
    
    saveas T82cni1.java {
class T82cni1 {
    public T82cni1() {}
    public T82cni1(int value) {}
}

class T82cni1_Test extends T82cni1 {
    Object o = new T82cni1_Test(0);
}
    }

    compile T82cni1.java

} {FAIL}

8.3

Directory : tests/jls/classes/field-declarations


Test Case: 8.3-inheritance-1
A class inherits non-private accessible fields that it does not hide by redeclaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.3-inheritance-1 { A class inherits non-private accessible
        fields that it does not hide by redeclaration } {
    
    empty_class T83i1 {
	private int i;
	static class Inner extends T83i1 {
	    int j = i; // i not inherited, and enclosing i not available
	}
    }

} {FAIL}
Test Case: 8.3-inheritance-2
A class inherits non-private accessible fields that it does not hide by redeclaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.3-inheritance-2 { A class inherits non-private accessible
        fields that it does not hide by redeclaration } {
    
    empty_class T83i2 {
	private int i;
	class Inner extends T83i2 {
	    int j = this.i; // i not inherited
	}
    }

} {FAIL}
Test Case: 8.3-inheritance-3
A class inherits non-private accessible fields that it does not hide by redeclaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.3-inheritance-3 { A class inherits non-private accessible
        fields that it does not hide by redeclaration } {
    
    empty_class T83i3 {
	int i;
	static class One extends T83i3 {
	    private int i; // T83i3.i not inherited...
	}
	static class Two extends One {
	    int j = i; // ...so neither i is inherited; T83i3.i not available
	}
    }

} {FAIL}
Test Case: 8.3-inheritance-4
A class inherits non-private accessible fields that it does not hide by redeclaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.3-inheritance-4 { A class inherits non-private accessible
        fields that it does not hide by redeclaration } {
    
    empty_class T83i4 {
	int i;
	class One extends T83i4 {
	    private int i; // T83i4.i not inherited...
	}
	class Two extends One {
	    Two() {
		T83i4.this.super();
	    }
	    int j = this.i; // ...so neither i is inherited
	}
    }

} {FAIL}
Test Case: 8.3-inheritance-5
A class inherits non-private accessible fields that it does not hide by redeclaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.3-inheritance-5 { A class inherits non-private accessible
        fields that it does not hide by redeclaration } {
    
    compile [saveas p1/T83i5a.java {
package p1;
public class T83i5a {
    public int i;
    static class Inner extends p2.T83i5b {
	int j = i; // package i not inherited from b, enclosing i not available
    }
}
    }] [saveas p2/T83i5b.java {
package p2;
public class T83i5b extends p1.T83i5a {
    int i; // hides T83i5a.i
}
    }]

} {FAIL}
Test Case: 8.3-inheritance-6
A class inherits non-private accessible fields that it does not hide by redeclaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.3-inheritance-6 { A class inherits non-private accessible
        fields that it does not hide by redeclaration } {
    
    compile [saveas p1/T83i6a.java {
package p1;
public class T83i6a {
    public int i;
    class Inner extends p2.T83i6b {
	int j = this.i; // package i not inherited from b
    }
}
    }] [saveas p2/T83i6b.java {
package p2;
public class T83i6b extends p1.T83i6a {
    int i; // hides T83i6a.i
}
    }]

} {FAIL}
Test Case: 8.3-inheritance-7
A class inherits non-private accessible fields that it does not hide by redeclaration

Expected Result: PASS

Regression Test:

tcltest::test 8.3-inheritance-7 { A class inherits non-private accessible
        fields that it does not hide by redeclaration } {
    
    empty_class T83i7 {
	class One {
	    int i;
	}
	class Two extends One {
	    {
		i = this.i;
	    }
	}
    }

} {PASS}
Test Case: 8.3-inheritance-8
Multiple fields may be inherited with the same name, causing no problems if no ambiguous reference is made

Expected Result: PASS

Regression Test:

tcltest::test 8.3-inheritance-8 { Multiple fields may be inherited with the
        same name, causing no problems if no ambiguous reference is made } {
    
    empty_class T83i8 {
	interface I {
	    int i = 1;
	}
	class C {
	    int i;
	}
	class Sub extends C implements I {}
    }

} {PASS}
Test Case: 8.3-inheritance-9
Inheritance along multiple paths is still single inheritance

Expected Result: PASS

Regression Test:

tcltest::test 8.3-inheritance-9 { Inheritance along multiple paths is still
        single inheritance } {
    
    empty_class T83i9 {
	interface Super {
	    int i = 1;
	}
	interface I1 extends Super {}
	interface I2 extends Super {}
	class C implements I1, I2 {
	    int j = i;
	}
    }

} {PASS}
Test Case: 8.3-name-1
Duplicate field names are forbidden

Expected Result: FAIL

Regression Test:

tcltest::test 8.3-name-1 { Duplicate field names are forbidden } {
    
    empty_class T83n1 {
	int i, i;
    }

} {FAIL}
Test Case: 8.3-name-2
Field names may match method and type names

Expected Result: PASS

Regression Test:

tcltest::test 8.3-name-2 { Field names may match method and type names } {
    
    empty_class T83n2 {
	int i;
	void i() {}
	class i {}
    }

} {PASS}
Test Case: 8.3-hiding-1
Fields can hide supertype fields regardless of accessibility relationships

Expected Result: PASS

Regression Test:

tcltest::test 8.3-hiding-1 { Fields can hide supertype fields regardless of
        accessibility relationships } {
    
    empty_class T83h1 {
	class One {
	    public int pub;
	    protected int pro;
	    int pack;
	    private int priv;
	}
	class Two extends One {
	    private int pub;
	    private int pro;
	    private int pack;
	    private int priv;
	}
	class Three extends One {
	    int pub;
	    int pro;
	    int pack;
	    int priv;
	}
	class Four extends One {
	    protected int pub;
	    protected int pro;
	    protected int pack;
	    protected int priv;
	}
	class Five extends One {
	    public int pub;
	    public int pro;
	    public int pack;
	    public int priv;
	}
    }

} {PASS}
Test Case: 8.3-hiding-2
Fields can hide supertype fields regardless of type relationships

Expected Result: PASS

Regression Test:

tcltest::test 8.3-hiding-2 { Fields can hide supertype fields regardless of
        type relationships } {
    
    empty_class T83h2 {
	class One {
	    int i;
	}
	class Two extends One {
	    Object i;
	}
    }

} {PASS}
Test Case: 8.3-hiding-3
Fields can hide supertype fields regardless of instance relationships

Expected Result: PASS

Regression Test:

tcltest::test 8.3-hiding-3 { Fields can hide supertype fields regardless of
        instance relationships } {
    
    empty_class T83h3 {
	static class One {
	    static int stat;
	    int inst;
	}
	static class Two extends One {
	    int stat;
	    static int inst;
	}
    }

} {PASS}
Test Case: 8.3-hiding-4
Fields can hide supertype fields regardless of modifier relationships

Expected Result: PASS

Regression Test:

tcltest::test 8.3-hiding-4 { Fields can hide supertype fields regardless of
        modifier relationships } {
    
    empty_class T83h4 {
	class One {
	    final int fin = 1;
	    transient int trans;
	    volatile int vol;
	    int plain;
	}
	class Two extends One {
	    int fin;
	    int trans;
	    int vol;
	    int plain;
	}
	class Three extends One {
	    final int fin = 1;
	    final int trans = 1;
	    final int vol = 1;
	    final int plain = 1;
	}
	class Four extends One {
	    transient int fin;
	    transient int trans;
	    transient int vol;
	    transient int plain;
	}
	class Five extends One {
	    volatile int fin;
	    volatile int trans;
	    volatile int vol;
	    volatile int plain;
	}
    }

} {PASS}

8.3.1

Directory : tests/jls/classes/field-declarations/field-modifiers


Test Case: 8.3.1-access-1
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-access-1 { Multiple access modifiers is an error } {
    
    empty_class T831access1 {
        public public int i;
    }

} {FAIL}
Test Case: 8.3.1-access-2
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-access-2 { Multiple access modifiers is an error } {
    
    empty_class T831access2 {
        public protected int i;
    }

} {FAIL}
Test Case: 8.3.1-access-3
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-access-3 { Multiple access modifiers is an error } {
    
    empty_class T831access3 {
        public private int i;
    }

} {FAIL}
Test Case: 8.3.1-access-4
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-access-4 { Multiple access modifiers is an error } {
    
    empty_class T831access4 {
        protected public int i;
    }

} {FAIL}
Test Case: 8.3.1-access-5
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-access-5 { Multiple access modifiers is an error } {
    
    empty_class T831access5 {
        protected protected int i;
    }

} {FAIL}
Test Case: 8.3.1-access-6
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-access-6 { Multiple access modifiers is an error } {
    
    empty_class T831access6 {
        protected private int i;
    }

} {FAIL}
Test Case: 8.3.1-access-7
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-access-7 { Multiple access modifiers is an error } {
    
    empty_class T831access7 {
        private public int i;
    }

} {FAIL}
Test Case: 8.3.1-access-8
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-access-8 { Multiple access modifiers is an error } {
    
    empty_class T831access8 {
        private protected int i;
    }

} {FAIL}
Test Case: 8.3.1-access-9
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-access-9 { Multiple access modifiers is an error } {
    
    empty_class T831access9 {
        private private int i;
    }

} {FAIL}
Test Case: 8.3.1-access-10
A single access modifier is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-access-10 { A single access modifier is legal } {
    
    empty_class T831access10 {
        public int i;
    }

} {PASS}
Test Case: 8.3.1-access-11
A single access modifier is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-access-11 { A single access modifier is legal } {
    
    empty_class T831access11 {
        protected int i;
    }

} {PASS}
Test Case: 8.3.1-access-12
A single access modifier is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-access-12 { A single access modifier is legal } {
    
    empty_class T831access12 {
        private int i;
    }

} {PASS}
Test Case: 8.3.1-access-13
No access modifier is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-access-13 { No access modifier is legal } {
    
    empty_class T831access13 {
        int i;
    }

} {PASS}
Test Case: 8.3.1-static-1
static alone is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-static-1 { static alone is legal } {
    
    empty_class T831static1 {
        static int i;
    }

} {PASS}
Test Case: 8.3.1-static-2
public static is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-static-2 { public static is legal } {
    
    empty_class T831static2 {
        public static int i;
    }

} {PASS}
Test Case: 8.3.1-static-3
static public is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-static-3 { static public is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T831static3 {
        static public int i;
    }]

} {OK}
Test Case: 8.3.1-static-4
protected static is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-static-4 { protected static is legal } {
    
    empty_class T831static4 {
        protected static int i;
    }

} {PASS}
Test Case: 8.3.1-static-5
static protected is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-static-5 { static protected is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T831static5 {
        static protected int i;
    }]

} {OK}
Test Case: 8.3.1-static-6
private static is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-static-6 { private static is legal } {
    
    empty_class T831static6 {
        private static int i;
    }

} {PASS}
Test Case: 8.3.1-static-7
static private is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-static-7 { static private is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T831static7 {
        static private int i;
    }]

} {OK}
Test Case: 8.3.1-static-8
static static is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-static-8 { static static is illegal } {
    
    empty_class T831static8 {
        static static int i;
    }

} {FAIL}
Test Case: 8.3.1-static-9
static final is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-static-9 { static final is legal } {
    
    empty_class T831static9 {
        static final int i = 1;
    }

} {PASS}
Test Case: 8.3.1-static-10
final static is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-static-10 { final static is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T831static10 {
        final static int i = 1;
    }]

} {OK}
Test Case: 8.3.1-static-11
static transient is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-static-11 { static transient is legal } {
    
    empty_class T831static11 {
        static transient int i;
    }

} {PASS}
Test Case: 8.3.1-static-12
transient static is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-static-12 { transient static is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T831static12 {
        transient static int i;
    }]

} {OK}
Test Case: 8.3.1-static-13
static volatile is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-static-13 { static volatile is legal } {
    
    empty_class T831static13 {
        static volatile int i;
    }

} {PASS}
Test Case: 8.3.1-static-14
volatile static is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-static-14 { volatile static is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T831static14 {
	volatile static int i;
    }]

} {OK}
Test Case: 8.3.1-final-1
final alone is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-final-1 { final alone is legal } {
    
    empty_class T831final1 {
        final int i = 1;
    }

} {PASS}
Test Case: 8.3.1-final-2
public final is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-final-2 { public final is legal } {
    
    empty_class T831final2 {
        public final int i = 1;
    }

} {PASS}
Test Case: 8.3.1-final-3
final public is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-final-3 { final public is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T831final3 {
        final public int i = 1;
    }]

} {OK}
Test Case: 8.3.1-final-4
protected final is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-final-4 { protected final is legal } {
    
    empty_class T831final4 {
        protected final int i = 1;
    }

} {PASS}
Test Case: 8.3.1-final-5
final protected is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-final-5 { final protected is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T831final5 {
        final protected int i = 1;
    }]

} {OK}
Test Case: 8.3.1-final-6
private final is legal, but redundant

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-final-6 { private final is legal, but redundant } {
    
    ok_pass_or_warn [empty_class T831final6 {
        private final int i = 1;
    }]

} {OK}
Test Case: 8.3.1-final-7
final private is legal, but redundant, and not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-final-7 { final private is legal, but redundant, and
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T831final7 {
        final private int i = 1;
    }]

} {OK}
Test Case: 8.3.1-final-8
final final is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-final-8 { final final is illegal } {
    
    empty_class T831final8 {
        final final int i = 1;
    }

} {FAIL}
Test Case: 8.3.1-final-9
final transient is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-final-9 { final transient is legal } {
    
    empty_class T831final9 {
        final transient int i = 1;
    }

} {PASS}
Test Case: 8.3.1-final-10
transient final is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-final-10 { transient final is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T831final10 {
	transient final int i = 1;
    }]

} {OK}
Test Case: 8.3.1-final-11
final volatile is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-final-11 { final volatile is illegal } {
    
    empty_class T831final11 {
        final volatile int i = 1;
    }

} {FAIL}
Test Case: 8.3.1-final-12
volatile final is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-final-12 { volatile final is illegal } {
    
    empty_class T831final12 {
        volatile final int i = 1;
    }

} {FAIL}
Test Case: 8.3.1-transient-1
transient alone is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-transient-1 { transient alone is legal } {
    
    empty_class T831transient1 {
        transient int i;
    }

} {PASS}
Test Case: 8.3.1-transient-2
public transient is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-transient-2 { public transient is legal } {
    
    empty_class T831transient2 {
        public transient int i;
    }

} {PASS}
Test Case: 8.3.1-transient-3
transient public is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-transient-3 { transient public is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T831transient3 {
        transient public int i;
    }]

} {OK}
Test Case: 8.3.1-transient-4
protected transient is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-transient-4 { protected transient is legal } {
    
    empty_class T831transient4 {
        protected transient int i;
    }

} {PASS}
Test Case: 8.3.1-transient-5
transient protected is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-transient-5 { transient protected is legal, but
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T831transient5 {
        transient protected int i;
    }]

} {OK}
Test Case: 8.3.1-transient-6
private transient is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-transient-6 { private transient is legal } {
    
    empty_class T831transient6 {
        private transient int i;
    }

} {PASS}
Test Case: 8.3.1-transient-7
transient private is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-transient-7 { transient private is legal, but
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T831transient7 {
        transient private int i;
    }]

} {OK}
Test Case: 8.3.1-transient-8
transient transient is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-transient-8 { transient transient is illegal } {
    
    empty_class T831transient8 {
        transient transient int i;
    }

} {FAIL}
Test Case: 8.3.1-transient-9
transient volatile is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-transient-9 { transient volatile is legal } {
    
    empty_class T831transient9 {
        transient volatile int i;
    }

} {PASS}
Test Case: 8.3.1-transient-10
volatile transient is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-transient-10 { volatile transient is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T831transient10 {
        volatile transient int i;
    }]

} {OK}
Test Case: 8.3.1-volatile-1
volatile alone is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-volatile-1 { volatile alone is legal } {
    
    empty_class T831volatile1 {
        volatile int i;
    }

} {PASS}
Test Case: 8.3.1-volatile-2
public volatile is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-volatile-2 { public volatile is legal } {
    
    empty_class T831volatile2 {
        public volatile int i;
    }

} {PASS}
Test Case: 8.3.1-volatile-3
volatile public is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-volatile-3 { volatile public is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T831volatile3 {
        volatile public int i;
    }]

} {OK}
Test Case: 8.3.1-volatile-4
protected volatile is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-volatile-4 { protected volatile is legal } {
    
    empty_class T831volatile4 {
        protected volatile int i;
    }

} {PASS}
Test Case: 8.3.1-volatile-5
volatile protected is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-volatile-5 { volatile protected is legal, but
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T831volatile5 {
        volatile protected int i;
    }]

} {OK}
Test Case: 8.3.1-volatile-6
private volatile is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-volatile-6 { private volatile is legal } {
    
    empty_class T831volatile6 {
        private volatile int i;
    }

} {PASS}
Test Case: 8.3.1-volatile-7
volatile private is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.3.1-volatile-7 { volatile private is legal, but
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T831volatile7 {
        volatile private int i;
    }]

} {OK}
Test Case: 8.3.1-volatile-8
volatile volatile is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-volatile-8 { volatile volatile is illegal } {
    
    empty_class T831volatile8 {
        volatile volatile int i;
    }

} {FAIL}
Test Case: 8.3.1-big-1
largest number of modifiers allowed

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-big-1 { largest number of modifiers allowed } {
    
    empty_class T831big1 {
        public static transient volatile int i;
    }

} {PASS}
Test Case: 8.3.1-big-2
largest number of modifiers allowed

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1-big-2 { largest number of modifiers allowed } {
    
    empty_class T831big2 {
        protected static final transient int i = 1;
    }

} {PASS}
Test Case: 8.3.1-big-3
modifiers stress test

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-big-3 { modifiers stress test } {
    
    empty_class T831big3 {
	public static final protected private abstract transient volatile
	strictfp native synchronized public static final int i = 1;
    }

} {FAIL}
Test Case: 8.3.1-bad-1
abstract fields don't exist

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-bad-1 { abstract fields don't exist } {
    
    empty_class T831bad1 {
        abstract int i;
    }

} {FAIL}
Test Case: 8.3.1-bad-2
synchronized fields don't exist

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-bad-2 { synchronized fields don't exist } {
    
    empty_class T831bad2 {
	synchronized int i;
    }

} {FAIL}
Test Case: 8.3.1-bad-3
native fields don't exist

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-bad-3 { native fields don't exist } {
    
    empty_class T831bad3 {
	native int i;
    }

} {FAIL}
Test Case: 8.3.1-bad-4
strictfp fields don't exist

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1-bad-4 { strictfp fields don't exist } {
    
    empty_class T831bad4 {
	strictfp int i;
    }

} {FAIL}

8.3.1.1

Directory : tests/jls/classes/field-declarations/field-modifiers/static-fields


Test Case: 8.3.1.1-valid-modifier-1
public is a valid static FieldModifier

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.1-valid-modifier-1 { public is a valid
        static FieldModifier } {
    
    empty_class T8311vm1 {
        public static int i;
    }

} {PASS}
Test Case: 8.3.1.1-valid-modifier-2
protected is a valid static FieldModifier

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.1-valid-modifier-2 { protected is a valid
        static FieldModifier } {
    
    empty_class T8311vm2 {
        protected static int i;
    }

} {PASS}
Test Case: 8.3.1.1-valid-modifier-3
private is a valid static FieldModifier

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.1-valid-modifier-3 { private is a valid
        static FieldModifier } {
    
    empty_class T8311vm3 {
        private static int i;
    }

} {PASS}
Test Case: 8.3.1.1-valid-modifier-4
final is a valid static FieldModifier

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.1-valid-modifier-4 { final is a valid
        static FieldModifier } {
    
    empty_class T8311vm4 {
        final static int i = 0;
    }

} {PASS}
Test Case: 8.3.1.1-valid-modifier-5
transient is a valid static FieldModifier

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.1-valid-modifier-5 { transient is a valid
        static FieldModifier } {
    
    empty_class T8311vm5 {
        transient static int i;
    }

} {PASS}
Test Case: 8.3.1.1-valid-modifier-6
volatile is a valid static FieldModifier

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.1-valid-modifier-6 { volatile is a valid
        static FieldModifier } {
    
    empty_class T8311vm6 {
        volatile static int i;
    }

} {PASS}
Test Case: 8.3.1.1-other-1
access an initialized final static field in another class that has not yet been compiled

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.1-other-1 { access an initialized final
        static field in another class that has not yet been compiled } {
    
    saveas T8311o1_1.java {
class T8311o1_1
{
    int i = T8311o1_2.i;
}
    }

    saveas T8311o1_2.java {
class T8311o1_2
{
    final static int i = 0;
}
    }

    compile T8311o1_1.java T8311o1_2.java

} {PASS}
Test Case: 8.3.1.1-other-2
access an uninitialized final static field in another class that has not yet been compiled

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.1-other-2 { access an uninitialized final
        static field in another class that has not yet been compiled } {
    
    saveas T8311o2_1.java {
class T8311o2_1
{
    int i = T8311o2_2.i;
}
    }

    saveas T8311o2_2.java {
class T8311o2_2
{
    final static int i;
    static { i = 0; }
}
    }

    compile T8311o2_1.java T8311o2_2.java

} {PASS}

8.3.1.2

Directory : tests/jls/classes/field-declarations/field-modifiers/final-fields


Test Case: 8.3.1.2-final-1
instance and class fields may be final

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-1 { instance and class fields may be final } {
    
    empty_class T8312f1 {
	final int i = 1;
	static final int j = 2;
    }

} {PASS}
Test Case: 8.3.1.2-final-2
blank final class variables must be assigned in an initializer

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-2 { blank final class variables must be assigned
        in an initializer } {
    
    empty_class T8312f2 {
	static final int i;
    }

} {FAIL}
Test Case: 8.3.1.2-final-3
blank final class variables must be assigned in an initializer

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-3 { blank final class variables must be assigned
        in an initializer } {
    
    empty_class T8312f3 {
	static final int i;
	static {
	    if (false)
                i = 1;
	}
    }

} {FAIL}
Test Case: 8.3.1.2-final-4
blank final class variables must be assigned in an initializer

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-4 { blank final class variables must be assigned
        in an initializer } {
    
    empty_class T8312f4 {
	static final int i;
	static int j = (true ? 1 : (i = 2));
    }

} {FAIL}
Test Case: 8.3.1.2-final-5
blank final class variables must be assigned in an initializer

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-5 { blank final class variables must be assigned
        in an initializer } {
    
    empty_class T8312f5 {
	static final int i;
	static {
	    i = 1;
	}
    }

} {PASS}
Test Case: 8.3.1.2-final-6
blank final class variables must be assigned in an initializer

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-6 { blank final class variables must be assigned
        in an initializer } {
    
    empty_class T8312f6 {
	static final int i;
	static int j = i = 1;
    }

} {PASS}
Test Case: 8.3.1.2-final-7
blank final instance variables must be assigned by the end of every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-7 { blank final instance variables must be assigned
        by the end of every constructor } {
    
    empty_class T8312f7 {
	final int i;
    }

} {FAIL}
Test Case: 8.3.1.2-final-8
blank final instance variables must be assigned by the end of every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-8 { blank final instance variables must be assigned
        by the end of every constructor } {
    
    empty_class T8312f8 {
	final int i;
	{
	    if (false)
                i = 1;
	}
    }

} {FAIL}
Test Case: 8.3.1.2-final-9
blank final instance variables must be assigned by the end of every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-9 { blank final instance variables must be assigned
        by the end of every constructor } {
    
    empty_class T8312f9 {
	final int i;
	T8312f9() {
	    if (false)
                i = 1;
	}
    }

} {FAIL}
Test Case: 8.3.1.2-final-10
blank final instance variables must be assigned by the end of every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-10 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f10 {
	final int i;
	{
	    if (false)
                i = 1;
	}
	T8312f10() {
	    if (false)
                i = 1;
	}
    }

} {FAIL}
Test Case: 8.3.1.2-final-11
blank final instance variables must be assigned by the end of every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-11 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f11 {
	final int i;
	T8312f11(int j){
	}
	T8312f11() {
	    i = 1;
	}
    }

} {FAIL}
Test Case: 8.3.1.2-final-12
blank final instance variables must be assigned by the end of every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-12 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f12 {
	final int i;
	int j = (true ? 1 : (i = 2));
    }

} {FAIL}
Test Case: 8.3.1.2-final-13
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-13 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f13 {
	final int i;
	int j = i = 1;
    }

} {PASS}
Test Case: 8.3.1.2-final-14
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-14 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f14 {
	final int i;
	{ i = 1; }
    }

} {PASS}
Test Case: 8.3.1.2-final-15
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-15 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f15 {
	final int i;
	T8312f15() {
	    i = 1;
	}
    }

} {PASS}
Test Case: 8.3.1.2-final-16
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-16 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f16 {
	final int i;
	T8312f16(int j) {
	    this();
	}
	T8312f16() {
	    i = 1;
	}
    }

} {PASS}
Test Case: 8.3.1.2-final-17
blank final instance variables must be assigned by the end of every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-17 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f17 {
	final int i;
	T8312f17() {
	    if (true)
	        return;
	    i = 1;
	}
    }

} {FAIL}
Test Case: 8.3.1.2-final-18
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-18 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f18 {
	final int i;
	T8312f18() {
	    if (false)
	        return;
	    i = 1;
	}
    }

} {PASS}
Test Case: 8.3.1.2-final-19
blank final instance variables must be assigned by the end of every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-19 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f19 {
	final int i;
	T8312f19(boolean b) {
	    if (b)
	        return;
	    i = 1;
	}
    }

} {FAIL}
Test Case: 8.3.1.2-final-20
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-20 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f20 {
	final int i;
	T8312f20() {
	    l: try {
		return; // discarded by abrupt finally
	    } finally {
		break l;
	    }
	    i = 1;
	}
    }

} {PASS}
Test Case: 8.3.1.2-final-21
blank final instance variables must be assigned by the end of every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-21 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f21 {
	final int i;
	T8312f21(boolean b) {
	    try {
		if (b)
		    return;
	    } finally {
	    }
	    i = 1;
	}
    }

} {FAIL}
Test Case: 8.3.1.2-final-22
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-22 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f22 {
	final int i;
	T8312f22() {
	    while (true);
	}
    }

} {PASS}
Test Case: 8.3.1.2-final-23
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-23 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f23 {
	final int i;
	T8312f23(boolean b) {
	    while (b || true);
	}
    }

} {PASS}
Test Case: 8.3.1.2-final-24
blank final instance variables must be assigned by the end of every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.1.2-final-24 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f24 {
	final int i;
	T8312f24() {
	    return;
	}
    }

} {FAIL}
Test Case: 8.3.1.2-final-25
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-25 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f25 {
	final int i;
	T8312f25() {
	    try {
		return; // intervening finally assigns i
	    } finally {
		i = 1;
	    }
	}
    }

} {PASS}
Test Case: 8.3.1.2-final-26
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-26 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f26 {
	final int i;
	T8312f26(boolean b) {
	    try {
		if (b)
		    return; // intervening finally assigns i
	    } finally {
		i = 1;
	    }
	}
    }

} {PASS}
Test Case: 8.3.1.2-final-27
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-27 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f27 {
	final int i;
	T8312f27(boolean b) {
	    l: try {
		if (b)
		    return; // intervening finally assigns i
		else
		    break l; // intervening finally assigns i
	    } finally {
		i = 1;
	    }
	}
    }

} {PASS}
Test Case: 8.3.1.2-final-28
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-28 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f28 {
	final int i;
	T8312f28(boolean b) {
	    l: try {
		break l; // intervening finally assigns i
	    } finally {
		i = 1;
	    }
	}
    }

} {PASS}
Test Case: 8.3.1.2-final-29
blank final instance variables must be assigned by the end of every constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.3.1.2-final-29 { blank final instance variables must be
        assigned by the end of every constructor } {
    
    empty_class T8312f29 {
	final int i;
	T8312f29(boolean b) {
	    l: do
	        try {
		    continue l; // intervening finally assigns i
		} finally {
		    i = 1;
		}
	    while (false);
	}
    }

} {PASS}

8.3.2

Directory : tests/jls/classes/field-declarations/initialization-of-fields


Test Case: 8.3.2-abrupt-1
A class variable initializer may not complete abruptly with a checked exception

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2-abrupt-1 { A class variable initializer may not complete
        abruptly with a checked exception } {
    
    empty_class T832a1 {
        static int m() throws ClassNotFoundException { return 1; }
        static int i = m();
    }

} {FAIL}
Test Case: 8.3.2-abrupt-2
An instance variable initializer may not complete abruptly with a checked exception, unless all constructors have a compatible throws clause

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2-abrupt-2 { An instance variable initializer may not
        complete abruptly with a checked exception, unless all constructors
        have a compatible throws clause } {
    
    empty_class T832a2 {
        int m() throws ClassNotFoundException { return 1; }
        int i = m();
    }

} {FAIL}
Test Case: 8.3.2-abrupt-3
An instance variable initializer may not complete abruptly with a checked exception, unless all constructors have a compatible throws clause

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2-abrupt-3 { An instance variable initializer may not
        complete abruptly with a checked exception, unless all constructors
        have a compatible throws clause } {
    
    empty_class T832a3 {
        int m() throws ClassNotFoundException { return 1; }
        int i = m();
        T832a3() throws ClassNotFoundException {}
    }

} {PASS}
Test Case: 8.3.2-abrupt-4
An instance variable initializer may not complete abruptly with a checked exception, unless all constructors have a compatible throws clause

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2-abrupt-4 { An instance variable initializer may not
        complete abruptly with a checked exception, unless all constructors
        have a compatible throws clause } {
    
    empty_class T832a4 {
        int m() throws ClassNotFoundException { return 1; }
        int i = m();
        T832a4() throws ClassNotFoundException {}
        T832a4(int i) {}
    }

} {FAIL}
Test Case: 8.3.2-abrupt-5
An instance variable initializer may not complete abruptly with a checked exception, unless all constructors have a compatible throws clause

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2-abrupt-5 { An instance variable initializer may not
        complete abruptly with a checked exception, unless all constructors
        have a compatible throws clause } {
    
    empty_class T832a5 {
        int m() throws ClassNotFoundException { return 1; }
        int i = m();
        T832a5() throws Throwable {}
    }

} {PASS}
Test Case: 8.3.2-abrupt-6
An instance variable initializer may not complete abruptly with a checked exception, unless all constructors have a compatible throws clause; the generated constructor in an anonymous class always has the right throws clause

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2-abrupt-6 { An instance variable initializer may not
        complete abruptly with a checked exception, unless all constructors
        have a compatible throws clause; the generated constructor in an
        anonymous class always has the right throws clause } {
    
    empty_main T832a6 {
        try {
            new Object() {
                int m() throws ClassNotFoundException { return 1; }
                int i = m();
            };
        } catch (ClassNotFoundException e) {
        }
    }

} {PASS}
Test Case: 8.3.2-abrupt-7
An instance variable initializer may not complete abruptly with a checked exception, unless all constructors have a compatible throws clause; the generated constructor in an anonymous class always has the right throws clause

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2-abrupt-7 { An instance variable initializer may not
        complete abruptly with a checked exception, unless all constructors
        have a compatible throws clause; the generated constructor in an
        anonymous class always has the right throws clause } {
    
    empty_class T832a7 {
        void foo() throws ClassNotFoundException {
            new Object() {
                int m() throws ClassNotFoundException { return 1; }
                int i = m();
            };
        }
    }

} {PASS}
Test Case: 8.3.2-abrupt-8
A class variable initializer may not complete abruptly with a checked exception

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2-abrupt-8 { A class variable initializer may not complete
        abruptly with a checked exception } {
    
    compile [saveas T832a8a.java {
class T832a8a {
    int j = T832a8b.i;
}
    }] [saveas T832a8b.java {
class T832a8b {
    static int i() throws Exception { return 1; }
    static final int i = i();
}
    }]

} {FAIL}

8.3.2.1

Directory : tests/jls/classes/field-declarations/initialization-of-fields/initializers-for-class-variables


Test Case: 8.3.2.1-this-1
Class field initializers cannot refer to this, not even implicitly

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.1-this-1 { Class field initializers cannot refer to this,
        not even implicitly } {
    
    empty_class T8321t1 {
        static String s = toString();
    }

} {FAIL}
Test Case: 8.3.2.1-this-2
Class field initializers cannot refer to this, not even implicitly

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.1-this-2 { Class field initializers cannot refer to this,
        not even implicitly } {
    
    empty_class T8321t2 {
        static String s = this.toString();
    }

} {FAIL}
Test Case: 8.3.2.1-this-3
Class field initializers cannot refer to this, not even implicitly

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.1-this-3 { Class field initializers cannot refer to this,
        not even implicitly } {
    
    empty_class T8321t3 {
        static String s = T8321t3.this.toString();
    }

} {FAIL}
Test Case: 8.3.2.1-super-1
Class field initializers cannot refer to super

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.1-super-1 { Class field initializers cannot refer to
        super } {
    
    empty_class T8321s1 {
        static String s = super.toString();
    }

} {FAIL}
Test Case: 8.3.2.1-super-2
Class field initializers cannot refer to super

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.1-super-2 { Class field initializers cannot refer to
        super } {
    
    empty_class T8321s2 {
        static String s = T8321s2.super.toString();
    }

} {FAIL}

8.3.2.2

Directory : tests/jls/classes/field-declarations/initialization-of-fields/initializers-for-instance-variables


Test Case: 8.3.2.2-static-1
Instance field initializers may use static members, regardless of their declaration order

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.2-static-1 { Instance field initializers may use static
        members, regardless of their declaration order } {
    
    empty_class T8322st1 {
        float f = j;
        static int j = 1;
    }

} {PASS}
Test Case: 8.3.2.2-this-1
Instance field initializers may refer to this, even implicitly

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.2-this-1 { Instance field initializers may refer to this,
        even implicitly } {
    
    empty_class T8322t1 {
        String s = toString();
    }

} {PASS}
Test Case: 8.3.2.2-this-2
Instance field initializers may refer to this, even implicitly

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.2-this-2 { Instance field initializers may refer to this,
        even implicitly } {
    
    empty_class T8322t2 {
        String s = this.toString();
    }

} {PASS}
Test Case: 8.3.2.2-this-3
Instance field initializers may refer to this, even implicitly

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.2-this-3 { Instance field initializers may refer to this,
        even implicitly } {
    
    empty_class T8322t3 {
        String s = T8322t3.this.toString();
    }

} {PASS}
Test Case: 8.3.2.2-super-1
Instance field initializers may refer to super

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.2-super-1 { Instance field initializers may refer to
        super } {
    
    empty_class T8322s1 {
        String s = super.toString();
    }

} {PASS}
Test Case: 8.3.2.2-super-2
Instance field initializers may refer to super

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.2-super-2 { Instance field initializers may refer to
        super } {
    
    empty_class T8322s2 {
        String s = T8322s2.super.toString();
    }

} {PASS}

8.3.2.3

Directory : tests/jls/classes/field-declarations/initialization-of-fields/restrictions


Test Case: 8.3.2.3-illegal-forward-instance-1
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-instance-1 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323ifi1 {
        int i = j;
        int j = 1;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-instance-2
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-instance-2 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323ifi2 {
        { int i = j; }
        int j = 1;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-instance-3
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-instance-3 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323ifi3 {
        int i = j += 1;
        int j = 1;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-instance-4
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-instance-4 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323ifi4 {
        { j += 1; }
        int j = 1;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-instance-5
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-instance-5 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323ifi5 {
        int i = j++;
        int j = 1;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-instance-6
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-instance-6 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323ifi6 {
        { j++; }
        int j = 1;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-instance-7
Reading a variable is not legal before declaration, even if it was assigned before declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-instance-7 { Reading a variable is not
        legal before declaration, even if it was assigned before declaration } {
    
    empty_class T8323ifi7 {
        int i = (i = 1) + i;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-instance-8
Reading a variable is not legal before declaration, even if it was assigned before declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-instance-8 { Reading a variable is not
        legal before declaration, even if it was assigned before declaration } {
    
    empty_class T8323ifi8 {
        int j = i = 1;
        int i = i;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-instance-9
Reading a variable is not legal before declaration, even if it was assigned before declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-instance-9 { Reading a variable is not
        legal before declaration, even if it was assigned before declaration } {
    
    empty_class T8323ifi9 {
	int j = i = 1;
	int k = i;
	int i;
    }

} {FAIL}
Test Case: 8.3.2.3-legal-forward-instance-1
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-instance-1 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfi1 {
        int i = this.j; // not simple usage
        int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-instance-2
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-instance-2 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfi2 {
        void foo() { int i = j; } // not in initializer
        int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-instance-3
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-instance-3 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfi3 {
        T8323lfi3() { int i = j; } // not in initializer
        int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-instance-4
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-instance-4 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfi4 {
        int i = j = 2; // simple assignment
        int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-instance-5
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-instance-5 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfi5 {
        { j = 2; } // simple assignment
        int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-instance-6
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-instance-6 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfi6 {
        int i = new Object(){ int bar() { return j; } }.bar();
        // not in declaring class
        int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-instance-7
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-instance-7 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfi7 {
        { new Object(){ { j++; } }; } // not in declaring class
        int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-instance-8
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-instance-8 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfi8 {
        int i = j; // j is static
        static int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-instance-9
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-instance-9 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfi9 {
        { j++; } // j is static
        static int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-instance-10
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-instance-10 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfi10 {
        final int i = j; // j is static
        static final int j = 1;
        void foo(int n) {
            switch (n) {
                case 0:
                case i: // i == 1
            }
        }
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-instance-11
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-instance-11 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfi11 {
        final int i = this.j; // not simple usage
        final int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-instance-12
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-instance-12 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T83231fi12 {
        int j = i = 1;
        final int i;
    }

} {PASS}
Test Case: 8.3.2.3-illegal-forward-static-1
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-static-1 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323ifs1 {
        static int i = j;
        static int j = 1;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-static-2
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-static-2 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323ifs2 {
        static { int i = j; }
        static int j = 1;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-static-3
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-static-3 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323ifs3 {
        static int i = j += 1;
        static int j = 1;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-static-4
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-static-4 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323ifs4 {
        static { j += 1; }
        static int j = 1;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-static-5
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-static-5 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323ifs5 {
        static int i = j++;
        static int j = 1;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-static-6
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-static-6 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323ifs6 {
        static { j++; }
        static int j = 1;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-static-7
Reading a variable is not legal before declaration, even if it was assigned before declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-static-7 { Reading a variable is not
        legal before declaration, even if it was assigned before declaration } {
    
    empty_class T8323ifs7 {
        static int i = (i = 1) + i;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-static-8
Reading a variable is not legal before declaration, even if it was assigned before declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-static-8 { Reading a variable is not
        legal before declaration, even if it was assigned before declaration } {
    
    empty_class T8323ifs8 {
        static int j = i = 1;
        static int i = i;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-static-9
Reading a variable is not legal before declaration, even if it was assigned before declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-static-9 { Reading a variable is not
        legal before declaration, even if it was assigned before declaration } {
    
    empty_class T8323ifs9 {
	static int j = i = 1;
	static int k = i;
	static int i;
    }

} {FAIL}
Test Case: 8.3.2.3-illegal-forward-static-10
Reading a variable is not legal before declaration, even though other classes may trigger out-of-order reads

Expected Result: FAIL

Regression Test:

tcltest::test 8.3.2.3-illegal-forward-static-10 { Reading a variable is not
        legal before declaration, even though other classes may trigger
        out-of-order reads } {
    
    compile [saveas T8323ifs10a.java {
class T8323ifs10a {
    int k = T8323ifs10b.i;
}
    }] [saveas T8323ifs10b.java {
class T8323ifs10b {
    static final int i = j;
    static int j;
}
    }]

} {FAIL}
Test Case: 8.3.2.3-legal-forward-static-1
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-static-1 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfs1 {
        static int i = T8323lfs1.j; // not simple usage
        static int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-static-2
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-static-2 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfs2 {
        static void foo() { int i = j; } // not in initializer
        static int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-static-3
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-static-3 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfs3 {
        T8323lfs3() { int i = j; } // not in initializer
        int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-static-4
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-static-4 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfs4 {
        static int i = j = 2; // simple assignment
        static int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-static-5
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-static-5 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfs5 {
        static { j = 2; } // simple assignment
        static int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-static-6
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-static-6 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfs6 {
        static int i = new Object(){ int bar() { return j; } }.bar();
        // not in declaring class
        static int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-static-7
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-static-7 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfs7 {
        static { new Object(){ { j++; } }; } // not in declaring class
        static int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-static-8
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-static-8 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfs8 {
        static final int i = T8323lfs8.j; // not simple usage
        static final int j = 1;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-static-9
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-static-9 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T83231fs9 {
	static int j = i = 1;
	static final int i;
    }

} {PASS}
Test Case: 8.3.2.3-legal-forward-static-10
Simple usage before declaration legal if 1. not in initializer; 2. simple assignment; or 3. not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 8.3.2.3-legal-forward-static-10 { Simple usage before
        declaration legal if 1. not in initializer; 2. simple assignment;
        or 3. not in declaring class } {
    
    empty_class T8323lfs10 {
	static final int j = T8323lfs10.k;
	static final int k = new Q().i;
	private static class Q {
	    static int i = 1;
	}
    }

} {PASS}

8.4.3

Directory : tests/jls/classes/method-declarations/method-modifiers


Test Case: 8.4.3-access-1
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-access-1 { Multiple access modifiers is an error } {
    
    empty_class T843access1 {
        public public void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-access-2
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-access-2 { Multiple access modifiers is an error } {
    
    empty_class T843access2 {
        public protected void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-access-3
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-access-3 { Multiple access modifiers is an error } {
    
    empty_class T843access3 {
        public private void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-access-4
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-access-4 { Multiple access modifiers is an error } {
    
    empty_class T843access4 {
        protected public void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-access-5
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-access-5 { Multiple access modifiers is an error } {
    
    empty_class T843access5 {
        protected protected void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-access-6
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-access-6 { Multiple access modifiers is an error } {
    
    empty_class T843access6 {
        protected private void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-access-7
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-access-7 { Multiple access modifiers is an error } {
    
    empty_class T843access7 {
        private public void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-access-8
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-access-8 { Multiple access modifiers is an error } {
    
    empty_class T843access8 {
        private protected void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-access-9
Multiple access modifiers is an error

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-access-9 { Multiple access modifiers is an error } {
    
    empty_class T843access9 {
        private private void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-access-10
A single access modifier is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-access-10 { A single access modifier is legal } {
    
    empty_class T843access10 {
        public void foo() {}
    }

} {PASS}
Test Case: 8.4.3-access-11
A single access modifier is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-access-11 { A single access modifier is legal } {
    
    empty_class T843access11 {
        protected void foo() {}
    }

} {PASS}
Test Case: 8.4.3-access-12
A single access modifier is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-access-12 { A single access modifier is legal } {
    
    empty_class T843access12 {
        private void foo() {}
    }

} {PASS}
Test Case: 8.4.3-access-13
No access modifier is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-access-13 { No access modifier is legal } {
    
    empty_class T843access13 {
        void foo() {}
    }

} {PASS}
Test Case: 8.4.3-abstract-1
abstract alone is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-abstract-1 { abstract alone is legal } {
    
    compile [saveas T843abstract1.java {
abstract class T843abstract1 {
    abstract void foo();
}
    }]

} {PASS}
Test Case: 8.4.3-abstract-2
public abstract is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-abstract-2 { public abstract is legal } {
    
    compile [saveas T843abstract2.java {
abstract class T843abstract2 {
    public abstract void foo();
}
    }]

} {PASS}
Test Case: 8.4.3-abstract-3
abstract public is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-abstract-3 { abstract public is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [compile [saveas T843abstract3.java {
abstract class T843abstract3 {
    abstract public void foo();
}
    }]]

} {OK}
Test Case: 8.4.3-abstract-4
protected abstract is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-abstract-4 { protected abstract is legal } {
    
    compile [saveas T843abstract4.java {
abstract class T843abstract4 {
    protected abstract void foo();
}
    }]

} {PASS}
Test Case: 8.4.3-abstract-5
abstract protected is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-abstract-5 { abstract protected is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [compile [saveas T843abstract5.java {
abstract class T843abstract5 {
    abstract protected void foo();
}
    }]]

} {OK}
Test Case: 8.4.3-abstract-6
private abstract is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-6 { private abstract is illegal } {
    
    compile [saveas T843abstract6.java {
abstract class T843abstract6 {
    private abstract void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-abstract-7
abstract private is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-7 { abstract private is illegal } {
    
    compile [saveas T843abstract7.java {
abstract class T843abstract7 {
    abstract private void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-abstract-8
abstract abstract is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-8 { abstract abstract is illegal } {
    
    compile [saveas T843abstract8.java {
abstract class T843abstract8 {
    abstract abstract void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-abstract-9
static abstract is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-9 { static abstract is illegal } {
    
    compile [saveas T843abstract9.java {
abstract class T843abstract9 {
    static abstract void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-abstract-10
abstract static is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-10 { abstract static is illegal } {
    
    compile [saveas T843abstract10.java {
abstract class T843abstract10 {
    abstract static void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-abstract-11
final abstract is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-11 { final abstract is illegal } {
    
    compile [saveas T843abstract11.java {
abstract class T843abstract11 {
    final abstract void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-abstract-12
abstract final is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-12 { abstract final is illegal } {
    
    compile [saveas T843abstract12.java {
abstract class T843abstract12 {
    abstract final void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-abstract-13
synchronized abstract is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-13 { synchronized abstract is illegal } {
    
    compile [saveas T843abstract13.java {
abstract class T843abstract13 {
    synchronized abstract void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-abstract-14
abstract synchronized is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-14 { abstract synchronized is illegal } {
    
    compile [saveas T843abstract14.java {
abstract class T843abstract14 {
    abstract synchronized void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-abstract-15
native abstract is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-15 { native abstract is illegal } {
    
    compile [saveas T843abstract15.java {
abstract class T843abstract15 {
    native abstract void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-abstract-16
abstract native is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-16 { abstract native is illegal } {
    
    compile [saveas T843abstract16.java {
abstract class T843abstract16 {
    abstract native void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-abstract-17
strictfp abstract is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-17 { strictfp abstract is illegal } {
    
    compile [saveas T843abstract17.java {
abstract class T843abstract17 {
    strictfp abstract void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-abstract-18
abstract strictfp is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-abstract-18 { abstract strictfp is illegal } {
    
    compile [saveas T843abstract18.java {
abstract class T843abstract18 {
    abstract strictfp void foo();
}
    }]

} {FAIL}
Test Case: 8.4.3-static-1
static alone is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-static-1 { static alone is legal } {
    
    empty_class T843static1 {
        static void foo() {}
    }

} {PASS}
Test Case: 8.4.3-static-2
public static is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-static-2 { public static is legal } {
    
    empty_class T843static2 {
        public static void foo() {}
    }

} {PASS}
Test Case: 8.4.3-static-3
static public is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-static-3 { static public is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843static3 {
        static public void foo() {}
    }]

} {OK}
Test Case: 8.4.3-static-4
protected static is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-static-4 { protected static is legal } {
    
    empty_class T843static4 {
        protected static void foo() {}
    }

} {PASS}
Test Case: 8.4.3-static-5
static protected is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-static-5 { static protected is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843static5 {
        static protected void foo() {}
    }]

} {OK}
Test Case: 8.4.3-static-6
private static is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-static-6 { private static is legal } {
    
    empty_class T843static6 {
        private static void foo() {}
    }

} {PASS}
Test Case: 8.4.3-static-7
static private is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-static-7 { static private is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843static7 {
        static private void foo() {}
    }]

} {OK}
Test Case: 8.4.3-static-8
static static is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-static-8 { static static is illegal } {
    
    empty_class T843static8 {
        static static void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-static-9
static final is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-static-9 { static final is legal } {
    
    empty_class T843static9 {
        static final void foo() {}
    }

} {PASS}
Test Case: 8.4.3-static-10
final static is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-static-10 { final static is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843static10 {
        final static void foo() {}
    }]

} {OK}
Test Case: 8.4.3-static-11
static synchronized is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-static-11 { static synchronized is legal } {
    
    empty_class T843static11 {
        static synchronized void foo() {}
    }

} {PASS}
Test Case: 8.4.3-static-12
synchronized static is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-static-12 { synchronized static is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843static12 {
        synchronized static void foo() {}
    }]

} {OK}
Test Case: 8.4.3-static-13
static native is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-static-13 { static native is legal } {
    
    empty_class T843static13 {
        static native void foo();
    }

} {PASS}
Test Case: 8.4.3-static-14
native static is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-static-14 { native static is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843static14 {
        native static void foo();
    }]

} {OK}
Test Case: 8.4.3-static-15
static strictfp is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-static-15 { static strictfp is legal } {
    
    empty_class T843static15 {
        static strictfp void foo() {}
    }

} {PASS}
Test Case: 8.4.3-static-16
strictfp static is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-static-16 { strictfp static is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843static16 {
        strictfp static void foo() {}
    }]

} {OK}
Test Case: 8.4.3-final-1
final alone is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-final-1 { final alone is legal } {
    
    empty_class T843final1 {
        final void foo() {}
    }

} {PASS}
Test Case: 8.4.3-final-2
public final is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-final-2 { public final is legal } {
    
    empty_class T843final2 {
        public final void foo() {}
    }

} {PASS}
Test Case: 8.4.3-final-3
final public is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-final-3 { final public is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843final3 {
        final public void foo() {}
    }]

} {OK}
Test Case: 8.4.3-final-4
protected final is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-final-4 { protected final is legal } {
    
    empty_class T843final4 {
        protected final void foo() {}
    }

} {PASS}
Test Case: 8.4.3-final-5
final protected is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-final-5 { final protected is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843final5 {
        final protected void foo() {}
    }]

} {OK}
Test Case: 8.4.3-final-6
private final is legal, but redundant

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-final-6 { private final is legal, but redundant } {
    
    ok_pass_or_warn [empty_class T843final6 {
        private final void foo() {}
    }]

} {OK}
Test Case: 8.4.3-final-7
final private is legal, but redundant, and not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-final-7 { final private is legal, but redundant, and
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T843final7 {
        final private void foo() {}
    }]

} {OK}
Test Case: 8.4.3-final-8
final final is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-final-8 { final final is illegal } {
    
    empty_class T843final8 {
        final final void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-final-9
final synchronized is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-final-9 { final synchronized is legal } {
    
    empty_class T843final9 {
        final synchronized void foo() {}
    }

} {PASS}
Test Case: 8.4.3-final-10
synchronized final is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-final-10 { synchronized final is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843final10 {
        synchronized final void foo() {}
    }]

} {OK}
Test Case: 8.4.3-final-11
final native is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-final-11 { final native is legal } {
    
    empty_class T843final11 {
        final native void foo();
    }

} {PASS}
Test Case: 8.4.3-final-12
native final is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-final-12 { native final is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843final12 {
        native final void foo();
    }]

} {OK}
Test Case: 8.4.3-final-13
final strictfp is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-final-13 { final strictfp is legal } {
    
    empty_class T843final13 {
        final strictfp void foo() {}
    }

} {PASS}
Test Case: 8.4.3-final-14
strictfp final is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-final-14 { strictfp final is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843final14 {
        strictfp final void foo() {}
    }]

} {OK}
Test Case: 8.4.3-final-15
final in a final class is legal, but redundant

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-final-15 { final in a final class is legal, but
        redundant } {
    
    ok_pass_or_warn [compile [saveas T843final15.java {
final class T843final15 {
    final void foo() {}
}
    }]]

} {OK}
Test Case: 8.4.3-synchronized-1
synchronized alone is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-synchronized-1 { synchronized alone is legal } {
    
    empty_class T843synchronized1 {
        synchronized void foo() {}
    }

} {PASS}
Test Case: 8.4.3-synchronized-2
public synchronized is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-synchronized-2 { public synchronized is legal } {
    
    empty_class T843synchronized2 {
        public synchronized void foo() {}
    }

} {PASS}
Test Case: 8.4.3-synchronized-3
synchronized public is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-synchronized-3 { synchronized public is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843synchronized3 {
        synchronized public void foo() {}
    }]

} {OK}
Test Case: 8.4.3-synchronized-4
protected synchronized is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-synchronized-4 { protected synchronized is legal } {
    
    empty_class T843synchronized4 {
        protected synchronized void foo() {}
    }

} {PASS}
Test Case: 8.4.3-synchronized-5
synchronized protected is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-synchronized-5 { synchronized protected is legal, but
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T843synchronized5 {
        synchronized protected void foo() {}
    }]

} {OK}
Test Case: 8.4.3-synchronized-6
private synchronized is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-synchronized-6 { private synchronized is legal } {
    
    empty_class T843synchronized6 {
        private synchronized void foo() {}
    }

} {PASS}
Test Case: 8.4.3-synchronized-7
synchronized private is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-synchronized-7 { synchronized private is legal, but
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T843synchronized7 {
        synchronized private void foo() {}
    }]

} {OK}
Test Case: 8.4.3-synchronized-8
synchronized synchronized is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-synchronized-8 { synchronized synchronized is illegal } {
    
    empty_class T843synchronized8 {
        synchronized synchronized void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-synchronized-9
synchronized native is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-synchronized-9 { synchronized native is legal } {
    
    empty_class T843synchronized9 {
        synchronized native void foo();
    }

} {PASS}
Test Case: 8.4.3-synchronized-10
native synchronized is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-synchronized-10 { native synchronized is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843synchronized10 {
        native synchronized void foo();
    }]

} {OK}
Test Case: 8.4.3-synchronized-11
synchronized strictfp is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-synchronized-11 { synchronized strictfp is legal } {
    
    empty_class T843synchronized11 {
        synchronized strictfp void foo() {}
    }

} {PASS}
Test Case: 8.4.3-synchronized-12
strictfp synchronized is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-synchronized-12 { strictfp synchronized is legal, but
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T843synchronized12 {
        strictfp synchronized void foo() {}
    }]

} {OK}
Test Case: 8.4.3-native-1
native alone is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-native-1 { native alone is legal } {
    
    empty_class T843native1 {
        native void foo();
    }

} {PASS}
Test Case: 8.4.3-native-2
public native is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-native-2 { public native is legal } {
    
    empty_class T843native2 {
        public native void foo();
    }

} {PASS}
Test Case: 8.4.3-native-3
native public is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-native-3 { native public is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843native3 {
        native public void foo();
    }]

} {OK}
Test Case: 8.4.3-native-4
protected native is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-native-4 { protected native is legal } {
    
    empty_class T843native4 {
        protected native void foo();
    }

} {PASS}
Test Case: 8.4.3-native-5
native protected is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-native-5 { native protected is legal, but
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T843native5 {
        native protected void foo();
    }]

} {OK}
Test Case: 8.4.3-native-6
private native is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-native-6 { private native is legal } {
    
    empty_class T843native6 {
        private native void foo();
    }

} {PASS}
Test Case: 8.4.3-native-7
native private is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-native-7 { native private is legal, but
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T843native7 {
        native private void foo();
    }]

} {OK}
Test Case: 8.4.3-native-8
native native is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-native-8 { native native is illegal } {
    
    empty_class T843native8 {
        native native void foo();
    }

} {FAIL}
Test Case: 8.4.3-native-9
native strictfp is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-native-9 { native strictfp is illegal } {
    
    empty_class T843native9 {
        native strictfp void foo();
    }

} {FAIL}
Test Case: 8.4.3-native-10
strictfp native is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-native-10 { strictfp native is illegal } {
    
    empty_class T843native10 {
        strictfp native void foo();
    }

} {FAIL}
Test Case: 8.4.3-strictfp-1
strictfp alone is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-strictfp-1 { strictfp alone is legal } {
    
    empty_class T843strictfp1 {
        strictfp void foo() {}
    }

} {PASS}
Test Case: 8.4.3-strictfp-2
public strictfp is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-strictfp-2 { public strictfp is legal } {
    
    empty_class T843strictfp2 {
        public strictfp void foo() {}
    }

} {PASS}
Test Case: 8.4.3-strictfp-3
strictfp public is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-strictfp-3 { strictfp public is legal, but not in
        the preferred order } {
    
    ok_pass_or_warn [empty_class T843strictfp3 {
        strictfp public void foo() {}
    }]

} {OK}
Test Case: 8.4.3-strictfp-4
protected strictfp is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-strictfp-4 { protected strictfp is legal } {
    
    empty_class T843strictfp4 {
        protected strictfp void foo() {}
    }

} {PASS}
Test Case: 8.4.3-strictfp-5
strictfp protected is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-strictfp-5 { strictfp protected is legal, but
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T843strictfp5 {
        strictfp protected void foo() {}
    }]

} {OK}
Test Case: 8.4.3-strictfp-6
private strictfp is legal

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-strictfp-6 { private strictfp is legal } {
    
    empty_class T843strictfp6 {
        private strictfp void foo() {}
    }

} {PASS}
Test Case: 8.4.3-strictfp-7
strictfp private is legal, but not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-strictfp-7 { strictfp private is legal, but
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T843strictfp7 {
        strictfp private void foo() {}
    }]

} {OK}
Test Case: 8.4.3-strictfp-8
strictfp strictfp is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-strictfp-8 { strictfp strictfp is illegal } {
    
    empty_class T843strictfp8 {
        strictfp strictfp void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-strictfp-9
strictfp in a strictfp class is legal, but redundant

Expected Result: OK

Regression Test:

tcltest::test 8.4.3-strictfp-9 { strictfp in a strictfp class is legal, but
        redundant } {
    
    ok_pass_or_warn [compile [saveas T843strictfp9.java {
strictfp class T843strictfp9 {
    strictfp void foo() {}
}
    }]]

} {OK}
Test Case: 8.4.3-big-1
largest number of modifiers allowed

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-big-1 { largest number of modifiers allowed } {
    
    empty_class T843big1 {
        public static final synchronized strictfp void foo() {}
    }

} {PASS}
Test Case: 8.4.3-big-2
largest number of modifiers allowed

Expected Result: PASS

Regression Test:

tcltest::test 8.4.3-big-2 { largest number of modifiers allowed } {
    
    empty_class T843big2 {
        protected static final synchronized native void foo();
    }

} {PASS}
Test Case: 8.4.3-big-3
modifiers stress test

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-big-3 { modifiers stress test } {
    
    empty_class T843big3 {
        public protected private static abstract final synchronized
        native strictfp public protected private static abstract
        final synchronized native strictfp void foo();
    }

} {FAIL}
Test Case: 8.4.3-bad-1
transient methods don't exist

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-bad-1 { transient methods don't exist } {
    
    empty_class T843bad1 {
        transient void foo() {}
    }

} {FAIL}
Test Case: 8.4.3-bad-2
volatile methods don't exist

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.3-bad-2 { volatile methods don't exist } {
    
    empty_class T843bad2 {
        volatile void foo() {}
    }

} {FAIL}

8.4.5

Directory : tests/jls/classes/method-declarations/method-body


Test Case: 8.4.5-1
{} is a valid method body

Expected Result: PASS

Regression Test:

tcltest::test 8.4.5-1 { {} is a valid method body} {
    
    compile [saveas EmptyBlockMethodBody.java  {
public class EmptyBlockMethodBody {
    public void foo() {}
}
}]

} {PASS}
Test Case: 8.4.5-2
only a native or abstract method can have no method body

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.5-2 { only a native or abstract method can have no method body } {
    
    compile [saveas InvalidEmptyMethodBody.java  {
public class InvalidEmptyMethodBody {
    public void foo() ;
}
}]

} {FAIL}
Test Case: 8.4.5-3
a native method does not have a body

Expected Result: PASS

Regression Test:

tcltest::test 8.4.5-3 { a native method does not have a body } {
    
    compile [saveas EmptyNativeMethodBody.java  {
public class EmptyNativeMethodBody {
    public native void foo();
}
}]

} {PASS}
Test Case: 8.4.5-4
a native method can not have a body

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.5-4 { a native method can not have a body } {
    
    compile [saveas InvalidNativeMethodBody.java  {
public class InvalidNativeMethodBody {
    public native void foo() {}
}
}]

} {FAIL}
Test Case: 8.4.5-5
an abstract method does not have a body

Expected Result: PASS

Regression Test:

tcltest::test 8.4.5-5 { an abstract method does not have a body } {
    
    compile [saveas EmptyAbstractMethodBody.java  {
public abstract class EmptyAbstractMethodBody {
    public abstract void foo();
}
}]

} {PASS}
Test Case: 8.4.5-6
an abstract method can not have a body

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.5-6 { an abstract method can not have a body } {
    
    compile [saveas InvalidAbstractMethodBody.java  {
public abstract class InvalidAbstractMethodBody {
    public abstract void foo() {}
}
}]

} {FAIL}
Test Case: 8.4.5-7
non void method without a return is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.5-7 { non void method without a return is invalid } {
    
    compile [saveas NoReturnInNonVoid.java  {
public class NoReturnInNonVoid {
    public boolean foo() {}
}
}]

} {FAIL}
Test Case: 8.4.5-8
a void method with a non expression return is valid

Expected Result: PASS

Regression Test:

tcltest::test 8.4.5-8 { a void method with a non expression return is valid } {
    
    compile [saveas NoExpressionReturnInVoid.java  {
public class NoExpressionReturnInVoid {
    public void foo() { return; }
}
}]

} {PASS}
Test Case: 8.4.5-9
a return with no expression in a non void method is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.5-9 { a return with no expression in a non void method is invalid } {
    
    compile [saveas ConflictingReturnInNonVoid.java  {
public class ConflictingReturnInNonVoid {
    public boolean foo() {
        int i = 0;
        if (i == 1) {
            return true;
        } else {
            return;
        }
    }
}
}]

} {FAIL}
Test Case: 8.4.5-10
a return with an expression in a void method is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.5-10 { a return with an expression in a void method is invalid } {
    
    compile [saveas ConflictingReturnInVoid.java  {
public class ConflictingReturnInVoid {
    public void foo() {
        int i = 0;
        if (i == 1) {
            return true;
        } else {
            return;
        }
    }
}
}]

} {FAIL}
Test Case: 8.4.5-11
a method with an exceptional exit does not require a return ?

Expected Result: PASS

Regression Test:

tcltest::test 8.4.5-11 { a method with an exceptional exit does not require a return ? } {
    
    compile [saveas ExceptionalReturnInNonVoid.java  {
public class ExceptionalReturnInNonVoid {
    public boolean foo() { throw new RuntimeException("foo()"); }
}
}]

} {PASS}

8.4.6

Directory : tests/jls/classes/method-declarations/inheritance-overriding-and-hiding


Test Case: 8.4.6-miranda-1
Abstract classes no longer need Miranda methods (generated place-holders in classes which inherit an abstract method from an interface without overriding it)

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6-miranda-1 { Abstract classes no longer need Miranda
        methods (generated place-holders in classes which inherit an abstract
        method from an interface without overriding it) } {
    
    compile [saveas T846m1a.java {
interface T846m1a { void m(); }
}] [saveas T846m1b.java {
// If a compiler still inserts Miranda methods, then class b will have a
// bogus declaration "abstract void m();"
abstract class T846m1b implements T846m1a {}
}]
# Now, leave b in .class form only, and recompile a to lose m()
    delete T846m1b.java
    compile [saveas T846m1a.java {
interface T846m1a {}
}]
# The real test: if c inherits b.m(), the compiler goofed in compiling b
    compile -classpath . [saveas T846m1c.java {
abstract class T846m1c extends T846m1b {
    void foo() { m(); }
}
}]

} {FAIL}
Test Case: 8.4.6-miranda-2
Abstract classes no longer need Miranda methods (generated place-holders in classes which inherit an abstract method from an interface without overriding it)

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6-miranda-2 { Abstract classes no longer need Miranda
        methods (generated place-holders in classes which inherit an abstract
        method from an interface without overriding it) } {
    
    compile [saveas T846m2b.java {
interface T846m2a { void m(); }
abstract class T846m2b implements T846m2a {}
    }]
# Now, leave b in .class form only. If c can't find m(), the compiler
# goofed by looking for Miranda methods in b instead of inheriting from a
    compile -classpath . [saveas T846m2c.java {
abstract class T846m2c extends T846m2b {
    void foo() { m(); }
}
    }]

} {PASS}
Test Case: 8.4.6-miranda-3
Abstract classes no longer need Miranda methods (generated place-holders in classes which inherit an abstract method from an interface without overriding it)

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6-miranda-3 { Abstract classes no longer need Miranda
        methods (generated place-holders in classes which inherit an abstract
        method from an interface without overriding it) } {
    
    compile [saveas T846m3b.java {
interface T846m3a { void m(); }
abstract class T846m3b implements T846m3a {}
    }]
# Now, leave b in .class form only. If c avoids implementing m(), the compiler
# goofed by looking for Miranda methods in b instead of inheriting from a
    compile -classpath . [saveas T846m3c.java {
class T846m3c extends T846m3b {}
    }]

} {FAIL}
Test Case: 8.4.6-miranda-4
Abstract classes no longer need Miranda methods (generated place-holders in classes which inherit an abstract method from an interface without overriding it)

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6-miranda-4 { Abstract classes no longer need Miranda
        methods (generated place-holders in classes which inherit an abstract
        method from an interface without overriding it) } {
    
    compile [saveas T846m4b.java {
interface T846m4a { void m(); }
abstract class T846m4b implements T846m4a {}
    }]
# Now, leave b in .class form only. If c changes accessibility, the compiler
# goofed by looking for Miranda methods in b instead of inheriting from a
    compile -classpath . [saveas T846m4c.java {
abstract class T846m4c extends T846m4b {
    abstract void m();
}
    }]

} {FAIL}
Test Case: 8.4.6-inheritance-1
A class inherits non-private accessible methods that it does not hide by redeclaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6-inheritance-1 { A class inherits non-private accessible
        methods that it does not hide by redeclaration } {
    
    empty_class T846i1 {
	private int m() { return 1; }
	static class Inner extends T846i1 {
	    int j = m(); // m not inherited, and enclosing m not available
	}
    }

} {FAIL}
Test Case: 8.4.6-inheritance-2
A class inherits non-private accessible methods that it does not hide by redeclaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6-inheritance-2 { A class inherits non-private accessible
        methods that it does not hide by redeclaration } {
    
    empty_class T846i2 {
	private int m() { return 1; }
	class Inner extends T846i2 {
	    int j = this.m(); // m not inherited
	}
    }

} {FAIL}
Test Case: 8.4.6-inheritance-3
A class inherits non-private accessible methods that it does not hide by redeclaration.

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6-inheritance-3 { A class inherits non-private accessible
        methods that it does not hide by redeclaration. } {
    
    compile [saveas p1/T846i3a.java {
package p1;
public class T846i3a {
    int m() { return 1; }
    static class Inner extends p2.T846i3b {
	// package m not inherited from b, enclosing m unavailable
	int j = m();
    }
}
    }] [saveas p2/T846i3b.java {
package p2;
public class T846i3b extends p1.T846i3a {
    static int m() { return 1; } // does not override or hide T846i3a.m
}
    }]

} {FAIL}
Test Case: 8.4.6-inheritance-4
A class inherits non-private accessible methods that it does not hide by redeclaration.

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6-inheritance-4 { A class inherits non-private accessible
        methods that it does not hide by redeclaration. } {
    
    compile [saveas p1/T846i4a.java {
package p1;
public class T846i4a {
    int m() { return 1; }
    class Inner extends p2.T846i4b {
	// package m not inherited from b
	int j = this.m();
    }
}
    }] [saveas p2/T846i4b.java {
package p2;
public class T846i4b extends p1.T846i4a {
    static int m() { return 1; } // does not override or hide T846i4a.m
}
    }]

} {FAIL}
Test Case: 8.4.6-inheritance-5
A class inherits non-private accessible methods that it does not hide by redeclaration.

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6-inheritance-5 { A class inherits non-private accessible
        methods that it does not hide by redeclaration. } {
    
    compile [saveas p1/T846i5a.java {
package p1;
public class T846i5a {
    static int m() { return 1; }
    class Inner extends p2.T846i5b {
	// the superclass did not inherit m
	int j = this.m();
    }
}
    }] [saveas p2/T846i5b.java {
package p2;
public class T846i5b extends p1.T846i5a {
    int m() { return 1; } // does not override or hide T846i5a.m
}
    }]

} {FAIL}
Test Case: 8.4.6-inheritance-6
A class inherits non-private accessible methods that it does not hide by redeclaration

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6-inheritance-6 { A class inherits non-private accessible
        methods that it does not hide by redeclaration } {
    
    empty_class T846i6 {
	class One {
	    int m() { return 1; }
	}
	class Two extends One {
	    {
		m();
		this.m();
	    }
	}
    }

} {PASS}

8.4.6.1

Directory : tests/jls/classes/method-declarations/inheritance-overriding-and-hiding/overriding


Test Case: 8.4.6.1-override-1
instance methods may not override static

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.1-override-1 { instance methods may not override static } {
    
    empty_class T8461o1 {
	static class One {
	    static void m() {}
	}
	static class Two extends One {
	    void m() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.1-override-2
overloading does not affect overriding

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.1-override-2 { overloading does not affect overriding } {
    
    empty_class T8461o2 {
	static class One {
	    static void m() {}
	}
	static class Two extends One {
	    int m(int i) throws Exception { return 1; }
	}
	static class Three extends Two {
	    {
		m();
		this.m();
		try {
		    m(1);
		    this.m(1);
		} catch (Exception e) {
		}
	    }
	}
    }

} {PASS}
Test Case: 8.4.6.1-override-3
instance methods cannot override what is not accessible in superclass

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.1-override-3 { instance methods cannot override what is not
        accessible in superclass } {
    
    compile [saveas p1/T8461o3a.java {
package p1;
public class T8461o3a {
    static int m() { return 1; }
}
    }] [saveas T8461o3b.java {
class T8461o3b extends p1.T8461o3a {
    void m() throws Exception {}
}
    }]

} {PASS}
Test Case: 8.4.6.1-override-4
instance methods cannot override what is not accessible in superclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.1-override-4 { instance methods cannot override what is not
        accessible in superclass } {
    
    compile [saveas p1/T8461o4a.java {
package p1;
public class T8461o4a {
    static void m() {}
}
class T8461o4c extends p2.T8461o4b {
    // if a.m were not static, this would override it. Therefore, there is
    // a conflict, and this instance method is overriding a static method, even
    // though a.m is not inherited
    void m() {}
}
    }] [saveas p2/T8461o4b.java {
package p2;
public class T8461o4b extends p1.T8461o4a {}
    }]

} {FAIL}
Test Case: 8.4.6.1-override-5
non-abstract methods implement abstract ones that they override

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.1-override-5 { non-abstract methods implement abstract
        ones that they override } {
    
    empty_class T8461o5 {
	interface I {
	    void m();
	}
	class C implements I {
	    public void m() {}
	}
    }

} {PASS}
Test Case: 8.4.6.1-override-6
instance methods cannot override what is not accessible in superclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.1-override-6 { instance methods cannot override what is not
        accessible in superclass } {
    
    compile [saveas p1/T8461o6a.java {
package p1;
public class T8461o6a {
    static void m() {}
}
class T8461o6c extends p2.T8461o6b {
    // if a.m were not static, this would override it. Therefore, there is
    // a conflict, and this instance method is overriding a static method, even
    // though a.m is not inherited
    protected void m() {}
}
    }] [saveas p2/T8461o6b.java {
package p2;
public class T8461o6b extends p1.T8461o6a {
    protected void m() {} // legal
}
    }]

} {FAIL}

8.4.6.2

Directory : tests/jls/classes/method-declarations/inheritance-overriding-and-hiding/hiding


Test Case: 8.4.6.2-hiding-1
static methods may not override instance

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.2-hiding-1 { static methods may not override instance } {
    
    empty_class T8462h1 {
	static class One {
	    void m() {}
	}
	static class Two extends One {
	    static void m() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.2-hiding-2
overloading does not affect hiding

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.2-hiding-2 { overloading does not affect hiding } {
    
    empty_class T8462h2 {
	static class One {
	    void m() {}
	}
	static class Two extends One {
	    static int m(int i) throws Exception { return 1; }
	}
	static class Three extends Two {
	    {
		m();
		this.m();
		try {
		    m(1);
		    this.m(1);
		} catch (Exception e) {
		}
	    }
	}
    }

} {PASS}
Test Case: 8.4.6.2-hiding-3
static methods cannot hide what is not accessible in superclass

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.2-hiding-3 { static methods cannot hide what is not
        accessible in superclass } {
    
    compile [saveas p1/T8462h3a.java {
package p1;
public class T8462h3a {
    int m() { return 1; }
}
    }] [saveas T8462h3b.java {
class T8462h3b extends p1.T8462h3a {
    static void m() throws Exception {}
}
    }]

} {PASS}
Test Case: 8.4.6.2-hiding-4
static methods cannot hide what is not accessible in superclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.2-hiding-4 { static methods cannot hide what is not
        accessible in superclass } {
    
    compile [saveas p1/T8462h4a.java {
package p1;
public class T8462h4a {
    void m() {}
}
class T8462h4c extends p2.T8462h4b {
    // if this were not static, it would override a.m. Therefore, there is
    // a conflict, and this static method is hiding an instance method, even
    // though a.m is not inherited
    static void m() {}
}
    }] [saveas p2/T8462h4b.java {
package p2;
public class T8462h4b extends p1.T8462h4a {}
    }]

} {FAIL}
Test Case: 8.4.6.2-hiding-5
static methods cannot implement abstract ones

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.2-hiding-5 { static methods cannot implement abstract
        ones } {
    
    empty_class T8462h5 {
	interface I {
	    void m();
	}
	static class C implements I {
	    public static void m() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.2-hiding-6
static methods cannot hide what is not accessible in superclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.2-hiding-6 { static methods cannot hide what is not
        accessible in superclass } {
    
    compile [saveas p1/T8462h6a.java {
package p1;
public class T8462h6a {
    void m() {}
}
class T8462h6c extends p2.T8462h6b {
    // if this were not static, it would override a.m. Therefore, there is
    // a conflict, and this static method is hiding an instance method, even
    // though a.m is not inherited
    protected static void m() {}
}
    }] [saveas p2/T8462h6b.java {
package p2;
public class T8462h6b extends p1.T8462h6a {
    protected static void m() {} // legal
}
    }]

} {FAIL}

8.4.6.3

Directory : tests/jls/classes/method-declarations/inheritance-overriding-and-hiding/requirements


Test Case: 8.4.6.3-modifier-1
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.3-modifier-1 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m1 {
	static class One {
	    public void pub() {}
	    protected void pro() {}
	    void pack() {}
	    public static void spub() {}
	    protected static void spro() {}
	    static void spack() {}
	}
	static class Two extends One {
	    public void pub() {}
	    public void pro() {}
	    public void pack() {}
	    public static void spub() {}
	    public static void spro() {}
	    public static void spack() {}
	}
	static class Three extends One {
	    protected static void spro() {}
	    protected static void spack() {}
	}
	static class Four extends One {
	    static void spack() {}
	}
    }

} {PASS}
Test Case: 8.4.6.3-modifier-2
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-modifier-2 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m2 {
	class One {
	    public void pub() {}
	}
	class Two extends One {
	    protected void pub() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-modifier-3
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-modifier-3 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m3 {
	class One {
	    public void pub() {}
	}
	class Two extends One {
	    void pub() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-modifier-4
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-modifier-4 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m4 {
	class One {
	    public void pub() {}
	}
	class Two extends One {
	    private void pub() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-modifier-5
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-modifier-5 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m5 {
	class One {
	    protected void pro() {}
	}
	class Two extends One {
	    void pro() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-modifier-6
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-modifier-6 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m6 {
	class One {
	    protected void pro() {}
	}
	class Two extends One {
	    private void pro() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-modifier-7
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-modifier-7 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m7 {
	class One {
	    void pack() {}
	}
	class Two extends One {
	    private void pack() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-modifier-8
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-modifier-8 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m8 {
	static class One {
	    public static void pub() {}
	}
	static class Two extends One {
	    protected static void pub() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-modifier-9
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-modifier-9 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m9 {
	static class One {
	    public static void pub() {}
	}
	static class Two extends One {
	    static void pub() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-modifier-10
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-modifier-10 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m10 {
	static class One {
	    public static void pub() {}
	}
	static class Two extends One {
	    private static void pub() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-modifier-11
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-modifier-11 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m11 {
	static class One {
	    protected static void pro() {}
	}
	static class Two extends One {
	    static void pro() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-modifier-12
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-modifier-12 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m12 {
	static class One {
	    protected static void pro() {}
	}
	static class Two extends One {
	    private static void pro() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-modifier-13
Access of overriding or hiding methods must equal or exceed prior access

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-modifier-13 { Access of overriding or hiding methods
        must equal or exceed prior access } {
    
    empty_class T8463m13 {
	static class One {
	    static void pack() {}
	}
	static class Two extends One {
	    private static void pack() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-modifier-14
strictfp, abstract, native, and synchronized modifiers may change in overridden or hidden versions

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.3-modifier-14 { strictfp, abstract, native, and
        synchronized modifiers may change in overridden or hidden versions } {
    
    empty_class T8463m14 {
	abstract static class One {
	    strictfp void strict() {}
	    abstract void abs();
	    native void nat();
	    synchronized void synch() {}
	    static strictfp void sstrict() {}
	    static native void snat();
	    static synchronized void ssynch() {}
	}
	abstract static class Two extends One {
	    abstract void strict();
	    native void abs();
	    synchronized void nat() {}
	    strictfp void synch() {}
	    static native void sstrict();
	    static synchronized void snat() {}
	    static strictfp void ssynch() {}
	}
    }

} {PASS}
Test Case: 8.4.6.3-private-1
private methods are not overridden or hidden

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.3-private-1 { private methods are not overridden or
        hidden } {
    
    empty_class T8463p1 {
	static class One {
	    private final int m() { return 1; }
	}
	static class Two extends One {
	    private static void m() {}
	}
	static class Three extends Two {
	    Object m() { return null; }
	}
    }

} {PASS}
Test Case: 8.4.6.3-default-1
It is possible to avoid inheriting a package scope method, but it must still be overridden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-1 { It is possible to avoid inheriting a
        package scope method, but it must still be overridden correctly } {
    
    compile [saveas p1/T8463d1a.java {
package p1;
public class T8463d1a {
    void m() {}
}
class T8463d1c extends p2.T8463d1b {
    // conflicting return type, even though a.m() not inherited
    int m() { return 1; }
}
    }] [saveas p2/T8463d1b.java {
package p2;
public class T8463d1b extends p1.T8463d1a {}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-2
It is possible to avoid inheriting a package scope method, but it must still be hidden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-2 { It is possible to avoid inheriting a
        package scope method, but it must still be hidden correctly } {
    
    compile [saveas p1/T8463d2a.java {
package p1;
public class T8463d2a {
    static void m() {}
}
class T8463d2c extends p2.T8463d2b {
    // conflicting return type, even though a.m() not inherited
    static int m() { return 1; }
}
    }] [saveas p2/T8463d2b.java {
package p2;
public class T8463d2b extends p1.T8463d2a {}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-3
It is possible to avoid inheriting a package scope method, but it must still be overridden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-3 { It is possible to avoid inheriting a
        package scope method, but it must still be overridden correctly } {
    
    compile [saveas p1/T8463d3a.java {
package p1;
public class T8463d3a {
    void m() {}
}
class T8463d3c extends p2.T8463d3b {
    // conflicting throws clause, even though a.m() not inherited
    void m() throws Exception {}
}
    }] [saveas p2/T8463d3b.java {
package p2;
public class T8463d3b extends p1.T8463d3a {}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-4
It is possible to avoid inheriting a package scope method, but it must still be hidden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-4 { It is possible to avoid inheriting a
        package scope method, but it must still be hidden correctly } {
    
    compile [saveas p1/T8463d4a.java {
package p1;
public class T8463d4a {
    static void m() {}
}
class T8463d4c extends p2.T8463d4b {
    // conflicting throws clause, even though a.m() not inherited
    static void m() throws Exception {}
}
    }] [saveas p2/T8463d4b.java {
package p2;
public class T8463d4b extends p1.T8463d4a {}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-5
It is possible to avoid inheriting a package scope method, but it must still be overridden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-5 { It is possible to avoid inheriting a
        package scope method, but it must still be overridden correctly } {
    
    compile [saveas p1/T8463d5a.java {
package p1;
public class T8463d5a {
    final void m() {}
}
class T8463d5c extends p2.T8463d5b {
    // can't override final a.m, even though not inherited
    void m() {}
}
    }] [saveas p2/T8463d5b.java {
package p2;
public class T8463d5b extends p1.T8463d5a {}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-6
It is possible to avoid inheriting a package scope method, but it must still be hidden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-6 { It is possible to avoid inheriting a
        package scope method, but it must still be hidden correctly } {
    
    compile [saveas p1/T8463d6a.java {
package p1;
public class T8463d6a {
    static final void m() {}
}
class T8463d6c extends p2.T8463d6b {
    // can't override final a.m, even though not inherited
    static void m() {}
}
    }] [saveas p2/T8463d6b.java {
package p2;
public class T8463d6b extends p1.T8463d6a {}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-7
It is possible to avoid inheriting a package scope method, but it must still be overridden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-7 { It is possible to avoid inheriting a
        package scope method, but it must still be overridden correctly } {
    
    compile [saveas p1/T8463d7a.java {
package p1;
public class T8463d7a {
    void m() {}
}
class T8463d7c extends p2.T8463d7b {
    // conflicting return type, even though a.m() not inherited
    public int m() { return 1; }
}
    }] [saveas p2/T8463d7b.java {
package p2;
public class T8463d7b extends p1.T8463d7a {
    public int m() { return 1; }
}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-8
It is possible to avoid inheriting a package scope method, but it must still be hidden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-8 { It is possible to avoid inheriting a
        package scope method, but it must still be hidden correctly } {
    
    compile [saveas p1/T8463d8a.java {
package p1;
public class T8463d8a {
    static void m() {}
}
class T8463d8c extends p2.T8463d8b {
    // conflicting return type, even though a.m() not inherited
    public static int m() { return 1; }
}
    }] [saveas p2/T8463d8b.java {
package p2;
public class T8463d8b extends p1.T8463d8a {
    public static int m() { return 1; }
}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-9
It is possible to avoid inheriting a package scope method, but it must still be overridden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-9 { It is possible to avoid inheriting a
        package scope method, but it must still be overridden correctly } {
    
    compile [saveas p1/T8463d9a.java {
package p1;
public class T8463d9a {
    void m() {}
}
class T8463d9c extends p2.T8463d9b {
    // conflicting throws clause, even though a.m() not inherited
    public void m() throws Exception {}
}
    }] [saveas p2/T8463d9b.java {
package p2;
public class T8463d9b extends p1.T8463d9a {
    public void m() throws Exception {}
}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-10
It is possible to avoid inheriting a package scope method, but it must still be hidden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-10 { It is possible to avoid inheriting a
        package scope method, but it must still be hidden correctly } {
    
    compile [saveas p1/T8463d10a.java {
package p1;
public class T8463d10a {
    static void m() {}
}
class T8463d10c extends p2.T8463d10b {
    // conflicting throws clause, even though a.m() not inherited
    public static void m() throws Exception {}
}
    }] [saveas p2/T8463d10b.java {
package p2;
public class T8463d10b extends p1.T8463d10a {
    public static void m() throws Exception {}
}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-11
It is possible to avoid inheriting a package scope method, but it must still be overridden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-11 { It is possible to avoid inheriting a
        package scope method, but it must still be overridden correctly } {
    
    compile [saveas p1/T8463d11a.java {
package p1;
public class T8463d11a {
    final void m() {}
}
class T8463d11c extends p2.T8463d11b {
    // can't override final a.m, even though not inherited
    public void m() {}
}
    }] [saveas p2/T8463d11b.java {
package p2;
public class T8463d11b extends p1.T8463d11a {
    public void m() {}
}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-12
It is possible to avoid inheriting a package scope method, but it must still be hidden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-12 { It is possible to avoid inheriting a
        package scope method, but it must still be hidden correctly } {
    
    compile [saveas p1/T8463d12a.java {
package p1;
public class T8463d12a {
    static final void m() {}
}
class T8463d12c extends p2.T8463d12b {
    // can't override final a.m, even though not inherited
    public static void m() {}
}
    }] [saveas p2/T8463d12b.java {
package p2;
public class T8463d12b extends p1.T8463d12a {
    public static void m() {}
}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-13
It is possible to avoid inheriting a package scope method, but it must still be overridden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-13 { It is possible to avoid inheriting a
        package scope method, but it must still be overridden correctly } {
    
    compile [saveas p1/T8463d13a.java {
package p1;
public class T8463d13a {
    public class E1 extends Exception {}
    public class E2 extends Exception {}
    void m() throws E1 {}
}
class T8463d13c extends p2.T8463d13b {
    // conflicting throws clause, even though a.m() not inherited
    public void m() throws E2 {}
}
    }] [saveas p2/T8463d13b.java {
package p2;
public class T8463d13b extends p1.T8463d13a {
    public void m() throws E2 {}
}
    }]

} {FAIL}
Test Case: 8.4.6.3-default-14
It is possible to avoid inheriting a package scope method, but it must still be hidden correctly

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-default-14 { It is possible to avoid inheriting a
        package scope method, but it must still be hidden correctly } {
    
    compile [saveas p1/T8463d14a.java {
package p1;
public class T8463d14a {
    public class E1 extends Exception {}
    public class E2 extends Exception {}
    static void m() throws E1 {}
}
class T8463d14c extends p2.T8463d14b {
    // conflicting throws clause, even though a.m() not inherited
    public static void m() throws E2 {}
}
    }] [saveas p2/T8463d14b.java {
package p2;
public class T8463d14b extends p1.T8463d14a {
    public static void m() throws E2 {}
}
    }]

} {FAIL}
Test Case: 8.4.6.3-signature-1
return types must not conflict

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-signature-1 { return types must not conflict } {
    
    empty_class T8463s1 {
	class One {
	    int m() { return 1; }
	}
	class Two extends One {
	    void m() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-signature-2
return types must not conflict

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-signature-2 { return types must not conflict } {
    
    empty_class T8463s2 {
	static class One {
	    static int m() { return 1; }
	}
	static class Two extends One {
	    static void m() {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-signature-3
throws clauses must be compatible

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-signature-3 { throws clauses must be compatible } {
    
    empty_class T8463s3 {
	class One {
	    void m() {}
	}
	class Two extends One {
	    void m() throws Exception {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-signature-4
throws clauses must be compatible

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-signature-4 { throws clauses must be compatible } {
    
    empty_class T8463s4 {
	static class One {
	    static void m() {}
	}
	static class Two extends One {
	    static void m() throws Exception {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-signature-5
throws clauses must be compatible

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.3-signature-5 { throws clauses must be compatible } {
    
    empty_class T8463s5 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	class E3 extends Exception {}
	interface I1 {
	    void m() throws E1, E2;
	}
	interface I2 {
	    void m() throws E2, E3;
	}
	class C implements I1, I2 {
	    public void m() throws E2 {}
	}
	class D extends C {
	    public void m() {}
	}
    }

} {PASS}
Test Case: 8.4.6.3-signature-6
throws clauses must be compatible

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-signature-6 { throws clauses must be compatible } {
    
    empty_class T8463s6 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	class E3 extends Exception {}
	interface I1 {
	    void m() throws E1, E2;
	}
	interface I2 {
	    void m() throws E2, E3;
	}
	class C implements I1, I2 {
	    public void m() throws E1 {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-signature-7
throws clauses must be compatible

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-signature-7 { throws clauses must be compatible } {
    
    empty_class T8463s7 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	class E3 extends Exception {}
	interface I1 {
	    void m() throws E1, E2;
	}
	interface I2 {
	    void m() throws E2, E3;
	}
	class C implements I1, I2 {
	    public void m() throws E3 {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-signature-8
throws clauses must be compatible

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.3-signature-8 { throws clauses must be compatible } {
    
    empty_class T8463s8 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	interface I1 {
	    void m() throws E1;
	}
	interface I2 {
	    void m() throws E2;
	}
	abstract class C implements I1, I2 {}
	class D extends C {
	    public void m() {}
	}
    }

} {PASS}
Test Case: 8.4.6.3-signature-9
throws clauses must be compatible

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-signature-9 { throws clauses must be compatible } {
    
    empty_class T8463s9 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	interface I1 {
	    void m() throws E1;
	}
	interface I2 {
	    void m() throws E2;
	}
	abstract class C implements I1, I2 {}
	class D extends C {
	    public void m() throws E1 {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-signature-10
throws clauses must be compatible

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-signature-10 { throws clauses must be compatible } {
    
    empty_class T8463s10 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	interface I1 {
	    void m() throws E1;
	}
	interface I2 {
	    void m() throws E2;
	}
	abstract class C implements I1, I2 {}
	class D extends C {
	    public void m() throws E2 {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-signature-11
throws clauses must be compatible

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.3-signature-11 { throws clauses must be compatible } {
    
    empty_class T8463s11 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	abstract class C1 {
	    public abstract void m() throws E1;
	}
	interface I {
	    void m() throws E2;
	}
	abstract class C2 extends C1 implements I {}
	class D extends C2 {
	    public void m() {}
	}
    }

} {PASS}
Test Case: 8.4.6.3-signature-12
throws clauses must be compatible

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-signature-12 { throws clauses must be compatible } {
    
    empty_class T8463s12 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	abstract class C1 {
	    public abstract void m() throws E1;
	}
	interface I {
	    void m() throws E2;
	}
	abstract class C2 extends C1 implements I {}
	class D extends C2 {
	    public void m() throws E1 {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-signature-13
throws clauses must be compatible

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-signature-13 { throws clauses must be compatible } {
    
    empty_class T8463s13 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	abstract class C1 {
	    public abstract void m() throws E1;
	}
	interface I {
	    void m() throws E2;
	}
	abstract class C2 extends C1 implements I {}
	class D extends C2 {
	    public void m() throws E2 {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-signature-14
throws clauses must be compatible

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.3-signature-14 { throws clauses must be compatible } {
    
    empty_class T8463s14 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	abstract class C1 {
	    abstract void m() throws E1; // note non-public accessibility
	}
	interface I {
	    void m() throws E2;
	}
	abstract class C2 extends C1 implements I {}
	class D extends C2 {
	    public void m() {}
	}
    }

} {PASS}
Test Case: 8.4.6.3-signature-15
throws clauses must be compatible

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-signature-15 { throws clauses must be compatible } {
    
    empty_class T8463s15 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	abstract class C1 {
	    abstract void m() throws E1; // note non-public accessibility
	}
	interface I {
	    void m() throws E2;
	}
	abstract class C2 extends C1 implements I {}
	class D extends C2 {
	    public void m() throws E1 {}
	}
    }

} {FAIL}
Test Case: 8.4.6.3-signature-16
throws clauses must be compatible

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.3-signature-16 { throws clauses must be compatible } {
    
    empty_class T8463s16 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	abstract class C1 {
	    abstract void m() throws E1; // note non-public accessibility
	}
	interface I {
	    void m() throws E2;
	}
	abstract class C2 extends C1 implements I {}
	class D extends C2 {
	    public void m() throws E2 {}
	}
    }

} {FAIL}

8.4.6.4

Directory : tests/jls/classes/method-declarations/inheritance-overriding-and-hiding/inheriting-same-signature


Test Case: 8.4.6.4-multiple-1
multiple inheritance is not a problem

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-multiple-1 { multiple inheritance is not a problem } {
    
    empty_class T8464m1 {
	interface I1 {
	    void m();
	}
	interface I2 {
	    void m();
	}
	abstract class C implements I1, I2 {
	    { m(); }
	}
    }

} {PASS}
Test Case: 8.4.6.4-multiple-2
multiple paths still gives single inheritance

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-multiple-2 { multiple paths still gives single
        inheritance } {
    
    empty_class T8464m2 {
	interface Super {
	    void m();
	}
	interface I1 extends Super {}
	interface I2 extends Super {}
	abstract class C implements I1, I2 {
	    { m(); }
	}
    }

} {PASS}
Test Case: 8.4.6.4-multiple-3
It is possible to have access to multiple methods, when one is not inherited across package boundaries. The inherited method need not match the hidden one.

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-multiple-3 { It is possible to have access to multiple
        methods, when one is not inherited across package boundaries. The
        inherited method need not match the hidden one. } {
    
    compile [saveas p1/T8464m3a.java {
package p1;
public class T8464m3a {
    int m() { return 1; }
}
class T8464m3c extends p2.T8464m3b {
    // inherited static b.m() does not clash with accessible instance a.m()
    int i = m();
}
    }] [saveas p2/T8464m3b.java {
package p2;
public class T8464m3b extends p1.T8464m3a {
    protected static int m() { return 1; }
}
    }]

} {PASS}
Test Case: 8.4.6.4-multiple-4
It is possible to have access to multiple methods, when one is not inherited across package boundaries. The inherited method need not match the hidden one.

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-multiple-4 { It is possible to have access to multiple
        methods, when one is not inherited across package boundaries. The
        inherited method need not match the hidden one. } {
    
    compile [saveas p1/T8464m4a.java {
package p1;
public class T8464m4a {
    void m() {}
}
class T8464m4c extends p2.T8464m4b {
    // inherited return type of b.m() does not clash with accessible a.m()
    int i = m();
}
    }] [saveas p2/T8464m4b.java {
package p2;
public class T8464m4b extends p1.T8464m4a {
    protected int m() { return 1; }
}
    }]

} {PASS}
Test Case: 8.4.6.4-multiple-5
It is possible to have access to multiple methods, when one is not inherited across package boundaries. The inherited method need not match the hidden one.

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-multiple-5 { It is possible to have access to multiple
        methods, when one is not inherited across package boundaries. The
        inherited method need not match the hidden one. } {
    
    compile [saveas p1/T8464m5a.java {
package p1;
public class T8464m5a {
    public class E extends Exception {}
    void m() {}
}
class T8464m5c extends p2.T8464m5b {
    // inherited throws clause of b.m() does not clash with accessible a.m()
    {
	try {
	    m();
	} catch (E e) {
	}
    }
}
    }] [saveas p2/T8464m5b.java {
package p2;
public class T8464m5b extends p1.T8464m5a {
    protected void m() throws E {}
}
    }]

} {PASS}
Test Case: 8.4.6.4-multiple-6
It is possible to have access to multiple methods, when one is not inherited across package boundaries. The inherited method need not match the hidden one.

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-multiple-6 { It is possible to have access to multiple
        methods, when one is not inherited across package boundaries. The
        inherited method need not match the hidden one. } {
    
    compile [saveas p1/T8464m6a.java {
package p1;
public class T8464m6a {
    int m() throws Exception { return 1; }
}
class T8464m6c extends p2.T8464m6b {
    // inherited of b.m() does not clash with throws clause of accessible a.m()
    int i = m();
}
    }] [saveas p2/T8464m6b.java {
package p2;
public class T8464m6b extends p1.T8464m6a {
    protected int m() { return 1; }
}
    }]

} {PASS}
Test Case: 8.4.6.4-multiple-7
It is possible to have access to multiple methods, when one is not inherited across package boundaries. The inherited method need not match the hidden one.

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-multiple-7 { It is possible to have access to multiple
        methods, when one is not inherited across package boundaries. The
        inherited method need not match the hidden one. } {
    
    compile [saveas p1/T8464m7a.java {
package p1;
public class T8464m7a {
    final int m() { return 1; }
}
class T8464m7c extends p2.T8464m7b {
    // inherited b.m() does not violate final accessible a.m()
    int i = m();
}
    }] [saveas p2/T8464m7b.java {
package p2;
public class T8464m7b extends p1.T8464m7a {
    protected int m() { return 1; }
}
    }]

} {PASS}
Test Case: 8.4.6.4-multiple-8
It is possible to have access to multiple methods, when one is not inherited across package boundaries. The inherited method need not match the hidden one.

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-multiple-8 { It is possible to have access to multiple
        methods, when one is not inherited across package boundaries. The
        inherited method need not match the hidden one. } {
    
    compile [saveas p1/T8464m8a.java {
package p1;
public class T8464m8a {
    final int m() { return 1; }
}
abstract class T8464m8c extends p2.T8464m8b {
    // inherited abstract b.m() can be implemented outside package p1.
    // Therefore, even though accessible a.m() is final, it need not provide
    // the implementation of b.m() since it is not inherited
    // Note, however, that no concrete subclass of b can live in p1.
    int i = m();
}
    }] [saveas p2/T8464m8b.java {
package p2;
public abstract class T8464m8b extends p1.T8464m8a {
    protected abstract int m();
}
    }]

} {PASS}
Test Case: 8.4.6.4-multiple-9
multiple inheritance is not a problem

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-multiple-9 { multiple inheritance is not a problem } {
    
    empty_class T8464m9 {
	interface I {
	    void m();
	}
	class C {
	    public void m() {}
	}
	class D extends C implements I {
	    { m(); }
	}
    }

} {PASS}
Test Case: 8.4.6.4-multiple-10
multiple paths still gives single inheritance

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-multiple-10 { multiple paths still gives single
        inheritance } {
    
    empty_class T8464m10 {
	interface I {
	    void m();
	}
	abstract class C implements I {}
	abstract class D extends C implements I {
	    { m(); }
	}
    }

} {PASS}
Test Case: 8.4.6.4-multiple-11
It is possible to have access to multiple methods, when one is not inherited across package boundaries. The inherited method need not match the hidden one.

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-multiple-11 { It is possible to have access to multiple
        methods, when one is not inherited across package boundaries. The
        inherited method need not match the hidden one. } {
    
    compile [saveas p1/T8464m11a.java {
package p1;
public abstract class T8464m11a {
    abstract int m();
}
abstract class T8464m11c extends p2.T8464m11b {
    // inherited b.m() is concrete, but does not implement a.m()
    int i = m();
}
    }] [saveas p2/T8464m11b.java {
package p2;
public abstract class T8464m11b extends p1.T8464m11a {
    protected int m() { return 1; }
}
    }]

} {PASS}
Test Case: 8.4.6.4-abstract-1
in multiple inheritance, a non-abstract method must implement the inherited abstract ones

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.4-abstract-1 { in multiple inheritance, a non-abstract
        method must implement the inherited abstract ones } {
    
    empty_class T8464a1 {
	interface I {
	    void m();
	}
	class C {
	    void m() {}
	}
	class D extends C implements I {} // C.m() not public
    }

} {FAIL}
Test Case: 8.4.6.4-abstract-2
in multiple inheritance, a non-abstract method must implement the inherited abstract ones

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.4-abstract-2 { in multiple inheritance, a non-abstract
        method must implement the inherited abstract ones } {
    
    empty_class T8464a2 {
	interface I {
	    void m();
	}
	static class C {
	    public static void m() {}
	}
	static class D extends C implements I {} // C.m() static
    }

} {FAIL}
Test Case: 8.4.6.4-abstract-3
in multiple inheritance, a non-abstract method must implement the inherited abstract ones

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.4-abstract-3 { in multiple inheritance, a non-abstract
        method must implement the inherited abstract ones } {
    
    empty_class T8464a3 {
	interface I {
	    void m();
	}
	class C {
	    public int m() { return 1; }
	}
	class D extends C implements I {} // C.m() has wrong return type
    }

} {FAIL}
Test Case: 8.4.6.4-abstract-4
in multiple inheritance, a non-abstract method must implement the inherited abstract ones

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.4-abstract-4 { in multiple inheritance, a non-abstract
        method must implement the inherited abstract ones } {
    
    empty_class T8464a4 {
	interface I {
	    void m();
	}
	class C {
	    public void m() throws Exception {}
	}
	class D extends C implements I {} // C.m() has incompatible throws
    }

} {FAIL}
Test Case: 8.4.6.4-abstract-5
in multiple inheritance, a non-abstract method must implement the inherited abstract ones

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-abstract-5 { in multiple inheritance, a non-abstract
        method must implement the inherited abstract ones } {
    
    empty_class T8464a5 {
	interface I {
	    void m() throws Exception;
	}
	class C {
	    public void m() {}
	}
	class D extends C implements I {}
    }

} {PASS}
Test Case: 8.4.6.4-abstract-6
in multiple inheritance with no implementation, all abstract methods are inherited, regardless of throws clauses

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-abstract-6 { in multiple inheritance with no
        implementation, all abstract methods are inherited, regardless of
        throws clauses } {
    
    empty_class T8464a6 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	interface I1 {
	    void m() throws E1;
	}
	interface I2 {
	    void m() throws E2;
	}
	abstract class C implements I1, I2 {}
    }

} {PASS}
Test Case: 8.4.6.4-abstract-7
in multiple inheritance with no implementation, all abstract methods are inherited

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-abstract-7 { in multiple inheritance with no
        implementation, all abstract methods are inherited } {
    
    empty_class T8464a7 {
	abstract class C {
	    abstract void m(); // note non-public accessibility
	}
	interface I {
	    void m();
	}
	abstract class D extends C implements I {}
    }

} {PASS}
Test Case: 8.4.6.4-abstract-8
in multiple inheritance with no implementation, all abstract methods are inherited, regardless of throws clauses

Expected Result: PASS

Regression Test:

tcltest::test 8.4.6.4-abstract-8 { in multiple inheritance with no
        implementation, all abstract methods are inherited, regardless of
        throws clauses } {
    
    empty_class T8464a8 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	abstract class C {
	    public abstract void m() throws E1;
	}
	interface I {
	    void m() throws E2;
	}
	abstract class D extends C implements I {}
    }

} {PASS}
Test Case: 8.4.6.4-abstract-9
in multiple inheritance with no implementation, all abstract methods must have same return type

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.4-abstract-9 { in multiple inheritance with no
        implementation, all abstract methods must have same return type } {
    
    empty_class T8464a9 {
	interface I1 {
	    void m();
	}
	interface I2 {
	    int m();
	}
	abstract class C implements I1, I2 {}
    }

} {FAIL}
Test Case: 8.4.6.4-abstract-10
in multiple inheritance with no implementation, all abstract methods must have same return type

Expected Result: FAIL

Regression Test:

tcltest::test 8.4.6.4-abstract-10 { in multiple inheritance with no
        implementation, all abstract methods must have same return type } {
    
    empty_class T8464a9 {
	abstract class C {
	    public abstract void m();
	}
	interface I {
	    int m();
	}
	abstract class D extends C implements I {}
    }

} {FAIL}

8.5

Directory : tests/jls/classes/member-type-declarations


Test Case: 8.5-inheritance-1
A class inherits non-private accessible types that it does not hide by redeclaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.5-inheritance-1 { A class inherits non-private accessible
        types that it does not hide by redeclaration } {
    
    empty_class T85i1 {
	private class C {}
	class Inner extends T85i1 {
	    Inner.C c;
	}
    }

} {FAIL}
Test Case: 8.5-inheritance-2
A class inherits non-private accessible types that it does not hide by redeclaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.5-inheritance-2 { A class inherits non-private accessible
        types that it does not hide by redeclaration } {
    
    empty_class T85i2 {
	class C {}
	static class One extends T85i2 {
	    private class C {} // T85i2.C not inherited...
	}
	static class Two extends One {
	    Two.C c; // ...so neither C is inherited
	}
    }

} {FAIL}
Test Case: 8.5-inheritance-3
A class inherits non-private accessible types that it does not hide by redeclaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.5-inheritance-3 { A class inherits non-private accessible
        types that it does not hide by redeclaration } {
    
    compile [saveas p1/T85i3a.java {
package p1;
public class T85i3a {
    public class C {}
    static class Inner extends p2.T85i3b {
	Inner.C c; // package C not inherited from b
    }
}
    }] [saveas p2/T85i3b.java {
package p2;
public class T85i3b extends p1.T85i3a {
    class C {} // hides T85i3a.C
}
    }]

} {FAIL}
Test Case: 8.5-inheritance-4
A class inherits non-private accessible types that it does not hide by redeclaration

Expected Result: PASS

Regression Test:

tcltest::test 8.5-inheritance-4 { A class inherits non-private accessible
        types that it does not hide by redeclaration } {
    
    empty_class T85i4 {
	class One {
	    class C {}
	}
	class Two extends One {
	    C c = new Two.C();
	}
    }

} {PASS}
Test Case: 8.5-inheritance-5
Multiple types may be inherited with the same name, causing no problems if no ambiguous reference is made

Expected Result: PASS

Regression Test:

tcltest::test 8.5-inheritance-5 { Multiple types may be inherited with the
        same name, causing no problems if no ambiguous reference is made } {
    
    empty_class T85i5 {
	interface I {
	    class Dup {}
	}
	class C {
	    class Dup {}
	}
	class Sub extends C implements I {}
    }

} {PASS}
Test Case: 8.5-inheritance-6
Inheritance along multiple paths is still single inheritance

Expected Result: PASS

Regression Test:

tcltest::test 8.5-inheritance-6 { Inheritance along multiple paths is still
        single inheritance } {
    
    empty_class T85i6 {
	interface Super {
	    class C {}
	}
	interface I1 extends Super {}
	interface I2 extends Super {}
	class Sub implements I1, I2 {
	    C c = new Sub.C();
	}
    }

} {PASS}
Test Case: 8.5-name-1
Duplicate type names are forbidden

Expected Result: FAIL

Regression Test:

tcltest::test 8.5-name-1 { Duplicate type names are forbidden } {
    
    empty_class T85n1 {
	class Dup {}
	interface Dup {}
    }

} {FAIL}
Test Case: 8.5-hiding-1
Types can hide supertype types regardless of accessibility relationships

Expected Result: PASS

Regression Test:

tcltest::test 8.5-hiding-1 { Types can hide supertype types regardless of
        accessibility relationships } {
    
    empty_class T85h1 {
	class One {
	    public class Pub {}
	    protected class Pro {}
	    class Pack {}
	    private class Priv {}
	}
	class Two extends One {
	    private class Pub {}
	    private class Pro {}
	    private class Pack {}
	    private class Priv {}
	}
	class Three extends One {
	    class Pub {}
	    class Pro {}
	    class Pack {}
	    class Priv {}
	}
	class Four extends One {
	    protected class Pub {}
	    protected class Pro {}
	    protected class Pack {}
	    protected class Priv {}
	}
	class Five extends One {
	    public class Pub {}
	    public class Pro {}
	    public class Pack {}
	    public class Priv {}
	}
    }

} {PASS}
Test Case: 8.5-hiding-2
Types can hide supertype types regardless of type relationships

Expected Result: PASS

Regression Test:

tcltest::test 8.5-hiding-2 { Types can hide supertype types regardless of
        type relationships } {
    
    empty_class T85h2 {
	static class One {
	    class C {}
	    interface I {}
	}
	static class Two extends One {
	    interface C {}
	    class I {}
	}
    }

} {PASS}
Test Case: 8.5-hiding-3
Types can hide supertype types regardless of instance relationships

Expected Result: PASS

Regression Test:

tcltest::test 8.5-hiding-3 { Types can hide supertype types regardless of
        instance relationships } {
    
    empty_class T85h3 {
	static class One {
	    static class Stat {}
	    class Inst {}
	}
	static class Two extends One {
	    class Stat {}
	    static class Inst {}
	}
    }

} {PASS}
Test Case: 8.5-hiding-4
Types can hide supertype types regardless of modifier relationships

Expected Result: PASS

Regression Test:

tcltest::test 8.5-hiding-4 { Types can hide supertype types regardless of
        modifier relationships } {
    
    empty_class T85h4 {
	class One {
	    abstract class Abs {}
	    final class Fin {}
	    strictfp class Strict {}
	}
	class Two extends One {
	    final class Abs {}
	    strictfp class Fin {}
	    abstract class Strict {}
	}
    }

} {PASS}

8.5.1

Directory : tests/jls/classes/member-type-declarations/access-modifiers


Test Case: 8.5.1-valid-modifier-1
public is a valid ClassModifier for a member class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.1-valid-modifier-1 { public is a
        valid ClassModifier for a member class } {
    
    empty_class T851vm1 {
    public class Inner {}
    }

} {PASS}
Test Case: 8.5.1-valid-modifier-2
protected is a valid ClassModifier for a member class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.1-valid-modifier-2 { protected
        is a valid ClassModifier for a member class } {
    
    empty_class T851vm2 {
    protected class Inner {}
    }

} {PASS}
Test Case: 8.5.1-valid-modifier-3
private is a valid ClassModifier for a member class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.1-valid-modifier-3 { private
        is a valid ClassModifier for a member class } {
    
    empty_class T851vm3 {
    protected class Inner {}
    }

} {PASS}
Test Case: 8.5.1-valid-modifier-4
static is a valid ClassModifier for a member class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.1-valid-modifier-4 { static
        is a valid ClassModifier for a member class } {
    
    empty_class T851vm4 {
    static class Member {}
    }

} {PASS}
Test Case: 8.5.1-valid-modifier-5
strictfp is a valid ClassModifier for a member class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.1-valid-modifier-5 { strictfp
        is a valid ClassModifier for a member class } {
    
    empty_class T851vm5 {
    strictfp class Member {}
    }

} {PASS}
Test Case: 8.5.1-duplicate-modifier-1
compile time error to specify a class modifier twice

Expected Result: FAIL

Regression Test:

tcltest::test 8.5.1-duplicate-modifier-1 { compile time
        error to specify a class modifier twice } {
    
    empty_class T851dm1 {
    static static class Member {}
    }

} {FAIL}
Test Case: 8.5.1-duplicate-modifier-2
compile time error to specify a class modifier twice

Expected Result: FAIL

Regression Test:

tcltest::test 8.5.1-duplicate-modifier-2 { compile time
        error to specify a class modifier twice } {
    
    empty_class T851dm2 {
    protected protected class Inner {}
    }

} {FAIL}
Test Case: 8.5.1-duplicate-modifier-3
compile time error to specify a class modifier twice

Expected Result: FAIL

Regression Test:

tcltest::test 8.5.1-duplicate-modifier-3 { compile time
        error to specify a class modifier twice } {
    
    empty_class T851dm3 {
    private private class Inner {}
    }

} {FAIL}
Test Case: 8.5.1-conflicting-modifier-1
conflicting modifiers must generate a compile time error

Expected Result: FAIL

Regression Test:

tcltest::test 8.5.1-conflicting-modifier-1 { conflicting
        modifiers must generate a compile time error } {
    
    empty_class T851cm1 {
    public private class Inner {}
    }

} {FAIL}
Test Case: 8.5.1-conflicting-modifier-2
conflicting modifiers must generate a compile time error

Expected Result: FAIL

Regression Test:

tcltest::test 8.5.1-conflicting-modifier-2 { conflicting
        modifiers must generate a compile time error } {
    
    empty_class T851cm2 {
    public protected class Inner {}
    }

} {FAIL}
Test Case: 8.5.1-conflicting-modifier-3
conflicting modifiers must generate a compile time error

Expected Result: FAIL

Regression Test:

tcltest::test 8.5.1-conflicting-modifier-3 { conflicting
        modifiers must generate a compile time error } {
    
    empty_class T851cm3 {
    protected public class Inner {}
    }

} {FAIL}
Test Case: 8.5.1-conflicting-modifier-4
conflicting modifiers must generate a compile time error

Expected Result: FAIL

Regression Test:

tcltest::test 8.5.1-conflicting-modifier-4 { conflicting
        modifiers must generate a compile time error } {
    
    empty_class T851cm4 {
    protected private class Inner {}
    }

} {FAIL}
Test Case: 8.5.1-conflicting-modifier-5
conflicting modifiers must generate a compile time error

Expected Result: FAIL

Regression Test:

tcltest::test 8.5.1-conflicting-modifier-5 { conflicting
        modifiers must generate a compile time error } {
    
    empty_class T851cm5 {
    private public class Inner {}
    }

} {FAIL}
Test Case: 8.5.1-conflicting-modifier-6
conflicting modifiers must generate a compile time error

Expected Result: FAIL

Regression Test:

tcltest::test 8.5.1-conflicting-modifier-6 { conflicting
        modifiers must generate a compile time error } {
    
    empty_class T851cm6 {
    private protected class Inner {}
    }

} {FAIL}

8.5.2

Directory : tests/jls/classes/member-type-declarations/static-member-type-declarations


Test Case: 8.5.2-static-member-usage-1
a member type with the static modifier may use static members of the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.2-static-member-usage-1 { a member type
        with the static modifier may use static members
        of the enclosing class } {
    
    empty_class T852smu1 {
    static int foo;

    static class T852smu1_Test {
        T852smu1_Test() { foo = 0; }
    }
    }

} {PASS}
Test Case: 8.5.2-static-member-usage-2
a member type with the static modifier may use static members of the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.2-static-member-usage-2 { a member type
        with the static modifier may use static members
        of the enclosing class } {
    
    empty_class T852smu2 {
    static void foo() {}

    static class T852smu2_Test {
        T852smu2_Test() { foo(); }
    }
    }

} {PASS}
Test Case: 8.5.2-non-static-member-usage-1
It is a compile-time error if a static class contains a usage of a non-static member of the enclosing class

Expected Result: FAIL

Regression Test:

tcltest::test 8.5.2-non-static-member-usage-1 { It is a
        compile-time error if a static class contains a
        usage of a non-static member of the enclosing class } {
    
    empty_class T852nsmu1 {
    int foo;

    static class T852nsmu1_Test {
        T852nsmu1_Test() { foo = 0; }
    }
    }

} {FAIL}
Test Case: 8.5.2-non-static-member-usage-2
It is a compile-time error if a static class contains a usage of a non-static member of the enclosing class

Expected Result: FAIL

Regression Test:

tcltest::test 8.5.2-non-static-member-usage-2 { It is a
        compile-time error if a static class contains a
        usage of a non-static member of the enclosing class } {
    
    empty_class T852nsmu2 {
    void foo() {}

    static class T852nsmu2_Test {
        T852nsmu2_Test() { foo(); }
    }
    }

} {FAIL}
Test Case: 8.5.2-accessible-static-member-usage-1
a member type with the static modifer may access private static members of the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.2-accessible-static-member-usage-1 {
        a member type with the static modifer may access
        private static members of the enclosing class } {
    
    empty_class T852asmu1 {
    private static int foo;

    static class T852asmu1_Test {
        T852asmu1_Test() { foo = 0; }
    }
    }

} {PASS}
Test Case: 8.5.2-accessible-static-member-usage-2
a member type with the static modifer may access private static members of the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.2-accessible-static-member-usage-2 {
        a member type with the static modifer may access
        private static members of the enclosing class } {
    
    empty_class T852asmu2 {
    private static void foo() {}

    static class T852asmu2_Test {
        T852asmu2_Test() { foo(); }
    }
    }

} {PASS}
Test Case: 8.5.2-inherited-non-static-member-usage-1
a static member type may use non-static members of a superclass that happens to be the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.2-inherited-non-static-member-usage-1 {
        a static member type may use non-static members of
        a superclass that happens to be the enclosing class } {
    
    empty_class T852insmu1 {
    int foo;

    static class T852insmu1_Test extends T852insmu1 {
        T852insmu1_Test() { foo = 0; }
    }
    }

} {PASS}
Test Case: 8.5.2-inherited-non-static-member-usage-2
a static member type may use non-static members of a superclass that happens to be the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.2-inherited-non-static-member-usage-2 {
        a static member type may use non-static members of
        a superclass that happens to be the enclosing class } {
    
    empty_class T852insmu2 {
    void foo() {}

    static class T852insmu2_Test extends T852insmu2 {
        T852insmu2_Test() { foo(); }
    }
    }

} {PASS}
Test Case: 8.5.2-accessible-inherited-non-static-member-usage-1
a static member type may use private non-static members of a superclass that happens to be the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.2-accessible-inherited-non-static-member-usage-1 {
        a static member type may use private non-static members of
        a superclass that happens to be the enclosing class } {
    
    empty_class T852ainsmu1 {
    private int foo;

    static class T852ainsmu1_Test extends T852ainsmu1 {
        T852ainsmu1_Test() { super.foo = 0; }
    }
    }

} {PASS}
Test Case: 8.5.2-accessible-inherited-non-static-member-usage-2
a static member type may use private non-static members of a superclass that happens to be the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.5.2-accessible-inherited-non-static-member-usage-2 {
        a static member type may use private non-static members of
        a superclass that happens to be the enclosing class } {
    
    empty_class T852ainsmu2 {
    private void foo() {}

    static class T852ainsmu2_Test extends T852ainsmu2 {
        T852ainsmu2_Test() { super.foo(); }
    }
    }

} {PASS}

8.6

Directory : tests/jls/classes/instance-initializers


Test Case: 8.6-checked-exception-1
Instance initializers of non-anonymous classes may throw checked exceptions only if all constructors have compatible throws clauses

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-checked-exception-1 { Instance initializers of non-anonymous
        classes may throw checked exceptions only if all constructors
        have compatible throws clauses } {
    
    empty_class T86ce1 {
        { if (true) throw new ClassNotFoundException(); }
    }

} {FAIL}
Test Case: 8.6-checked-exception-2
Instance initializers of non-anonymous classes may throw checked exceptions only if all constructors have compatible throws clauses

Expected Result: PASS

Regression Test:

tcltest::test 8.6-checked-exception-2 { Instance initializers of non-anonymous
        classes may throw checked exceptions only if all constructors
        have compatible throws clauses } {
    
    empty_class T86ce2 {
        { if (true) throw new ClassNotFoundException(); }
        T86ce2() throws ClassNotFoundException {}
    }

} {PASS}
Test Case: 8.6-checked-exception-3
Instance initializers of non-anonymous classes may throw checked exceptions only if all constructors have compatible throws clauses

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-checked-exception-3 { Instance initializers of non-anonymous
        classes may throw checked exceptions only if all constructors
        have compatible throws clauses } {
    
    empty_class T86ce3 {
        { if (true) throw new ClassNotFoundException(); }
        T86ce3() throws ClassNotFoundException {}
        T86ce3(int i) {}
    }

} {FAIL}
Test Case: 8.6-checked-exception-4
Instance initializers of non-anonymous classes may throw checked exceptions only if all constructors have compatible throws clauses

Expected Result: PASS

Regression Test:

tcltest::test 8.6-checked-exception-4 { Instance initializers of non-anonymous
        classes may throw checked exceptions only if all constructors
        have compatible throws clauses } {
    
    empty_class T86ce4 {
        { if (true) throw new ClassNotFoundException(); }
        T86ce4() throws Throwable {}
    }

} {PASS}
Test Case: 8.6-checked-exception-5
Instance initializers of anonymous classes may throw any exception, and the generated constructor must automatically throw such exceptions

Expected Result: PASS

Regression Test:

tcltest::test 8.6-checked-exception-5 { Instance initializers of anonymous
        classes may throw any exception, and the generated constructor must
        automatically throw such exceptions } {
    
    empty_main T86ce5 {
        try {
            new Object() {
                { if (true) throw new ClassNotFoundException(); }
            };
        } catch (ClassNotFoundException e) {
        }
    }

} {PASS}
Test Case: 8.6-checked-exception-6
Instance initializers of anonymous classes may throw any exception, and the generated constructor must automatically throw such exceptions

Expected Result: PASS

Regression Test:

tcltest::test 8.6-checked-exception-6 { Instance initializers of anonymous
        classes may throw any exception, and the generated constructor must
        automatically throw such exceptions } {
    
    empty_class T86ce6 {
        void foo() throws ClassNotFoundException {
            new Object() {
                { if (true) throw new ClassNotFoundException(); }
            };
        }
    }

} {PASS}
Test Case: 8.6-checked-exception-7
Instance initializers of non-anonymous classes may throw checked exceptions only if all constructors have compatible throws clauses

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-checked-exception-7 { Instance initializers of non-anonymous
        classes may throw checked exceptions only if all constructors
        have compatible throws clauses } {
    
    empty_class T86ce7 {
        int m() throws ClassNotFoundException { return 1; }
        { m(); }
    }

} {FAIL}
Test Case: 8.6-checked-exception-8
Instance initializers of non-anonymous classes may throw checked exceptions only if all constructors have compatible throws clauses

Expected Result: PASS

Regression Test:

tcltest::test 8.6-checked-exception-8 { Instance initializers of non-anonymous
        classes may throw checked exceptions only if all constructors
        have compatible throws clauses } {
    
    empty_class T86ce8 {
        int m() throws ClassNotFoundException { return 1; }
        { m(); }
        T86ce8() throws ClassNotFoundException {}
    }

} {PASS}
Test Case: 8.6-checked-exception-9
Instance initializers of non-anonymous classes may throw checked exceptions only if all constructors have compatible throws clauses

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-checked-exception-9 { Instance initializers of non-anonymous
        classes may throw checked exceptions only if all constructors
        have compatible throws clauses } {
    
    empty_class T86ce9 {
        int m() throws ClassNotFoundException { return 1; }
        { m(); }
        T86ce9() throws ClassNotFoundException {}
        T86ce9(int i) {}
    }

} {FAIL}
Test Case: 8.6-checked-exception-10
Instance initializers of non-anonymous classes may throw checked exceptions only if all constructors have compatible throws clauses

Expected Result: PASS

Regression Test:

tcltest::test 8.6-checked-exception-10 { Instance initializers of non-anonymous
        classes may throw checked exceptions only if all constructors
        have compatible throws clauses } {
    
    empty_class T86ce10 {
        int m() throws ClassNotFoundException { return 1; }
        { m(); }
        T86ce10() throws Throwable {}
    }

} {PASS}
Test Case: 8.6-checked-exception-11
Instance initializers of anonymous classes may throw any exception, and the generated constructor must automatically throw such exceptions

Expected Result: PASS

Regression Test:

tcltest::test 8.6-checked-exception-11 { Instance initializers of anonymous
        classes may throw any exception, and the generated constructor must
        automatically throw such exceptions } {
    
    empty_main T86ce11 {
        try {
            new Object() {
                int m() throws ClassNotFoundException { return 1; }
                { m(); }
            };
        } catch (ClassNotFoundException e) {
        }
    }

} {PASS}
Test Case: 8.6-checked-exception-12
Instance initializers of anonymous classes may throw any exception, and the generated constructor must automatically throw such exceptions

Expected Result: PASS

Regression Test:

tcltest::test 8.6-checked-exception-12 { Instance initializers of anonymous
        classes may throw any exception, and the generated constructor must
        automatically throw such exceptions } {
    
    empty_class T86ce12 {
        void foo() throws ClassNotFoundException {
            new Object() {
                int m() throws ClassNotFoundException { return 1; }
                { m(); }
            };
        }
    }

} {PASS}
Test Case: 8.6-complete-1
Instance initializers must be able to complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-complete-1 { Instance initializers must be able to complete
        normally } {
    
    empty_class T86c1 {
        { throw new RuntimeException(); }
    }

} {FAIL}
Test Case: 8.6-complete-2
Instance initializers must be able to complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-complete-2 { Instance initializers must be able to complete
        normally } {
    
    empty_class T86c2 {
        { throw new RuntimeException(); }
        T86c2() throws RuntimeException {}
    }

} {FAIL}
Test Case: 8.6-complete-3
Instance initializers must be able to complete normally, by 14.20, if(true) always completes normally

Expected Result: PASS

Regression Test:

tcltest::test 8.6-complete-3 { Instance initializers must be able to complete
        normally, by 14.20, if(true) always completes normally } {
    
    empty_class T86c3 {
        { if (true) throw new RuntimeException(); }
    }

} {PASS}
Test Case: 8.6-complete-4
Instance initializers must be able to complete normally

Expected Result: PASS

Regression Test:

tcltest::test 8.6-complete-4 { Instance initializers must be able to complete
        normally } {
    
    empty_class T86c4 {
        int m() throws ClassNotFoundException { return 1; }
        { m(); }
        T86c4() throws ClassNotFoundException {}
    }

} {PASS}
Test Case: 8.6-complete-5
Instance initializers must be able to complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-complete-5 { Instance initializers must be able to complete
        normally } {
    
    empty_class T86c5 {
        { while (true); }
    }

} {FAIL}
Test Case: 8.6-complete-6
Instance initializers must be able to complete normally, by 14.20, if(true) always completes normally

Expected Result: PASS

Regression Test:

tcltest::test 8.6-complete-6 { Instance initializers must be able to complete
        normally, by 14.20, if(true) always completes normally } {
    
    empty_class T86c6 {
        { if (true) while (true); }
    }

} {PASS}
Test Case: 8.6-return-1
Instance initializers may not return

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-return-1 { Instance initializers may not return } {
    
    empty_class T86r1 {
        { return; }
    }

} {FAIL}
Test Case: 8.6-return-2
Instance initializers may not return

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-return-2 { Instance initializers may not return } {
    
    empty_class T86r2 {
        { if (false) return; }
    }

} {FAIL}
Test Case: 8.6-return-3
Instance initializers may not return

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-return-3 { Instance initializers may not return } {
    
    empty_class T86r3 {
        { return 1; }
    }

} {FAIL}
Test Case: 8.6-return-4
Instance initializers may not return

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-return-4 { Instance initializers may not return } {
    
    empty_class T86r4 {
        { if (false) return 1; }
    }

} {FAIL}
Test Case: 8.6-this-1
Instance initializers may access this

Expected Result: PASS

Regression Test:

tcltest::test 8.6-this-1 { Instance initializers may access this } {
    
    empty_class T86t1 {
        { this.toString(); }
    }

} {PASS}
Test Case: 8.6-super-1
Instance initializers may access super

Expected Result: PASS

Regression Test:

tcltest::test 8.6-super-1 { Instance initializers may access super } {
    
    empty_class T86s1 {
        { super.toString(); }
    }

} {PASS}
Test Case: 8.6-modifier-1
Instance initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-modifier-1 { Instance initializers may not have modifiers } {
    
    empty_class T86m1 {
	public {}
    }

} {FAIL}
Test Case: 8.6-modifier-2
Instance initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-modifier-2 { Instance initializers may not have modifiers } {
    
    empty_class T86m2 {
	protected {}
    }

} {FAIL}
Test Case: 8.6-modifier-3
Instance initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-modifier-3 { Instance initializers may not have modifiers } {
    
    empty_class T86m3 {
	private {}
    }

} {FAIL}
Test Case: 8.6-modifier-4
Instance initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-modifier-4 { Instance initializers may not have modifiers } {
    
    empty_class T86m4 {
	final {}
    }

} {FAIL}
Test Case: 8.6-modifier-5
Instance initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-modifier-5 { Instance initializers may not have modifiers } {
    
    empty_class T86m5 {
	synchronized {}
    }

} {FAIL}
Test Case: 8.6-modifier-6
Instance initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-modifier-6 { Instance initializers may not have modifiers } {
    
    empty_class T86m6 {
	volatile {}
    }

} {FAIL}
Test Case: 8.6-modifier-7
Instance initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-modifier-7 { Instance initializers may not have modifiers } {
    
    empty_class T86m7 {
	transient {}
    }

} {FAIL}
Test Case: 8.6-modifier-8
Instance initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-modifier-8 { Instance initializers may not have modifiers } {
    
    empty_class T86m8 {
	native {}
    }

} {FAIL}
Test Case: 8.6-modifier-9
Instance initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-modifier-9 { Instance initializers may not have modifiers } {
    
    empty_class T86m9 {
	abstract {}
    }

} {FAIL}
Test Case: 8.6-modifier-10
Instance initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.6-modifier-10 { Instance initializers may not have modifiers } {
    
    empty_class T86m10 {
	strictfp {}
    }

} {FAIL}

8.7

Directory : tests/jls/classes/static-initializers


Test Case: 8.7-checked-exception-1
Static initializers may not throw checked exceptions

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-checked-exception-1 { Static initializers may not throw
        checked exceptions } {
    
    empty_class T87ce1 {
        static { if (false) throw new ClassNotFoundException(); }
    }

} {FAIL}
Test Case: 8.7-checked-exception-2
Static initializers may not throw checked exceptions

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-checked-exception-2 { Static initializers may not throw
        checked exceptions } {
    
    empty_class T87ce2 {
        static int m() throws ClassNotFoundException { return 1; }
        static { m(); }
    }

} {FAIL}
Test Case: 8.7-checked-exception-3
Static initializers may not throw checked exceptions

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-checked-exception-3 { Static initializers may not throw
        checked exceptions } {
    
    empty_class T87ce3 {
        static int m() throws ClassNotFoundException { return 1; }
        static { if (false) m(); }
    }

} {FAIL}
Test Case: 8.7-complete-1
Static initializers must be able to complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-complete-1 { Static initializers must be able to complete
        normally } {
    
    empty_class T87c1 {
        static { throw new RuntimeException(); }
    }

} {FAIL}
Test Case: 8.7-complete-2
Static initializers must be able to complete normally, by 14.20, if(true) always completes normally

Expected Result: PASS

Regression Test:

tcltest::test 8.7-complete-2 { Static initializers must be able to complete
        normally, by 14.20, if(true) always completes normally } {
    
    empty_class T87c2 {
        static { if (true) throw new RuntimeException(); }
    }

} {PASS}
Test Case: 8.7-complete-3
Static initializers must be able to complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-complete-3 { Static initializers must be able to complete
        normally } {
    
    empty_class T87c3 {
        static { while (true); }
    }

} {FAIL}
Test Case: 8.7-complete-4
Static initializers must be able to complete normally, by 14.20, if(true) always completes normally

Expected Result: PASS

Regression Test:

tcltest::test 8.7-complete-4 { Static initializers must be able to complete
        normally, by 14.20, if(true) always completes normally } {
    
    empty_class T87c4 {
        static { if (true) while (true); }
    }

} {PASS}
Test Case: 8.7-return-1
Static initializers may not return

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-return-1 { Static initializers may not return } {
    
    empty_class T87r1 {
        static { return; }
    }

} {FAIL}
Test Case: 8.7-return-2
Static initializers may not return

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-return-2 { Static initializers may not return } {
    
    empty_class T87r2 {
        static { if (false) return; }
    }

} {FAIL}
Test Case: 8.7-return-3
Static initializers may not return

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-return-3 { Static initializers may not return } {
    
    empty_class T87r3 {
        static { return 1; }
    }

} {FAIL}
Test Case: 8.7-return-4
Static initializers may not return

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-return-4 { Static initializers may not return } {
    
    empty_class T87r4 {
        static { if (false) return 1; }
    }

} {FAIL}
Test Case: 8.7-this-1
Static initializers may not access this

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-this-1 { Static initializers may not access this } {
    
    empty_class T87t1 {
        static { this.toString(); }
    }

} {FAIL}
Test Case: 8.7-this-2
Static initializers may not access this, not even implicitly

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-this-2 { Static initializers may not access this, not
        even implicitly } {
    
    empty_class T87t2 {
        static { toString(); }
    }

} {FAIL}
Test Case: 8.7-super-1
Static initializers may not access super

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-super-1 { Static initializers may not access super } {
    
    empty_class T87s1 {
        static { super.toString(); }
    }

} {FAIL}
Test Case: 8.7-modifier-1
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-1 { Static initializers may not have modifiers } {
    
    empty_class T87m1 {
	public static {}
    }

} {FAIL}
Test Case: 8.7-modifier-2
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-2 { Static initializers may not have modifiers } {
    
    empty_class T87m2 {
	protected static {}
    }

} {FAIL}
Test Case: 8.7-modifier-3
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-3 { Static initializers may not have modifiers } {
    
    empty_class T87m3 {
	private static {}
    }

} {FAIL}
Test Case: 8.7-modifier-4
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-4 { Static initializers may not have modifiers } {
    
    empty_class T87m4 {
	final static {}
    }

} {FAIL}
Test Case: 8.7-modifier-5
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-5 { Static initializers may not have modifiers } {
    
    empty_class T87m5 {
	synchronized static {}
    }

} {FAIL}
Test Case: 8.7-modifier-6
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-6 { Static initializers may not have modifiers } {
    
    empty_class T87m6 {
	volatile static {}
    }

} {FAIL}
Test Case: 8.7-modifier-7
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-7 { Static initializers may not have modifiers } {
    
    empty_class T87m7 {
	transient static {}
    }

} {FAIL}
Test Case: 8.7-modifier-8
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-8 { Static initializers may not have modifiers } {
    
    empty_class T87m8 {
	native static {}
    }

} {FAIL}
Test Case: 8.7-modifier-9
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-9 { Static initializers may not have modifiers } {
    
    empty_class T87m9 {
	abstract static {}
    }

} {FAIL}
Test Case: 8.7-modifier-10
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-10 { Static initializers may not have modifiers } {
    
    empty_class T87m10 {
	strictfp static {}
    }

} {FAIL}
Test Case: 8.7-modifier-11
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-11 { Static initializers may not have modifiers } {
    
    empty_class T87m11 {
	static public {}
    }

} {FAIL}
Test Case: 8.7-modifier-12
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-12 { Static initializers may not have modifiers } {
    
    empty_class T87m12 {
	static protected {}
    }

} {FAIL}
Test Case: 8.7-modifier-13
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-13 { Static initializers may not have modifiers } {
    
    empty_class T87m13 {
	static private {}
    }

} {FAIL}
Test Case: 8.7-modifier-14
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-14 { Static initializers may not have modifiers } {
    
    empty_class T87m14 {
	static final {}
    }

} {FAIL}
Test Case: 8.7-modifier-15
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-15 { Static initializers may not have modifiers } {
    
    empty_class T87m15 {
	static synchronized {}
    }

} {FAIL}
Test Case: 8.7-modifier-16
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-16 { Static initializers may not have modifiers } {
    
    empty_class T87m16 {
	static volatile {}
    }

} {FAIL}
Test Case: 8.7-modifier-17
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-17 { Static initializers may not have modifiers } {
    
    empty_class T87m17 {
	static transient {}
    }

} {FAIL}
Test Case: 8.7-modifier-18
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-18 { Static initializers may not have modifiers } {
    
    empty_class T87m18 {
	static native {}
    }

} {FAIL}
Test Case: 8.7-modifier-19
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-19 { Static initializers may not have modifiers } {
    
    empty_class T87m19 {
	static abstract {}
    }

} {FAIL}
Test Case: 8.7-modifier-20
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-20 { Static initializers may not have modifiers } {
    
    empty_class T87m20 {
	static strictfp {}
    }

} {FAIL}
Test Case: 8.7-modifier-21
Static initializers may not have modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 8.7-modifier-21 { Static initializers may not have modifiers } {
    
    empty_class T87m21 {
	static static {}
    }

} {FAIL}

8.8

Directory : tests/jls/classes/constructor-declarations


Test Case: 8.8-simpletypename-1
SimpleTypeName in the ConstructorDeclarator must be the simple name of the class that contains the constructor declaration

Expected Result: PASS

Regression Test:

tcltest::test 8.8-simpletypename-1 { SimpleTypeName in the
        ConstructorDeclarator must be the simple name of the
        class that contains the constructor declaration } {
    
    empty_class T88stn1 "T88stn1() {}"

} {PASS}
Test Case: 8.8-simpletypename-2
SimpleTypeName in the ConstructorDeclarator must be the simple name of the class that contains the constructor declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.8-simpletypename-2 { SimpleTypeName in the
        ConstructorDeclarator must be the simple name of the
        class that contains the constructor declaration } {
    
    empty_class T88stn2 "not_ctor() {}"

} {FAIL}
Test Case: 8.8-simpletypename-3
SimpleTypeName in the ConstructorDeclarator must be the simple name of the class that contains the constructor declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.8-simpletypename-3 { SimpleTypeName in the
        ConstructorDeclarator must be the simple name of the
        class that contains the constructor declaration } {
    
    empty_class T88stn3 {
        class Inner {
            not_ctor() {}
        }
    }

} {FAIL}
Test Case: 8.8-simpletypename-4
SimpleTypeName in the ConstructorDeclarator must be the simple name of the class that contains the constructor declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.8-simpletypename-4 { SimpleTypeName in the
        ConstructorDeclarator must be the simple name of the
        class that contains the constructor declaration } {
    
    empty_main T88stn4 {
        class Local {
            Local() {} // trigger jikes bug 179
            not_ctor() {}
        }
    }

} {FAIL}
Test Case: 8.8-example-1
JLS example

Expected Result: PASS

Regression Test:

tcltest::test 8.8-example-1 { JLS example } {
    
    empty_class Point {
        int x, y;
        Point(int x, int y) { this.x = x; this.y = y; }
    }

} {PASS}

8.8.1

Directory : tests/jls/classes/constructor-declarations/formal-parameters


Test Case: 8.8.1-formal-parameters-1
See 8.4.1

Expected Result: PASS

Regression Test:

tcltest::test 8.8.1-formal-parameters-1 { See 8.4.1 } {
    
    empty_class T881fp1 "T881fp1() {}"

} {PASS}
Test Case: 8.8.1-formal-parameters-2
See 8.4.1

Expected Result: PASS

Regression Test:

tcltest::test 8.8.1-formal-parameters-2 { See 8.4.1 } {
    
    empty_class T881fp2 "T881fp2(int i) {}"

} {PASS}
Test Case: 8.8.1-formal-parameters-3
See 8.4.1

Expected Result: PASS

Regression Test:

tcltest::test 8.8.1-formal-parameters-3 { See 8.4.1 } {
    
    empty_class T881fp3 "T881fp3(int i, Object j) {}"

} {PASS}
Test Case: 8.8.1-formal-parameters-4
See 8.4.1

Expected Result: PASS

Regression Test:

tcltest::test 8.8.1-formal-parameters-4 { See 8.4.1 } {
    
    empty_class T881fp4 "T881fp4(int i, final Object j) {}"

} {PASS}
Test Case: 8.8.1-formal-parameters-5
See 8.4.1

Expected Result: PASS

Regression Test:

tcltest::test 8.8.1-formal-parameters-5 { See 8.4.1 } {
    
    empty_class T881fp5 {T881fp5(int[] arr, Object j) {}}

} {PASS}
Test Case: 8.8.1-formal-parameters-6
See 8.4.1

Expected Result: PASS

Regression Test:

tcltest::test 8.8.1-formal-parameters-6 { See 8.4.1 } {
    
    empty_class T881fp6 {T881fp6(final int[] arr) {}}

} {PASS}
Test Case: 8.8.1-invalid-formal-parameters-1
See 8.4.1

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.1-invalid-formal-parameters-1 { See 8.4.1 } {
    
    empty_class T881ifp1 "T881ifp1(int i, ) {}"

} {FAIL}
Test Case: 8.8.1-invalid-formal-parameters-2
See 8.4.1

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.1-invalid-formal-parameters-2 { See 8.4.1 } {
    
    empty_class T881ifp2 "T881ifp2(int i, foo) {}"

} {FAIL}
Test Case: 8.8.1-invalid-formal-parameters-3
See 8.4.1

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.1-invalid-formal-parameters-3 { See 8.4.1 } {
    
    empty_class T881ifp3 "T881ifp3(int i, int) {}"

} {FAIL}
Test Case: 8.8.1-invalid-formal-parameters-4
See 8.4.1

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.1-invalid-formal-parameters-4 { See 8.4.1 } {
    
    empty_class T881ifp4 "T881ifp4(int i, final int) {}"

} {FAIL}

8.8.2

Directory : tests/jls/classes/constructor-declarations/constructor-signature


Test Case: 8.8.2-signature-1
The signature of a constructor consists of the number and types of formal parameters to the constructor

Expected Result: PASS

Regression Test:

tcltest::test 8.8.2-signature-1 { The signature of a
        constructor consists of the number and types
        of formal parameters to the constructor } {
    
    empty_class T882s1 {
T882s1() {}
T882s1(int i) {}
T882s1(Object o) {}
    }

} {PASS}
Test Case: 8.8.2-invalid-signature-1
A class may not declare two constructors with the same signature, or a compile-time error occurs

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.2-invalid-signature-1 { A class may not
        declare two constructors with the same signature,
        or a compile-time error occurs } {
    
    empty_class T882is1 {
T882is1(int i) {}
T882is1(int j) {}
    }

} {FAIL}

8.8.3

Directory : tests/jls/classes/constructor-declarations/constructor-modifiers


Test Case: 8.8.3-modifiers-1
ConstructorModifier can be public, protected, or private

Expected Result: PASS

Regression Test:

tcltest::test 8.8.3-modifiers-1 { ConstructorModifier can
        be public, protected, or private } {
    
    empty_class T883m1 "public T883m1() {}"

} {PASS}
Test Case: 8.8.3-modifiers-2
ConstructorModifier can be public, protected, or private

Expected Result: PASS

Regression Test:

tcltest::test 8.8.3-modifiers-2 { ConstructorModifier can
        be public, protected, or private } {
    
    empty_class T883m2 "protected T883m2() {}"

} {PASS}
Test Case: 8.8.3-modifiers-3
ConstructorModifier can be public, protected, or private

Expected Result: PASS

Regression Test:

tcltest::test 8.8.3-modifiers-3 { ConstructorModifier can
        be public, protected, or private } {
    
    empty_class T883m3 "private T883m3() {}"

} {PASS}
Test Case: 8.8.3-duplicate-modifiers-1
A compile-time error occurs if the same modifier appears more than once in a constructor declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-duplicate-modifiers-1 { A compile-time
        error occurs if the same modifier appears more than
       once in a constructor declaration } {
    
    empty_class T883dm1 "public public T883dm1() {}"

} {FAIL}
Test Case: 8.8.3-duplicate-modifiers-2
A compile-time error occurs if the same modifier appears more than once in a constructor declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-duplicate-modifiers-2 { A compile-time
        error occurs if the same modifier appears more than
       once in a constructor declaration } {
    
    empty_class T883dm2 "protected protected T883dm2() {}"

} {FAIL}
Test Case: 8.8.3-duplicate-modifiers-3
A compile-time error occurs if the same modifier appears more than once in a constructor declaration

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-duplicate-modifiers-3 { A compile-time
        error occurs if the same modifier appears more than
       once in a constructor declaration } {
    
    empty_class T883dm3 "private private T883dm3() {}"

} {FAIL}
Test Case: 8.8.3-multiple-modifiers-1
A compile-time error occurs if a constructor declaration has more than one of public, protected, and private

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-multiple-modifiers-1 { A compile-time
        error occurs if a constructor declaration has more
        than one of  public, protected, and private } {
    
    empty_class T883mm1 "public protected T883mm1() {}"

} {FAIL}
Test Case: 8.8.3-multiple-modifiers-2
A compile-time error occurs if a constructor declaration has more than one of public, protected, and private

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-multiple-modifiers-2 { A compile-time
        error occurs if a constructor declaration has more
        than one of  public, protected, and private } {
    
    empty_class T883mm2 "public private T883mm2() {}"

} {FAIL}
Test Case: 8.8.3-multiple-modifiers-3
A compile-time error occurs if a constructor declaration has more than one of public, protected, and private

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-multiple-modifiers-3 { A compile-time
        error occurs if a constructor declaration has more
        than one of  public, protected, and private } {
    
    empty_class T883mm3 "protected public T883mm3() {}"

} {FAIL}
Test Case: 8.8.3-multiple-modifiers-4
A compile-time error occurs if a constructor declaration has more than one of public, protected, and private

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-multiple-modifiers-4 { A compile-time
        error occurs if a constructor declaration has more
        than one of  public, protected, and private } {
    
    empty_class T883mm4 "protected private T883mm4() {}"

} {FAIL}
Test Case: 8.8.3-multiple-modifiers-5
A compile-time error occurs if a constructor declaration has more than one of public, protected, and private

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-multiple-modifiers-5 { A compile-time
        error occurs if a constructor declaration has more
        than one of  public, protected, and private } {
    
    empty_class T883mm5 "private public T883mm5() {}"

} {FAIL}
Test Case: 8.8.3-multiple-modifiers-6
A compile-time error occurs if a constructor declaration has more than one of public, protected, and private

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-multiple-modifiers-6 { A compile-time
        error occurs if a constructor declaration has more
        than one of  public, protected, and private } {
    
    empty_class T883mm6 "private protected T883mm6() {}"

} {FAIL}
Test Case: 8.8.3-invalid-modifiers-1
A constructor cannot be abstract, static, final, native, strictfp, or synchronized

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-invalid-modifiers-1 { A constructor
        cannot be abstract, static, final, native, strictfp,
        or synchronized } {
    
    empty_class T883im1 "abstract T883im1() {}"

} {FAIL}
Test Case: 8.8.3-invalid-modifiers-2
A constructor cannot be abstract, static, final, native, strictfp, or synchronized

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-invalid-modifiers-2 { A constructor
        cannot be abstract, static, final, native, strictfp,
        or synchronized } {
    
    empty_class T883im2 "static T883im2() {}"

} {FAIL}
Test Case: 8.8.3-invalid-modifiers-3
A constructor cannot be abstract, static, final, native, strictfp, or synchronized

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-invalid-modifiers-3 { A constructor
        cannot be abstract, static, final, native, strictfp,
        or synchronized } {
    
    empty_class T883im3 "final T883im3() {}"

} {FAIL}
Test Case: 8.8.3-invalid-modifiers-4
A constructor cannot be abstract, static, final, native, strictfp, or synchronized

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-invalid-modifiers-4 { A constructor
        cannot be abstract, static, final, native, strictfp,
        or synchronized } {
    
    empty_class T883im4 "native T883im4() {}"

} {FAIL}
Test Case: 8.8.3-invalid-modifiers-5
A constructor cannot be abstract, static, final, native, strictfp, or synchronized

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-invalid-modifiers-5 { A constructor
        cannot be abstract, static, final, native, strictfp,
        or synchronized } {
    
    empty_class T883im5 "strictfp T883im5() {}"

} {FAIL}
Test Case: 8.8.3-invalid-modifiers-6
A constructor cannot be abstract, static, final, native, strictfp, or synchronized

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.3-invalid-modifiers-6 { A constructor
        cannot be abstract, static, final, native, strictfp,
        or synchronized } {
    
    empty_class T883im6 "synchronized T883im6() {}"

} {FAIL}

8.8.5

Directory : tests/jls/classes/constructor-declarations/constructor-body


Test Case: 8.8.5-return-statement-1
A return statement may be used in the body of a constructor if it does not include an expression

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5-return-statement-1 { A return statement may be
        used in the body of a constructor if it does not include
        an expression } {
    
    empty_class T885rs1 "T885rs1() { return; }"

} {PASS}
Test Case: 8.8.5-return-statement-2
A return statement may be used in the body of a constructor if it does not include an expression

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5-return-statement-2 { A return statement may be
        used in the body of a constructor if it does not include
        an expression } {
    
    empty_class T885rs2 "T885rs2() { return 1; }"

} {FAIL}
Test Case: 8.8.5-example-1
JLS example

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5-example-1 { JLS example } {
    
    saveas Point.java {
class Point {
           int x, y;
           Point(int x, int y) { this.x = x; this.y = y; }
   }
   class ColoredPoint extends Point {
           static final int WHITE = 0, BLACK = 1;
           int color;
           ColoredPoint(int x, int y) {
                   this(x, y, WHITE);
           }
           ColoredPoint(int x, int y, int color) {
                   super(x, y);
                   this.color = color;
           }
   }
}

    compile Point.java

} {PASS}

8.8.5.1

Directory : tests/jls/classes/constructor-declarations/constructor-body/explicit-constructor-invocations


Test Case: 8.8.5.1-before-block-statements-this-1
An ExplicitConstructorInvocation must appear before the optional BlockStatements

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-before-block-statements-this-1 { An
        ExplicitConstructorInvocation must appear
        before the optional BlockStatements } {
    
    empty_class T8851bbst1 {
	T8851bbst1() {}
	T8851bbst1(int i) { this(); {} }
     }

} {PASS}
Test Case: 8.8.5.1-before-block-statements-this-2
An ExplicitConstructorInvocation must appear before the optional BlockStatements

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-before-block-statements-this-2 { An
        ExplicitConstructorInvocation must appear
        before the optional BlockStatements } {
    
    empty_class T8851bbst2 {
	T8851bbst2() {}
	T8851bbst2(int i) { {} this(); }
     }

} {FAIL}
Test Case: 8.8.5.1-before-block-statements-this-3
An ExplicitConstructorInvocation must appear before the optional BlockStatements

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-before-block-statements-this-3 { An
        ExplicitConstructorInvocation must appear
        before the optional BlockStatements } {
    
    empty_class T8851bbst3 {
	T8851bbst3() {}
	T8851bbst3(int i) { ; this(); }
     }

} {FAIL}
Test Case: 8.8.5.1-before-block-statements-super-1
An ExplicitConstructorInvocation must appear before the optional BlockStatements

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-before-block-statements-super-1 { An
        ExplicitConstructorInvocation must appear
        before the optional BlockStatements } {
    
    empty_class T8851bbss1 {
	T8851bbss1(int i) { super(); {} }
     }

} {PASS}
Test Case: 8.8.5.1-before-block-statements-super-2
An ExplicitConstructorInvocation must appear before the optional BlockStatements

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-before-block-statements-super-2 { An
        ExplicitConstructorInvocation must appear
        before the optional BlockStatements } {
    
    empty_class T8851bbss2 {
	T8851bbss2(int i) { {} super(); }
     }

} {FAIL}
Test Case: 8.8.5.1-before-block-statements-super-3
An ExplicitConstructorInvocation must appear before the optional BlockStatements

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-before-block-statements-super-3 { An
        ExplicitConstructorInvocation must appear
        before the optional BlockStatements } {
    
    empty_class T8851bbss3 {
	T8851bbss3(int i) { ; super(); }
     }

} {FAIL}
Test Case: 8.8.5.1-multiple-this-invocations-1
It is a compile-time error for a constructor to invoke itself

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-multiple-this-invocations-1 { It is
        a compile-time error for a constructor to invoke itself } {
    
    empty_class T8851mti1 {
	T8851mti1() { this(); }
     }

} {FAIL}
Test Case: 8.8.5.1-multiple-this-invocations-2
It is a compile-time error for a constructor to indirectly invoke itself through a series of one or more explicit constructor invocations involving this

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-multiple-this-invocations-2 { It is
        a compile-time error for a constructor to indirectly
        invoke itself through a series of one or more
        explicit constructor invocations involving this } {
    
    empty_class T8851mti2 {
	T8851mti2() { this(0); }
	T8851mti2(int i) { this(); }
     }

} {FAIL}
Test Case: 8.8.5.1-multiple-this-invocations-3
It is a compile-time error for a constructor to indirectly invoke itself through a series of one or more explicit constructor invocations involving this

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-multiple-this-invocations-3 { It is
        a compile-time error for a constructor to indirectly
        invoke itself through a series of one or more
        explicit constructor invocations involving this } {
    
    empty_class T8851mti3 {
	T8851mti3() { this(0); }
	T8851mti3(int i) { this("noggy"); }
	T8851mti3(String s) { this(true); }
	T8851mti3(boolean state) { this(); }
     }

} {FAIL}
Test Case: 8.8.5.1-accessible-implicit-super-invocation-1
If a constructor body does not begin with an explicit constructor invocation, then the constructor body is implicitly assumed by the compiler to begin with a superclass constructor invocation

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-accessible-implicit-super-invocation-1 {
        If a constructor body does not begin with an explicit
        constructor invocation, then the constructor
        body is implicitly assumed by the compiler to
        begin with a superclass constructor invocation } {
    
    empty_class T8851aisi1 {
	T8851aisi1(int i) {}
     }

} {PASS}
Test Case: 8.8.5.1-accessible-implicit-super-invocation-2
An implicit constructor for an inner class can gain access to a private constructor in the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-accessible-implicit-super-invocation-2 {
        An implicit constructor for an inner class can gain
        access to a private constructor in the enclosing class } {
    
    empty_class T8851aisi2 { 
	private T8851aisi2() {}
	static class T8851aisi2_Inner extends T8851aisi2 {
	    T8851aisi2_Inner() {}
	}
    }

} {PASS}
Test Case: 8.8.5.1-accessible-implicit-super-invocation-3
An implicit constructor for an inner class can gain access to a private constructor in the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-accessible-implicit-super-invocation-3 {
        An implicit constructor for an inner class can gain
        access to a private constructor in the enclosing class } {
    
    empty_class T8851aisi3 { 
	private T8851aisi3() {}
	class T8851aisi3_Inner extends T8851aisi3 {
	    T8851aisi3_Inner() {}
	}
    }

} {PASS}
Test Case: 8.8.5.1-accessible-explicit-super-invocation-1
explicit superclass constructor invocation

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-accessible-explicit-super-invocation-1 {
        explicit superclass constructor invocation } {
    
    empty_class T8851aesi1 {
	T8851aesi1(int i) { super(); }
     }

} {PASS}
Test Case: 8.8.5.1-accessible-explicit-super-invocation-2
An explicit constructor for an inner class can gain access to a private constructor in the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-accessible-explicit-super-invocation-2 {
        An explicit constructor for an inner class can gain
        access to a private constructor in the enclosing class } {
    
    empty_class T8851aesi2 { 
	private T8851aesi2() {}
	static class T8851aesi2_Inner extends T8851aesi2 {
	    T8851aesi2_Inner() { super(); }
	}
    }

} {PASS}
Test Case: 8.8.5.1-accessible-explicit-super-invocation-3
An explicit constructor for an inner class can gain access to a private constructor in the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-accessible-explicit-super-invocation-3 {
        An explicit constructor for an inner class can gain
        access to a private constructor in the enclosing class } {
    
    empty_class T8851aesi3 { 
	private T8851aesi3() {}
	class T8851aesi3_Inner extends T8851aesi3 {
	    T8851aesi3_Inner() { super(); }
	}
    }

} {PASS}
Test Case: 8.8.5.1-accessible-explicit-super-invocation-args-1
explicit superclass constructor invocation

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-accessible-explicit-super-invocation-args-1 {
        explicit superclass constructor invocation } {
    
    compile [saveas T8851aesia1.java {
class T8851aesia1_super {
    T8851aesia1_super(int i) {}
}
class T8851aesia1 extends T8851aesia1_super {
    T8851aesia1() { super(1); }
}
    }]

} {PASS}
Test Case: 8.8.5.1-accessible-explicit-super-invocation-args-2
explicit superclass constructor invocation

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-accessible-explicit-super-invocation-args-2 {
        explicit superclass constructor invocation } {
    
    compile [saveas T8851aesia2.java {
class T8851aesia2_super {
    T8851aesia2_super(Object o) {}
}
class T8851aesia2 extends T8851aesia2_super {
    T8851aesia2() { super(null); }
}
    }]

} {PASS}
Test Case: 8.8.5.1-accessible-explicit-super-invocation-args-3
a private constructor in an enclosing class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-accessible-explicit-super-invocation-args-3 {
        a private constructor in an enclosing class is accessible } {
    
    compile [saveas T8851aesia3.java {
class T8851aesia3_super {
    private T8851aesia3_super(int i) {}
    static class T8851aesia3 extends T8851aesia3_super {
        T8851aesia3() { super(1); }
    }
}
    }]

} {PASS}
Test Case: 8.8.5.1-accessible-explicit-super-invocation-args-4
a private constructor in an enclosing class is accessible

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-accessible-explicit-super-invocation-args-4 {
        a private constructor in an enclosing class is accessible } {
    
    compile [saveas T8851aesia4.java {
class T8851aesia4_super {
    private T8851aesia4_super(Object o) {}
    static class T8851aesia4 extends T8851aesia4_super {
        T8851aesia4() { super(null); }
    }
}
    }]

} {PASS}
Test Case: 8.8.5.1-accessible-explicit-super-invocation-args-5
pass lots of types to multiple accessible constructors

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-accessible-explicit-super-invocation-args-5 {
        pass lots of types to multiple accessible constructors } {
    
    compile [saveas T8851aesia5.java {
class T8851aesia5_super {
    private T8851aesia5_super(Object o) {}
    private T8851aesia5_super(String s) {}
    private T8851aesia5_super(boolean state) {}
    private T8851aesia5_super(int i) {}
    private T8851aesia5_super(long l) {}
    private T8851aesia5_super(float f) {}
    private T8851aesia5_super(double d) {}
    private T8851aesia5_super(String s, char c) {}
    private T8851aesia5_super(double d, short s) {}
    private T8851aesia5_super(byte b, float f) {}
    static class T8851aesia5_o extends T8851aesia5_super {
        T8851aesia5_o() { super( new Object() ); }
    }
    static class T8851aesia5_s extends T8851aesia5_super {
        T8851aesia5_s() { super("hello"); }
    }
    class T8851aesia5_b extends T8851aesia5_super {
        T8851aesia5_b() { super(true); }
    }
    class T8851aesia5_i extends T8851aesia5_super {
        T8851aesia5_i() { super(1); }
    }
    class T8851aesia5_f extends T8851aesia5_super {
        T8851aesia5_f() { super(0.0F); }
    }
    class T8851aesia5_d extends T8851aesia5_super {
        T8851aesia5_d() { super(0.0D); }
    }
    Object l_obj = new T8851aesia5_super(0L) {
        void foo() {}
    };
    Object sb_obj = new T8851aesia5_super("hello", 'b') {
        void foo() {}
    };
    Object bf_obj = new T8851aesia5_super((byte) 2, 1.0F) {
        void foo() {}
    };
}
    }]

} {PASS}
Test Case: 8.8.5.1-inaccessible-implicit-super-invocation-1
A private constructor is not accessible in a subclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-inaccessible-implicit-super-invocation-1 {
        A private constructor is not accessible in a subclass } {
    
    compile [saveas T8851iisi1.java {
class T8851iisi1_super {
    private T8851iisi1_super() {}
}
class T8851iisi1 extends T8851iisi1_super {
    T8851iisi1() {}
}
    }]

} {FAIL}
Test Case: 8.8.5.1-inaccessible-explicit-super-invocation-1
A private constructor is not accessible in a subclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-inaccessible-explicit-super-invocation-1 {
        A private constructor is not accessible in a subclass } {
    
    compile [saveas T8851iesi1.java {
class T8851iesi1_super {
    private T8851iesi1_super() {}
}
class T8851iesi1 extends T8851iesi1_super {
    T8851iesi1() { super(); }
}
    }]

} {FAIL}
Test Case: 8.8.5.1-inaccessible-explicit-super-invocation-args-1
A private constructor is not accessible in a subclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-inaccessible-explicit-super-invocation-args-1 {
        A private constructor is not accessible in a subclass } {
    
    compile [saveas T8851iesia1.java {
class T8851iesia1_super {
    private T8851iesia1_super(int i) {}
}
class T8851iesia1 extends T8851iesia1_super {
    T8851iesia1() { super(1); }
}
    }]

} {FAIL}
Test Case: 8.8.5.1-inaccessible-explicit-super-invocation-args-2
A private constructor is not accessible in a subclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-inaccessible-explicit-super-invocation-args-2 {
        A private constructor is not accessible in a subclass } {
    
    compile [saveas T8851iesia2.java {
class T8851iesia2_super {
    private T8851iesia2_super(Object o) {}
}
class T8851iesia2 extends T8851iesia2_super {
    T8851iesia2() { super(null); }
}
    }]

} {FAIL}
Test Case: 8.8.5.1-example-1
Example of qualified superconstructor

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-example-1 { Example of qualified superconstructor } {
    
    empty_class T8851e1 {
	static class Outer {
	    class Inner {}
	}
	static class ChildOfInner extends Outer.Inner {
	    ChildOfInner() {
		(new Outer()).super();
	    }
	}
    }

} {PASS}
Test Case: 8.8.5.1-example-2
Example of error accessing instance field

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-example-2 { Example of error accessing instance field } {
    
    empty_class T8851e2 {
	static class Point {
	    int x, y;
	    Point(int x, int y) {
		this.x = x;
		this.y = y;
	    }
	}
	static class ColoredPoint extends Point {
	    int color;
	    ColoredPoint(int x, int y) {
		this(x, y, color);
	    }
	}
    }

} {FAIL}
Test Case: 8.8.5.1-example-3
Example of error accessing instance field when anonymous class is in explicit constructor invocation

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-example-3 { Example of error accessing instance field
        when anonymous class is in explicit constructor invocation } {
    
    empty_class T8851e3 {
	static class Top {
	    int x;
	    class Dummy {
		Dummy(Object o) {}
	    }
	    class Inside extends Dummy {
		Inside() {
		    super(new Object() { int r = x; }); // error
		}
	    }
	}
    }

} {FAIL}
Test Case: 8.8.5.1-example-4
Example of legal access of parameter when anonymous class is in explicit constructor invocation

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-example-4 { Example of legal access of parameter
        when anonymous class is in explicit constructor invocation } {
    
    empty_class T8851e4 {
	static class Top {
	    int x;
	    class Dummy {
		Dummy(Object o) {}
	    }
	    class Inside extends Dummy {
		Inside(final int y) {
		    super(new Object() { int r = y; }); // correct
		}
	    }
	}
    }

} {PASS}
Test Case: 8.8.5.1-ambiguous-super-1
The constructor to call must not be ambiguous

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-ambiguous-super-1 { The constructor to call must not be
        ambiguous } {
    
    compile [saveas T8851as1a.java {
class T8851as1a {
    T8851as1a(String s) {}
    T8851as1a(Integer i) {}
}
class T8851as1b extends T8851as1a {
    T8851as1b() {
	super(null); // ambiguous
    }
}
    }]

} {FAIL}
Test Case: 8.8.5.1-ambiguous-super-2
The constructor to call must not be ambiguous

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-ambiguous-super-2 { The constructor to call must not be
        ambiguous } {
    
    compile [saveas T8851as2a.java {
class T8851as2a {
    T8851as2a(String s) {}
    private T8851as2a(Integer i) {}
}
class T8851as2b extends T8851as2a {
    T8851as2b() {
	super(null); // calls T8851as2a(String)
    }
}
    }]

} {PASS}
Test Case: 8.8.5.1-ambiguous-super-3
The constructor to call must not be ambiguous

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-ambiguous-super-3 { The constructor to call must not be
        ambiguous } {
    
    compile [saveas p1/T8851as3a.java {
package p1;
public class T8851as3a {
    public T8851as3a(String s) {}
    protected T8851as3a(Integer i) {}
}
    }] [saveas T8851as3b.java {
class T8851as3b extends p1.T8851as3a {
    T8851as3b() {
	super(null); // ambiguous
    }
}
    }]

} {FAIL}
Test Case: 8.8.5.1-ambiguous-super-4
The constructor to call must not be ambiguous

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-ambiguous-super-4 { The constructor to call must not be
        ambiguous } {
    
    empty_class T8851as4 {
	A a = new A();
	static class A {
	    private A() {}
	    // compiler creates A(T8851as4$1 dummy) { this(); }
	    A(String s) {}
	}
	static class B extends A {
	    B() {
		// no ambiguity between real A(String), synthetic A(dummy)
		super(null);
	    }
	}
    }

} {PASS}
Test Case: 8.8.5.1-ambiguous-super-5
The constructor to call must not be ambiguous

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-ambiguous-super-5 { The constructor to call must not be
        ambiguous } {
    
    compile [saveas T8851as5a.java {
class T8851as5a {
    A a = new A();
    static class A {
	private A() {}
	// compiler creates A(T8851as5a$1 dummy) { this(); }
	A(String s) {}
    }
}
    }]
    delete T8851as5a.java
    compile -classpath . [saveas T8851as5b.java {
class T8851as5b extends T8851as5a.A {
    T8851as5b() {
	// no ambiguity between real A(String), synthetic A(dummy)
	super(null);
    }
}
    }]

} {PASS}
Test Case: 8.8.5.1-alternate-constructor-invocation-1
An alternate constructor invocation invokes a constructor of the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-alternate-constructor-invocation-1 {
        An alternate constructor invocation invokes a
        constructor of the same class } {
    
    empty_class T8851aci1 {
	T8851aci1() { this(0); }
	T8851aci1(int i) {}
     }

} {PASS}
Test Case: 8.8.5.1-alternate-constructor-invocation-2
An alternate constructor invocation can invoke a chain of constructors in the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-alternate-constructor-invocation-2 {
        An alternate constructor invocation can invoke
        a chain of constructors in the same class } {
    
    empty_class T8851aci2 {
	T8851aci2() { this(0); }
	T8851aci2(int i) { this("noggy"); }
	T8851aci2(String s) { this(true); }
	T8851aci2(boolean state) { }
     }

} {PASS}
Test Case: 8.8.5.1-alternate-constructor-invocation-3
An alternate constructor must exist

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-alternate-constructor-invocation-3 {
        An alternate constructor must exist } {
    
    empty_class T8851aci3 {
	T8851aci3(int i) { this(); }
     }

} {FAIL}
Test Case: 8.8.5.1-ambiguous-this-1
The constructor to call must not be ambiguous

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-ambiguous-this-1 { The constructor to call must not be
        ambiguous } {
    
    empty_class T8851at1 {
	T8851at1(String s) {}
	T8851at1(Integer i) {
	    this(null); // ambiguous, even though T8851at1(Integer) is invalid
	}
    }

} {FAIL}
Test Case: 8.8.5.1-ambiguous-this-2
The constructor to call must not be ambiguous

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-ambiguous-this-2 { The constructor to call must not be
        ambiguous } {
    
    empty_class T8851at2 {
	T8851at2(String s) {}
	T8851at2(Integer i) {}
	T8851at2() {
	    this(null); // ambiguous
	}
    }

} {FAIL}
Test Case: 8.8.5.1-ambiguous-this-3
The constructor to call must not be ambiguous

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-ambiguous-this-3 { The constructor to call must not be
        ambiguous } {
    
    empty_class T8851at3 {
	A a = new A();
	static class A {
	    private A() {}
	    // compiler creates A(T8851at3$1 dummy) { this(); }
	    A(String s) {}
	    A(int i) {
		// no ambiguity between real A(String), synthetic A(dummy)
		this(null);
	    }
	}
    }

} {PASS}
Test Case: 8.8.5.1-qualified-1
Qualified explicit invocation allows one to specify the enclosing instance of the superclass

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-qualified-1 { Qualified explicit invocation allows one
        to specify the enclosing instance of the superclass } {
    
    compile [saveas T8851q1.java {
class T8851q1 {
    class Inner {}
}
class Sub1 extends T8851q1.Inner {
    Sub1() {
        new T8851q1().super();
    }
}
    }]

} {PASS}
Test Case: 8.8.5.1-qualified-2
Qualified explicit invocation allows one to specify the enclosing instance of the superclass

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-qualified-2 { Qualified explicit invocation allows one
        to specify the enclosing instance of the superclass } {
    
    compile [saveas T8851q2.java {
class T8851q2 {
    class Inner {}
}
class Sub2 extends T8851q2.Inner {
    Sub2() {
        new T8851q2(){}.super();
    }
}
    }]

} {PASS}
Test Case: 8.8.5.1-qualified-3
Qualified explicit invocation allows one to specify the enclosing instance of the superclass

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-qualified-3 { Qualified explicit invocation allows one
        to specify the enclosing instance of the superclass } {
    
    compile [saveas T8851q3.java {
class T8851q3 {
    class Inner {}
}
class Sub3 extends T8851q3.Inner {
    Sub3() {
        // this will not execute, but must compile
        ((T8851q3) null).super();
    }
}
    }]

} {PASS}
Test Case: 8.8.5.1-qualified-4
Qualified explicit invocation allows one to specify the enclosing instance of the superclass

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-qualified-4 { Qualified explicit invocation allows one
        to specify the enclosing instance of the superclass } {
    
    compile [saveas T8851q4.java {
class T8851q4 {
    class Inner {}
}
class Sub4 extends T8851q4.Inner {
    Sub4(T8851q4 t) {
        // using a parameter is legal
        t.super();
    }
}
    }]

} {PASS}
Test Case: 8.8.5.1-qualified-5
Qualified explicit invocation allows one to specify the enclosing instance of the superclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-qualified-5 { Qualified explicit invocation allows one
        to specify the enclosing instance of the superclass } {
    
    compile [saveas T8851q5.java {
class T8851q5 {
    class Inner {}
}
class Sub5 extends T8851q5.Inner {
    T8851q5 t;
    Sub5() {
        // using a member declared in this class is illegal
        t.super();
    }
}
    }]

} {FAIL}
Test Case: 8.8.5.1-qualified-6
Qualified explicit invocation allows one to specify the enclosing instance of the superclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-qualified-6 { Qualified explicit invocation allows one
        to specify the enclosing instance of the superclass } {
    
    compile [saveas T8851q6.java {
class T8851q6 {
    class Inner {
        T8851q6 t;
    }
}
class Sub6 extends T8851q6.Inner {
    Sub6() {
        // using an inherited member is not legal
        t.super();
    }
}
    }]

} {FAIL}
Test Case: 8.8.5.1-qualified-7
There is no qualified this() explicit constructor invocation

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-qualified-7 { There is no qualified this() explicit
        constructor invocation } {
    
    empty_class T8851q7 {
        class Inner {
            Inner() {}
            Inner(int i) {
                new T8851q7().this();
            }
        }
    }

} {FAIL}
Test Case: 8.8.5.1-qualified-8
Qualified explicit constructors must have a superclass that is an inner class

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-qualified-8 { Qualified explicit constructors must
        have a superclass that is an inner class } {
    
    empty_class T8851q8 {
        T8851q8() {
            new Object().super();
        }
    }

} {FAIL}
Test Case: 8.8.5.1-qualified-9
Qualified explicit constructors must have a superclass that is an inner class

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-qualified-9 { Qualified explicit constructors must
        have a superclass that is an inner class } {
    
    compile [saveas T8851q9.java {
class T8851q9 {
    static class Inner {}
}
class Sub9 extends T8851q9.Inner {
    Sub9() {
        new T8851q9().super();
    }
}
    }]

} {FAIL}
Test Case: 8.8.5.1-qualified-10
Qualified explicit constructors are allowed even when the enclosing class of the superclass can be determined already

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-qualified-10 { Qualified explicit constructors are
        allowed even when the enclosing class of the superclass can be
        determined already } {
    
    empty_class T8851q10 {
        class One {}
        class Two extends One {
            Two() {
                new T8851q10().super();
            }
            Two(int i) {}
        }
    }

} {PASS}
Test Case: 8.8.5.1-qualified-11
Explicit constructors may reference qualified this or super which names an enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-qualified-11 { Explicit constructors may reference
        qualified this or super which names an enclosing class } {
    
    empty_class T8851q11 {
        class A {}
        class B extends A {
            B() {
                T8851q11.this.super();
            }
        }
    }

} {PASS}
Test Case: 8.8.5.1-qualified-12
Explicit constructors may reference qualified this or super which names an enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-qualified-12 { Explicit constructors may reference
        qualified this or super which names an enclosing class } {
    
    empty_class T8851q12 {
        class Super {
            Middle m;
        }
        class Middle extends Super {
            class A {}
            class B extends A {
                B() {
                    Middle.super.m.super();
                }
            }
        }
    }

} {PASS}
Test Case: 8.8.5.1-qualified-13
Explicit constructors may reference qualified this or super which names an enclosing class

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-qualified-13 { Explicit constructors may reference
        qualified this or super which names an enclosing class } {
    
    empty_class T8851q13 {
        T8851q13(Object o) {}
        class Middle extends T8851q13 {
            Middle(int i) {
                super(null);
            }
            Middle() {
                // Here, the innermost instance of T8851q13 to enclose
		// new Middle is this
                super(new Middle(1).new Inner() {});
            }
            class Inner {}
        }
    }

} {FAIL}
Test Case: 8.8.5.1-qualified-14
Explicit constructors may reference qualified this or super which names an enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-qualified-14 { Explicit constructors may reference
        qualified this or super which names an enclosing class } {
    
    empty_class T8851q14 {
        T8851q14(Object o) {}
        class Middle extends T8851q14 {
            Middle(int i) {
                super(null);
            }
            Middle() {
                // Here, new Middle is a member of Middle
                super(T8851q14.this.new Middle(1).new Inner() {});
            }
            class Inner {}
        }
    }

} {PASS}
Test Case: 8.8.5.1-qualified-15
Explicit constructors may reference qualified this or super which names an enclosing class

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.5.1-qualified-15 { Explicit constructors may reference
        qualified this or super which names an enclosing class } {
    
    empty_class T8851q15 {
        T8851q15(Object o) {}
        private class Middle extends T8851q15 {
            Middle(int i) {
                super(null);
            }
            Middle() {
                // Here, the innermost instance of T8851q15 to enclose
		// new Middle is this
                super(new Middle(1).new Inner() {});
            }
            class Inner {}
        }
    }

} {FAIL}
Test Case: 8.8.5.1-qualified-16
Explicit constructors may reference qualified this or super which names an enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-qualified-16 { Explicit constructors may reference
        qualified this or super which names an enclosing class } {
    
    empty_class T8851q16 {
        T8851q16(Object o) {}
        private class Middle extends T8851q16 {
            Middle(int i) {
                super(null);
            }
            Middle() {
                // Here, new Middle is a member of T8851q16, since it was
		// private and not inherited as a member of Middle
                super(T8851q16.this.new Middle(1).new Inner() {});
            }
            class Inner {}
        }
    }

} {PASS}
Test Case: 8.8.5.1-qualified-17
Explicit constructors may reference qualified this or super which names an enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-qualified-17 { Explicit constructors may reference
        qualified this or super which names an enclosing class } {
    
    compile [saveas T8851q17.java {
class T8851q17 {
    T8851q17(Object o) {}
}
class T8851q17a {
    class Middle extends T8851q17 {
	Middle(int i) {
	    super(null);
	}
	Middle() {
	    // Here, the innermost instance of T8851q17a to enclose
	    // new Middle is T8851q17a.this
	    super(new Middle(1).new Inner() {});
	}
	class Inner {}
    }
}
    }]

} {PASS}
Test Case: 8.8.5.1-qualified-18
Explicit constructors may reference qualified this or super which names an enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.5.1-qualified-18 { Explicit constructors may reference
        qualified this or super which names an enclosing class } {
    
    compile [saveas T8851q18.java {
class T8851q18 {
    T8851q18(Object o) {}
}
class T8851q18a {
    class Middle extends T8851q18 {
	Middle(int i) {
	    super(null);
	}
	Middle() {
	    // Here, the innermost instance of T8851q18a to enclose
	    // new Middle is T8851q18a.this
	    super(T8851q18a.this.new Middle(1).new Inner() {});
	}
	class Inner {}
    }
}
    }]

} {PASS}

8.8.6

Directory : tests/jls/classes/constructor-declarations/constructor-overloading


Test Case: 8.8.6-overloaded-1
An overloaded constructor is resolved at compiler time as described in 15.9.3

Expected Result: PASS

Regression Test:

tcltest::test 8.8.6-overloaded-1 { An overloaded constructor
        is resolved at compiler time as described in 15.9.3 } {
    
    empty_class T886o1 {
T886o1(Object o) {}
T886o1(String s) {}
void foo() {
    Object obj = new T886o1("");
}
    }

} {PASS}

8.8.7

Directory : tests/jls/classes/constructor-declarations/default-constructor


Test Case: 8.8.7-default-1
If a class contains no constructor declarations, then a default constructor that takes no parameters is automatically provided

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-default-1 { If a class
        contains no constructor declarations,
        then a default constructor that takes
        no parameters is automatically provided } {
    
    empty_class T887d1 {
Object o = new T887d1();
    }

} {PASS}
Test Case: 8.8.7-default-2
If a class contains no constructor declarations, then a default constructor that takes no parameters is automatically provided

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-default-2 { If a class
        contains no constructor declarations,
        then a default constructor that takes
        no parameters is automatically provided } {
    
    saveas T887d2.java {
class T887d2_super {}
class T887d2_subclass extends T887d2_super {}
class T887d2 {
    Object o = new T887d2_subclass();
}
    }

    compile T887d2.java

} {PASS}
Test Case: 8.8.7-throws-1
A default constructor has no throws clause

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.7-throws-1 { A default
        constructor has no throws clause } {
    
    saveas T887t1.java {
class T887t1_super {
    T887t1_super() throws Exception {
        throw new Exception();
    }
}
class T887t1_subclass extends T887t1_super {}
    }

    compile T887t1.java

} {FAIL}
Test Case: 8.8.7-inaccessible-default-constructor-toplevel-1
A private constructor is not accessible in a subclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.7-inaccessible-default-constructor-toplevel-1 {
        A private constructor is not accessible in a subclass } {
    
    saveas T887idct1.java {
class T887idct1_super {
    private T887idct1_super() {}
}

class T887idct1_subclass extends T887idct1_super {}
    }

    compile T887idct1.java

} {FAIL}
Test Case: 8.8.7-inaccessible-default-constructor-toplevel-2
A constructor with default accessibility in some other package is not accessible in a subclass

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.7-inaccessible-default-constructor-toplevel-2 {
        A constructor with default accessibility in some other
        package is not accessible in a subclass } {
    

    saveas T887idct2_super.java {
package T887idct2_pkg;
public class T887idct2_super {
    T887idct2_super() {}
}
    }

    saveas T887idct2.java {
import T887idct2_pkg.T887idct2_super;
class T887idct2_subclass extends T887idct2_super {}
    }

    compile T887idct2_super.java T887idct2.java

} {FAIL}
Test Case: 8.8.7-accessible-default-constructor-inner-1
A constructor with private accessibility can be accessed from a nested class defined in the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-1 {
        A constructor with private accessibility can be accessed
        from a nested class defined in the same class } {
    
    empty_class T887adci1 {
        private T887adci1() {}
        static class T887adci1_nested extends T887adci1 {}
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-2
A constructor with private accessibility can be accessed from an inner class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-2 {
        A constructor with private accessibility can be accessed
        from an inner class defined inside the same class } {
    
    empty_class T887adci2 {
        private T887adci2() {}
        class T887adci2_inner extends T887adci2 {}
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-3
A constructor with private accessibility can be accessed from an inner anonymous class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-3 {
        A constructor with private accessibility can be accessed
        from an inner anonymous class defined inside the same class } {
    
    empty_class T887adci3 {
        private T887adci3() {}
        Object o = new T887adci3() {};
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-4
A constructor with private accessibility can be accessed from a static anonymous class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-4 {
        A constructor with private accessibility can be accessed
        from a static anonymous class defined inside the same class } {
    
    empty_class T887adci4 {
        private T887adci4() {}
        static Object o = new T887adci4() {};
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-5
A constructor with private accessibility can be accessed from an inner local class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-5 {
        A constructor with private accessibility can be accessed
        from an inner local class defined inside the same class } {
    
    empty_class T887adci5 {
        private T887adci5() {}
        {
            class T887adci5_inner_local extends T887adci5 {}
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-6
A constructor with private accessibility can be accessed from a static local class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-6 {
        A constructor with private accessibility can be accessed
        from a static local class defined inside the same class } {
    
    empty_class T887adci6 {
        private T887adci6() {}
        static {
            class T887adci6_static_local extends T887adci6 {}
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-7
A constructor with private accessibility can be accessed from a nested class defined in the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-7 {
        A constructor with private accessibility can be accessed
        from a nested class defined in the same class } {
    
    empty_class T887adci7 {
        static class A {
            private A() {}
        }
        static class B extends A {}
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-8
A constructor with private accessibility can be accessed from an inner class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-8 {
        A constructor with private accessibility can be accessed
        from an inner class defined inside the same class } {
    
    empty_class T887adci8 {
        static class A {
            private A() {}
        }
        class B extends A {}
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-9
A constructor with private accessibility can be accessed from an inner anonymous class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-9 {
        A constructor with private accessibility can be accessed
        from an inner anonymous class defined inside the same class } {
    
    empty_class T887adci9 {
        static class A {
            private A() {}
        }
        Object o = new A() {};
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-10
A constructor with private accessibility can be accessed from a static anonymous class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-10 {
        A constructor with private accessibility can be accessed
        from a static anonymous class defined inside the same class } {
    
    empty_class T887adci10 {
        static class A {
            private A() {}
        }
        static Object o = new A() {};
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-11
A constructor with private accessibility can be accessed from an inner local class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-11 {
        A constructor with private accessibility can be accessed
        from an inner local class defined inside the same class } {
    
    empty_class T887adci11 {
        static class A {
            private A() {}
        }
        {
            class B extends A {}
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-12
A constructor with private accessibility can be accessed from a static local class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-12 {
        A constructor with private accessibility can be accessed
        from a static local class defined inside the same class } {
    
    empty_class T887adci12 {
        static class A {
            private A() {}
        }
        static {
            class B extends A {}
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-13
A constructor with private accessibility can be accessed from a nested class defined in the same class. However, there is no enclosing class with respect to the superclass.

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-13 {
        A constructor with private accessibility can be accessed
        from a nested class defined in the same class. However,
        there is no enclosing class with respect to the superclass. } {
    
    empty_class T887adci13 {
        class A {
            private A() {}
        }
        static class B extends A {}
    }

} {FAIL}
Test Case: 8.8.7-accessible-default-constructor-inner-14
A constructor with private accessibility can be accessed from an inner class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-14 {
        A constructor with private accessibility can be accessed
        from an inner class defined inside the same class } {
    
    empty_class T887adci14 {
        class A {
            private A() {}
        }
        class B extends A {}
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-15
A constructor with private accessibility can be accessed from an inner anonymous class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-15 {
        A constructor with private accessibility can be accessed
        from an inner anonymous class defined inside the same class } {
    
    empty_class T887adci15 {
        class A {
            private A() {}
        }
        Object o = new A() {};
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-16
A constructor with private accessibility can be accessed from a static anonymous class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-16 {
        A constructor with private accessibility can be accessed
        from a static anonymous class defined inside the same class } {
    
    empty_class T887adci16 {
        class A {
            private A() {}
        }
        static Object o = new T887adci16().new A() {};
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-17
A constructor with private accessibility can be accessed from an inner local class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-17 {
        A constructor with private accessibility can be accessed
        from an inner local class defined inside the same class } {
    
    empty_class T887adci17 {
        class A {
            private A() {}
        }
        {
            class B extends A {}
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-18
A constructor with private accessibility can be accessed from a static local class defined inside the same class. However, there is no enclosing class with respect to the superclass.

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-18 {
        A constructor with private accessibility can be accessed
        from a static local class defined inside the same class. However,
        there is no enclosing class with respect to the superclass. } {
    
    empty_class T887adci18 {
        class A {
            private A() {}
        }
        static {
            class B extends A {}
        }
    }

} {FAIL}
Test Case: 8.8.7-accessible-default-constructor-inner-19
A constructor with private accessibility can be accessed from an inner class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-19 {
        A constructor with private accessibility can be accessed
        from an inner class defined inside the same class } {
    
    empty_class T887adci19 {
        static {
            class A {
                private A() {}
                class B extends A {}
            }
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-20
A constructor with private accessibility can be accessed from an inner anonymous class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-20 {
        A constructor with private accessibility can be accessed
        from an inner anonymous class defined inside the same class } {
    
    empty_class T887adci20 {
        static {
            class A {
                private A() {}
                Object o = new A() {};
            }
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-21
A constructor with private accessibility can be accessed from a static anonymous class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-21 {
        A constructor with private accessibility can be accessed
        from a static anonymous class defined inside the same class } {
    
    empty_class T887adci21 {
        static {
            class A {
                private A() {}
            }
            new A() {};
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-22
A constructor with private accessibility can be accessed from an inner local class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-22 {
        A constructor with private accessibility can be accessed
        from an inner local class defined inside the same class } {
    
    empty_class T887adci22 {
        static {
            class A {
                private A() {}
                {
                    class B extends A {}
                }
            }
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-23
A constructor with private accessibility can be accessed from a static local class defined inside the same class.

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-23 {
        A constructor with private accessibility can be accessed
        from a static local class defined inside the same class. } {
    
    empty_class T887adci23 {
        static {
            class A {
                private A() {}
            }
            class B extends A {}
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-24
A constructor with private accessibility can be accessed from an inner class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-24 {
        A constructor with private accessibility can be accessed
        from an inner class defined inside the same class } {
    
    empty_class T887adci24 {
        {
            class A {
                private A() {}
                class B extends A {}
            }
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-25
A constructor with private accessibility can be accessed from an inner anonymous class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-25 {
        A constructor with private accessibility can be accessed
        from an inner anonymous class defined inside the same class } {
    
    empty_class T887adci25 {
        {
            class A {
                private A() {}
            }
            new A() {};
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-26
A constructor with private accessibility can be accessed from a static anonymous class defined inside the same class. However, there is no enclosing class for the superclass.

Expected Result: FAIL

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-26 {
        A constructor with private accessibility can be accessed
        from a static anonymous class defined inside the same class.
        However, there is no enclosing class for the superclass.} {
    
    empty_class T887adci26 {
        T887adci26(Object o) {}
        {
            class A {
                private A() {}
            }
            class B extends T887adci26 {
                B() {
                    super(new A() {});
                }
            }
        }
    }

} {FAIL}
Test Case: 8.8.7-accessible-default-constructor-inner-27
A constructor with private accessibility can be accessed from an inner local class defined inside the same class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-27 {
        A constructor with private accessibility can be accessed
        from an inner local class defined inside the same class } {
    
    empty_class T887adci27 {
        {
            class A {
                private A() {}
            }
            class B extends A {}
        }
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-28
A constructor with private accessibility can be accessed from an inner class of an anonymous class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-28 {
        A constructor with private accessibility can be accessed
        from an inner class of an anonymous class } {
    
    empty_class T887adci28 {
        Object o = new Object() {
            class Inner {
                private Inner() {}
            }
        }.new Inner();
    }

} {PASS}
Test Case: 8.8.7-accessible-default-constructor-inner-29
A constructor with private accessibility can be accessed from an inner class of an anonymous class

Expected Result: PASS

Regression Test:

tcltest::test 8.8.7-accessible-default-constructor-inner-29 {
        A constructor with private accessibility can be accessed
        from an inner class of an anonymous class } {
    
    empty_class T887adci29 {
        Object o = new Object() {
            class Inner {
                private Inner() {}
            }
        }.new Inner(){};
    }

} {PASS}

9.1

Directory : tests/jls/interfaces/interface-declarations


Test Case: 9.1-enclosing-1
An interface may not have the same simple name as an enclosing type

Expected Result: FAIL

Regression Test:

tcltest::test 9.1-enclosing-1 { An interface may not have the same simple name
        as an enclosing type } {
    
    empty_class T91e1 {
	interface T91e1 {}
    }

} {FAIL}
Test Case: 9.1-enclosing-2
An interface may not have the same simple name as an enclosing type

Expected Result: FAIL

Regression Test:

tcltest::test 9.1-enclosing-2 { An interface may not have the same simple name
        as an enclosing type } {
    
    empty_class T91e2 {
	static class Foo {
	    interface T91e2 {}
	}
    }

} {FAIL}
Test Case: 9.1-enclosing-3
An interface may not have the same simple name as an enclosing type

Expected Result: FAIL

Regression Test:

tcltest::test 9.1-enclosing-3 { An interface may not have the same simple name
        as an enclosing type } {
    
    compile [saveas T91e3.java {
interface T91e3 {
    interface T91e3 {}
}
    }]

} {FAIL}
Test Case: 9.1-enclosing-4
An interface may not have the same simple name as an enclosing type

Expected Result: PASS

Regression Test:

tcltest::test 9.1-enclosing-4 { An interface may not have the same simple name
        as an enclosing type } {
    
    compile [saveas T91e4.java {
interface T91e4 {
    Object o = new T91e4() {}; // anonymous classes have no simple name
}
    }]

} {PASS}

9.1.1

Directory : tests/jls/interfaces/interface-declarations/interface-modifiers


Test Case: 9.1.1-1
should generate error on synchronized interface

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-1 {should generate error on synchronized interface} {
    
    compile [saveas SynchronizedInterface.java  "synchronized interface SynchronizedInterface {}"]

} {FAIL}
Test Case: 9.1.1-2
adding the synchronized keyword to an interface declared as public triggers a bug in the javac shipped with jdk 1.1

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-2 {adding the synchronized keyword to an interface declared
        as public triggers a bug in the javac shipped with jdk 1.1} {
    
    compile [saveas PublicSynchronizedInterface.java  "public synchronized interface PublicSynchronizedInterface {}"]

} {FAIL}
Test Case: 9.1.1-3
an interface may be public

Expected Result: PASS

Regression Test:

tcltest::test 9.1.1-3 {an interface may be public} {
    
    compile [saveas PublicInterface.java  "public interface PublicInterface {}"]

} {PASS}
Test Case: 9.1.1-4
should generate an error if a modifier is given more than once

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-4 {should generate an error if a modifier is given more than once} {
    
    compile [saveas PublicPublicInterface.java  "public public interface PublicPublicInterface {}"]

} {FAIL}
Test Case: 9.1.1-5
The access modifier protected pertains only to member interfaces

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-5 {The access modifier protected pertains only to member interfaces} {
    
    compile [saveas ProtectedInterface.java  "protected interface ProtectedInterface {}"]

} {FAIL}
Test Case: 9.1.1-6
The access modifier private pertains only to member interfaces

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-6 {The access modifier private pertains only to member interfaces} {
    
    compile [saveas PrivateInterface.java  "private interface PrivateInterface {}"]

} {FAIL}
Test Case: 9.1.1-7
The access modifier static pertains only to member interfaces

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-7 {The access modifier static pertains only to member interfaces} {
    
    compile [saveas StaticInterface.java  "static interface StaticInterface {}"]

} {FAIL}
Test Case: 9.1.1-8
An interface may be strictfp

Expected Result: PASS

Regression Test:

tcltest::test 9.1.1-8 { An interface may be strictfp } {
    
    compile [saveas T9118.java "strictfp interface T9118 {}"]

} {PASS}
Test Case: 9.1.1-9
Error declaring strictfp more than once

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-9 { Error declaring strictfp more than once } {
    
    compile [saveas T9119.java "strictfp strictfp interface T9119 {}"]

} {FAIL}
Test Case: 9.1.1-10
An interface may be redundantly declared abstract

Expected Result: OK

Regression Test:

tcltest::test 9.1.1-10 { An interface may be redundantly declared abstract } {
    
    ok_pass_or_warn [compile [saveas T91110.java  "abstract interface T91110 {}"]]

} {OK}
Test Case: 9.1.1-11
Error declaring abstract more than once

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-11 { Error declaring abstract more than once } {
    
    compile [saveas T91111.java "abstract abstract interface T91111 {}"]

} {FAIL}
Test Case: 9.1.1-12
Error declaring final

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-12 { Error declaring final } {
    
    compile [saveas T91112.java "final interface T91112 {}"]

} {FAIL}
Test Case: 9.1.1-13
Error declaring native

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-13 { Error declaring native } {
    
    compile [saveas T91113.java "native interface T91113 {}"]

} {FAIL}
Test Case: 9.1.1-14
Error declaring transient

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-14 { Error declaring transient } {
    
    compile [saveas T91114.java "transient interface T91114 {}"]

} {FAIL}
Test Case: 9.1.1-15
Error declaring volatile

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-15 { Error declaring volatile } {
    
    compile [saveas T91115.java "volatile interface T91115 {}"]

} {FAIL}
Test Case: 9.1.1-16
longest legal combination

Expected Result: OK

Regression Test:

tcltest::test 9.1.1-16 { longest legal combination } {
    
    ok_pass_or_warn [compile [saveas T91116.java {
public abstract strictfp interface T91116 {}
}]]

} {OK}
Test Case: 9.1.1-17
stress test

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-17 { stress test } {
    
    compile [saveas T91117.java {
public abstract strictfp protected private static final transient synchronized
volatile native public abstract strictfp interface T91117 {}
}]

} {FAIL}
Test Case: 9.1.1-in-class-1
may be public

Expected Result: PASS

Regression Test:

tcltest::test 9.1.1-in-class-1 { may be public } {
    
    empty_class T911ic1 "public interface I {}"

} {PASS}
Test Case: 9.1.1-in-class-2
may be protected

Expected Result: PASS

Regression Test:

tcltest::test 9.1.1-in-class-2 { may be protected } {
    
    empty_class T911ic2 "protected interface I {}"

} {PASS}
Test Case: 9.1.1-in-class-3
may be private

Expected Result: PASS

Regression Test:

tcltest::test 9.1.1-in-class-3 { may be private } {
    
    empty_class T911ic3 "private interface I {}"

} {PASS}
Test Case: 9.1.1-in-class-4
may not have multiple access modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-4 { may not have multiple access modifiers } {
    
    empty_class T911ic4 "public public interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-5
may not have multiple access modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-5 { may not have multiple access modifiers } {
    
    empty_class T911ic5 "public protected interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-6
may not have multiple access modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-6 { may not have multiple access modifiers } {
    
    empty_class T911ic6 "public private interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-7
may not have multiple access modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-7 { may not have multiple access modifiers } {
    
    empty_class T911ic7 "protected public interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-8
may not have multiple access modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-8 { may not have multiple access modifiers } {
    
    empty_class T911ic8 "protected protected interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-9
may not have multiple access modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-9 { may not have multiple access modifiers } {
    
    empty_class T911ic9 "protected public interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-10
may not have multiple access modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-10 { may not have multiple access modifiers } {
    
    empty_class T911ic10 "private public interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-11
may not have multiple access modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-11 { may not have multiple access modifiers } {
    
    empty_class T911ic11 "private protected interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-12
may not have multiple access modifiers

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-12 { may not have multiple access modifiers } {
    
    empty_class T911ic12 "private private interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-13
may be redundantly abstract

Expected Result: OK

Regression Test:

tcltest::test 9.1.1-in-class-13 { may be redundantly abstract } {
    
    ok_pass_or_warn [empty_class T911ic13 "abstract interface I {}"]

} {OK}
Test Case: 9.1.1-in-class-14
may not have abstract twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-14 { may not have abstract twice } {
    
    empty_class T911ic14 "abstract abstract interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-15
may be redundantly static

Expected Result: OK

Regression Test:

tcltest::test 9.1.1-in-class-15 { may be redundantly static } {
    
    ok_pass_or_warn [empty_class T911ic15 "static interface I {}"]

} {OK}
Test Case: 9.1.1-in-class-16
may not have static twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-16 { may not have static twice } {
    
    empty_class T911ic16 "static static interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-17
may be strictfp

Expected Result: PASS

Regression Test:

tcltest::test 9.1.1-in-class-17 { may be strictfp } {
    
    empty_class T911ic17 "strictfp interface I {}"

} {PASS}
Test Case: 9.1.1-in-class-18
may not have strictfp twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-18 { may not have strictfp twice } {
    
    empty_class T911ic18 "strictfp strictfp interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-19
may not be final

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-19 { may not be final } {
    
    empty_class T911ic19 "final interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-20
may not be synchronized

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-20 { may not be synchronized } {
    
    empty_class T911ic20 "synchronized interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-21
may not be native

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-21 { may not be native } {
    
    empty_class T911ic21 "native interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-22
may not be transient

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-22 { may not be transient } {
    
    empty_class T911ic22 "transient interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-23
may not be volatile

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-23 { may not be volatile } {
    
    empty_class T911ic23 "volatile interface I {}"

} {FAIL}
Test Case: 9.1.1-in-class-24
longest legal combination

Expected Result: OK

Regression Test:

tcltest::test 9.1.1-in-class-24 { longest legal combination } {
    
    ok_pass_or_warn [empty_class T911ic24 {
public abstract static strictfp interface I {}
}]

} {OK}
Test Case: 9.1.1-in-class-25
stress test

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-class-25 { stress test } {
    
    empty_class T911ic25 {
        public static abstract strictfp protected private final transient
        synchronized volatile native public static abstract strictfp
        interface I {}
    }

} {FAIL}
Test Case: 9.1.1-in-interface-1
may be redundantly public

Expected Result: OK

Regression Test:

tcltest::test 9.1.1-in-interface-1 { may be redundantly public } {
    
    ok_pass_or_warn [compile [saveas T911ii1.java {
interface T911ii1 {
    public interface I {}
}
}]]

} {OK}
Test Case: 9.1.1-in-interface-2
may not be protected

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-interface-2 { may not be protected } {
    
    compile [saveas T911ii2.java {
interface T911ii2 {
    protected interface I {}
}
}]

} {FAIL}
Test Case: 9.1.1-in-interface-3
may not be private

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-interface-3 { may not be private } {
    
    compile [saveas T911ii3.java {
interface T911ii3 {
    private interface I {}
}
}]

} {FAIL}
Test Case: 9.1.1-in-interface-4
may not have public twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-interface-4 { may not have public twice } {
    
    compile [saveas T911ii4.java {
interface T911ii4 {
    public public interface I {}
}
}]

} {FAIL}
Test Case: 9.1.1-in-interface-5
may be redundantly abstract

Expected Result: OK

Regression Test:

tcltest::test 9.1.1-in-interface-5 { may be redundantly abstract } {
    
    ok_pass_or_warn [compile [saveas T911ii5.java {
interface T911ii5 {
    abstract interface I {}
}
}]]

} {OK}
Test Case: 9.1.1-in-interface-6
may not have abstract twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-interface-6 { may not have abstract twice } {
    
    compile [saveas T911ii6.java {
interface T911ii6 {
    abstract abstract interface I {}
}
}]

} {FAIL}
Test Case: 9.1.1-in-interface-7
may be redundantly static

Expected Result: OK

Regression Test:

tcltest::test 9.1.1-in-interface-7 { may be redundantly static } {
    
    ok_pass_or_warn [compile [saveas T911ii7.java {
interface T911ii7 {
    static interface I {}
}
}]]

} {OK}
Test Case: 9.1.1-in-interface-8
may not have static twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-interface-8 { may not have static twice } {
    
    compile [saveas T911ii8.java {
interface T911ii8 {
    static static interface I {}
}
}]

} {FAIL}
Test Case: 9.1.1-in-interface-9
may be strictfp

Expected Result: PASS

Regression Test:

tcltest::test 9.1.1-in-interface-9 { may be strictfp } {
    
    compile [saveas T911ii9.java {
interface T911ii9 {
    strictfp interface I {}
}
}]

} {PASS}
Test Case: 9.1.1-in-interface-10
may not have strictfp twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-interface-10 { may not have strictfp twice } {
    
    compile [saveas T911ii10.java {
interface T911ii10 {
    strictfp strictfp interface I {}
}
}]

} {FAIL}
Test Case: 9.1.1-in-interface-11
may not be final

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-interface-11 { may not be final } {
    
    compile [saveas T911ii11.java {
interface T911ii11 {
    final interface I {}
}
}]

} {FAIL}
Test Case: 9.1.1-in-interface-12
may not be synchronized

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-interface-12 { may not be synchronized } {
    
    compile [saveas T911ii11.java {
interface T911ii11 {
    synchronized interface I {}
}
}]

} {FAIL}
Test Case: 9.1.1-in-interface-13
may not be native

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-interface-13 { may not be native } {
    
    compile [saveas T911ii11.java {
interface T911ii11 {
    native interface I {}
}
}]

} {FAIL}
Test Case: 9.1.1-in-interface-14
may not be transient

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-interface-14 { may not be transient } {
    
    compile [saveas T911ii11.java {
interface T911ii11 {
    transient interface I {}
}
}]

} {FAIL}
Test Case: 9.1.1-in-interface-15
may not be volatile

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-interface-15 { may not be volatile } {
    
    compile [saveas T911ii11.java {
interface T911ii11 {
    volatile interface I {}
}
}]

} {FAIL}
Test Case: 9.1.1-in-interface-16
longest legal combination

Expected Result: OK

Regression Test:

tcltest::test 9.1.1-in-interface-16 { longest legal combination } {
    
    ok_pass_or_warn [compile [saveas T911ii16.java {
interface T911ii16 {
    public abstract static strictfp interface I {}
}
}]]

} {OK}
Test Case: 9.1.1-in-interface-17
stress test

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.1-in-interface-17 { stress test } {
    
    compile [saveas T911ii17.java {
interface T911ii17 {
    public static abstract strictfp protected private final transient
    synchronized volatile native public static abstract strictfp
    interface I {}
}
}]

} {FAIL}

9.1.1.1

Directory : tests/jls/interfaces/interface-declarations/interface-modifiers/abstract-interfaces


Test Case: 9.1.1.1-1
The compiler may generate a warning when abstract modifier is applied to an implicitly abstract interface

Expected Result: OK

Regression Test:

tcltest::test 9.1.1.1-1 { The compiler may generate a warning when
        abstract modifier is applied to an implicitly abstract interface } {
    
    saveas AbstractInterface.java "abstract interface AbstractInterface {}"
    ok_pass_or_warn [compile AbstractInterface.java]

} {OK}
Test Case: 9.1.1.1-2
The compiler may generate a warning when abstract modifier is applied to an implicitly abstract inner interface

Expected Result: OK

Regression Test:

tcltest::test 9.1.1.1-2 { The compiler may generate a warning when
        abstract modifier is applied to an implicitly abstract inner interface } {
    
    saveas AbstractInnerInterface.java  {
public class AbstractInnerInterface {
    abstract interface Inter {}
}
}
    ok_pass_or_warn [compile AbstractInnerInterface.java]

} {OK}
Test Case: 9.1.1.1-3
The compiler may generate a warning when abstract modifier is applied to an implicitly abstract inner interface that is defined inside another interface

Expected Result: OK

Regression Test:

tcltest::test 9.1.1.1-3 { The compiler may generate a warning when
        abstract modifier is applied to an implicitly abstract inner interface
        that is defined inside another interface } {
    
    saveas AbstractInnerInterface_InInnerface.java  {
public interface AbstractInnerInterface_InInnerface {
    abstract interface Inter {}
}
}
    ok_pass_or_warn [compile AbstractInnerInterface_InInnerface.java]

} {OK}

9.1.2

Directory : tests/jls/interfaces/interface-declarations/superinterfaces-and-subinterfaces


Test Case: 9.1.2-accessible-1
All interfaces in the extends clause must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.2-accessible-1 { All interfaces in the extends clause must
        be accessible } {
    
    compile [saveas T912a1a.java {
class T912a1a {
    private interface I {}
}
interface T912a1b extends T912a1a.I {}
}]

} {FAIL}
Test Case: 9.1.2-accessible-2
All interfaces in the extends clause must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 9.1.2-accessible-2 { All interfaces in the extends clause must
        be accessible } {
    
    compile [saveas T912a2a.java {
interface T912a2a {}
interface T912a2b {}
interface T912a2c {}
interface T912a2d extends T912a2a, T912a2b, T912a2c {}
}]

} {PASS}
Test Case: 9.1.2-accessible-3
All interfaces in the extends clause must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.2-accessible-3 { All interfaces in the extends clause must
        be accessible } {
    
    compile [saveas p1/T912a3a.java {
package p1;
public class T912a3a {
    protected interface I {}
}
}] [saveas T912a3b.java {
interface T912a3b extends p1.T912a3a.I {}
}]

} {FAIL}
Test Case: 9.1.2-accessible-4
All interfaces in the extends clause must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.2-accessible-4 { All interfaces in the extends clause must
        be accessible } {
    
    compile [saveas p1/T912a4a.java {
package p1;
interface T912a4a {}
    }] [saveas T912a4b.java {
interface T912a4b extends p1.T912a4a {}
    }]

} {FAIL}
Test Case: 9.1.2-accessible-5
All interfaces in the extends clause must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 9.1.2-accessible-5 { All interfaces in the extends clause must
        be accessible } {
    
    compile [saveas p1/T912a5a.java {
package p1;
public class T912a5a {
    protected interface I {}
}
    }] [saveas T912a5b.java {
class T912a5b extends p1.T912a5a {
    interface Sub extends I {}
}
    }]

} {PASS}
Test Case: 9.1.2-accessible-6
All interfaces in the extends clause must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 9.1.2-accessible-6 { All interfaces in the extends clause must
        be accessible } {
    
    empty_class T912a6 {
	private interface One {}
	interface Two extends One {}
    }

} {PASS}
Test Case: 9.1.2-interface-1
All types in the extends clause must be interfaces

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.2-interface-1 { All types in the extends clause must be
        interfaces } {
    
    empty_class T912i1 {
	interface I extends Object {}
    }

} {FAIL}
Test Case: 9.1.2-interface-2
All types in the extends clause must be interfaces

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.2-interface-2 { All types in the extends clause must be
        interfaces } {
    
    empty_class T912i2 {
	class C {}
	interface I extends C {}
    }

} {FAIL}
Test Case: 9.1.2-interface-3
A superinterface name may be non-canonical

Expected Result: PASS

Regression Test:

tcltest::test 9.1.2-interface-3 { A superinterface name may be non-canonical } {
    
    compile [saveas T912i3a.java {
class T912i3a {
    interface Super {}
}
class T912i3b extends T912i3a {}
interface T912i3c extends T912i3b.Super {}
    }]

} {PASS}
Test Case: 9.1.2-interface-4
A superinterface name may be non-canonical

Expected Result: PASS

Regression Test:

tcltest::test 9.1.2-interface-4 { A superinterface name may be non-canonical } {
    
    compile [saveas T912i4a.java {
class T912i4a {
    interface Super {}
}
class T912i4b extends T912i4a {
    interface C extends Super {}
}
    }]

} {PASS}
Test Case: 9.1.2-interface-5
A superinterface name may be non-canonical

Expected Result: PASS

Regression Test:

tcltest::test 9.1.2-interface-5 { A superinterface name may be non-canonical } {
    
    compile [saveas T912i5a.java {
class T912i5a {
    interface Super {}
}
class T912i5b extends T912i5a {
    interface C extends T912i5b.Super {}
}
    }]

} {PASS}
Test Case: 9.1.2-interface-6
A superinterface name may be non-canonical

Expected Result: PASS

Regression Test:

tcltest::test 9.1.2-interface-6 { A superinterface name may be non-canonical } {
    
    compile [saveas T912i6a.java {
class T912i6a {
    interface Super {}
}
class T912i6b extends T912i6a {
    interface C extends Super {}
}
interface T912i6c extends T912i6b.Super {}
    }]

} {PASS}
Test Case: 9.1.2-circular-1
An interface must not depend on itself

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.2-circular-1 { An interface must not depend on itself } {
    
    compile [saveas T912c1.java "interface T912c1 extends T912c1 {}"]

} {FAIL}
Test Case: 9.1.2-circular-2
An interface must not depend on itself

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.2-circular-2 { An interface must not depend on itself } {
    
    compile [saveas T912c2.java {
interface T912c2 extends T912c2.I {
    interface I {}
}
}]

} {FAIL}
Test Case: 9.1.2-circular-3
An interface must not depend on itself

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.2-circular-3 { An interface must not depend on itself } {
    
    compile [saveas T912c3a.java {
interface T912c3a extends T912c3b {}
interface T912c3b extends T912c3a {}
}]

} {FAIL}
Test Case: 9.1.2-circular-4
An interface must not depend on itself

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.2-circular-4 { An interface must not depend on itself } {
    
    compile [saveas T912c4a.java {
interface T912c4a extends T912c4b.Inner2 {
    interface Inner1 {}
}
interface T912c4b {
    interface Inner2 extends T912c4a.Inner1 {}
}
}]

} {FAIL}
Test Case: 9.1.2-circular-5
An interface must not depend on itself

Expected Result: PASS

Regression Test:

tcltest::test 9.1.2-circular-5 { An interface must not depend on itself } {
    
    compile [saveas T912c5a.java {
interface T912c5a {
    interface Inner1 extends T912c5b.Inner2 {}
}
interface T912c5b extends T912c5a {
    interface Inner2 {}
}
}]

} {PASS}
Test Case: 9.1.2-unique-1
The extends clause must not list an element twice, by any name

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.2-unique-1 { The extends clause must not list an element
        twice, by any name } {
    
    compile [saveas T912u1.java {
interface T912u1 extends Cloneable, Cloneable {}
}]

} {FAIL}
Test Case: 9.1.2-unique-2
The extends clause must not list an element twice, by any name

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.2-unique-2 { The extends clause must not list an element
        twice, by any name } {
    
    compile [saveas T912u2.java {
interface T912u2 extends java.lang.Cloneable, Cloneable {}
}]

} {FAIL}
Test Case: 9.1.2-unique-3
The extends clause must not list an element twice, by any name

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.2-unique-3 { The extends clause must not list an element
        twice, by any name } {
    
    compile [saveas T912u3a.java {
class T912u3a {
    interface I1 {}
}
class T912u3b extends T912u3a {}
interface T912u3c extends T912u3a.I1, T912u3b.I1 {}
}]

} {FAIL}
Test Case: 9.1.2-unique-4
An interface may inherit the same superinterface via more than one path

Expected Result: PASS

Regression Test:

tcltest::test 9.1.2-unique-4 { An interface may inherit the same superinterface
        via more than one path } {
    
    compile [saveas T912u4a.java {
interface T912u4a {}
interface T912u4b extends T912u4a {}
interface T912u4c extends T912u4a, T912u4b {}
}]

} {PASS}
Test Case: 9.1.2-supertype-1
Test for accessible inner supertype - Jikes bug 3202

Expected Result: PASS

Regression Test:

tcltest::test 9.1.2-supertype-1 { Test for accessible inner supertype - Jikes
        bug 3202 } {
    
    compile [saveas T912s1_1.java {
interface T912s1_1 {
    interface One {}
}
interface T912s1_2 extends T912s1_1 {
    interface Two extends One {}
}
interface T912s1_3 extends T912s1_2 {
    interface Three extends Two {}
}
    }]

} {PASS}

9.1.3

Directory : tests/jls/interfaces/interface-declarations/interface-body-and-member-declarations


Test Case: 9.1.3-body-1
An interface may include a field declaration

Expected Result: PASS

Regression Test:

tcltest::test 9.1.3-body-1 { An interface may include a field declaration } {
    
    empty_class T913b1 "interface I { int i = 1; }"

} {PASS}
Test Case: 9.1.3-body-2
An interface may include an abstract method declaration

Expected Result: PASS

Regression Test:

tcltest::test 9.1.3-body-2 { An interface may include an abstract method
        declaration } {
    
     empty_class T913b2 "interface I { void m(); }"

} {PASS}
Test Case: 9.1.3-body-3
An interface may include a class declaration

Expected Result: PASS

Regression Test:

tcltest::test 9.1.3-body-3 { An interface may include a class declaration } {
    
    empty_class T913b3 "interface I { class C {} }"

} {PASS}
Test Case: 9.1.3-body-4
An interface may include an interface declaration

Expected Result: PASS

Regression Test:

tcltest::test 9.1.3-body-4 { An interface may include an interface
        declaration } {
    
    empty_class T913b4 "interface I { interface I1 {} }"

} {PASS}
Test Case: 9.1.3-body-5
An interface may include an empty declaration

Expected Result: PASS

Regression Test:

tcltest::test 9.1.3-body-5 { An interface may include an empty declaration } {
    
    empty_class T913b5 "interface I { ; }"

} {PASS}
Test Case: 9.1.3-body-6
An interface may not have a constructor

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.3-body-6 { An interface may not have a constructor } {
    
    empty_class T913b6 "interface I { I() {} }"

} {FAIL}
Test Case: 9.1.3-body-7
An interface may not have an instance initializer

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.3-body-7 { An interface may not have an instance
         initializer } {
    
    empty_class T913b7 "interface I { {} }"

} {FAIL}
Test Case: 9.1.3-body-8
An interface may not have a static initializer

Expected Result: FAIL

Regression Test:

tcltest::test 9.1.3-body-8 { An interface may not have a static initializer } {
    
    empty_class T913b8 "interface I { static {} }"

} {FAIL}

9.2

Directory : tests/jls/interfaces/interface-members


Test Case: 9.2-implicit-1
Interfaces implicitly have all public method members of Object

Expected Result: PASS

Regression Test:

tcltest::test 9.2-implicit-1 { Interfaces implicitly have all public method
        members of Object } {
    
    empty_class T92i1 {
        interface I {}
        void foo(I i) {
            i.getClass();
            i.toString();
            i.equals(null);
            i.hashCode();
            try {
                i.wait();
                i.wait(1);
                i.wait(1, 0);
                i.notifyAll();
                i.notify();
            } catch (Throwable t) {
            }
        }
    }

} {PASS}
Test Case: 9.2-implicit-2
It is an error for an interface method to conflict with a public one from Object

Expected Result: FAIL

Regression Test:

tcltest::test 9.2-implicit-2 { It is an error for an interface method to
        conflict with a public one from Object } {
    
    empty_class T92i2 "interface I { int toString(); }"

} {FAIL}
Test Case: 9.2-implicit-3
It is an error for an interface method to conflict with a public one from Object

Expected Result: FAIL

Regression Test:

tcltest::test 9.2-implicit-3 { It is an error for an interface method to
        conflict with a public one from Object } {
    
    empty_class T92i3 "interface I { String toString() throws Exception; }"

} {FAIL}
Test Case: 9.2-implicit-4
It is an error for an interface method to conflict with a public one from Object

Expected Result: FAIL

Regression Test:

tcltest::test 9.2-implicit-4 { It is an error for an interface method to
        conflict with a public one from Object } {
    
    empty_class T92i4 "interface I { Class getClass(); }"

} {FAIL}
Test Case: 9.2-implicit-5
An interface may redeclare a non-final method of Object

Expected Result: PASS

Regression Test:

tcltest::test 9.2-implicit-5 { An interface may redeclare a non-final method
        of Object } {
    
    empty_class T92i5 "interface I { String toString() throws Error; }"

} {PASS}
Test Case: 9.2-implicit-6
Interfaces do not implicitly have any protected methods from Object. Javac compiles this, but the resulting class causes a VerifyError, so it should not have compiled.

Expected Result: FAIL

Regression Test:

tcltest::test 9.2-implicit-6 { Interfaces do not implicitly have any protected
        methods from Object. Javac compiles this, but the resulting class
        causes a VerifyError, so it should not have compiled. } {
    
    compile [saveas T92i6.java {
interface T92i6 extends Cloneable {
    class Inner {
        Object bar(T92i6 i) {
            try {
                // Because this call is nested in the interface, it would have
                // full access to protected i.clone() if that existed.
                return i.clone();
            } catch (CloneNotSupportedException e) {
                return null;
            }
        }
    }
}
}]

} {FAIL}
Test Case: 9.2-implicit-7
Interfaces do not implicitly have any protected methods from Object. Javac compiles this, but the resulting class causes a VerifyError, so it should not have compiled.

Expected Result: FAIL

Regression Test:

tcltest::test 9.2-implicit-7 { Interfaces do not implicitly have any protected
        methods from Object. Javac compiles this, but the resulting class
        causes a VerifyError, so it should not have compiled. } {
    
    compile [saveas T92i7.java {
interface T92i7 extends Cloneable {
    class Inner {
        void bar(T92i7 i) {
            try {
                // Because this call is nested in the interface, it would have
                // full access to protected i.finalize() if that existed.
                i.finalize();
            } catch (Throwable t) {
            }
        }
    }
}
}]

} {FAIL}
Test Case: 9.2-implicit-8
Interfaces do not implicitly have any protected methods from Object. Thus, this declaration is legal (although the interface is unimplementable) - see Jikes bug 2878

Expected Result: OK

Regression Test:

tcltest::test 9.2-implicit-8 { Interfaces do not implicitly have any protected
        methods from Object. Thus, this declaration is legal (although the
        interface is unimplementable) - see Jikes bug 2878 } {
    
    ok_pass_or_warn [empty_class T92i8 "interface I { int clone(); }"]

} {OK}
Test Case: 9.2-implicit-9
Interfaces do not implicitly have any protected methods from Object. Thus, this declaration is legal - see Jikes bug 2878

Expected Result: OK

Regression Test:

tcltest::test 9.2-implicit-9 { Interfaces do not implicitly have any protected
        methods from Object. Thus, this declaration is legal - see Jikes
        bug 2878 } {
    
    ok_pass_or_warn [empty_class T92i9 {
        interface I { Object clone() throws java.io.IOException; }
    }]

} {OK}
Test Case: 9.2-implicit-10
Interfaces do not implicitly have any protected methods from Object. Thus, this declaration is legal (although the interface is unimplementable) - see Jikes bug 2878

Expected Result: OK

Regression Test:

tcltest::test 9.2-implicit-10 { Interfaces do not implicitly have any protected
        methods from Object. Thus, this declaration is legal (although the
        interface is unimplementable) - see Jikes bug 2878 } {
    
    ok_pass_or_warn [empty_class T92i10 "interface I { int finalize(); }"]

} {OK}
Test Case: 9.2-implicit-11
Proof that the interfaces of tests 8 and 10 are unimplementable, although the interface itself is legal - see Jikes bug 2878

Expected Result: FAIL

Regression Test:

tcltest::test 9.2-implicit-11 { Proof that the interfaces of tests 8 and 10
        are unimplementable, although the interface itself is legal - see
        Jikes bug 2878} {
    
    empty_class T92i11 {
        interface I { int clone(); }
        abstract class C implements I {}
    }

} {FAIL}
Test Case: 9.2-implicit-12
Proof that the interfaces of tests 8 and 10 are unimplementable, although the interface itself is legal - see Jikes bug 2878

Expected Result: FAIL

Regression Test:

tcltest::test 9.2-implicit-12 { Proof that the interfaces of tests 8 and 10
        are unimplementable, although the interface itself is legal - see
        Jikes bug 2878} {
    
    empty_class T92i12 {
        interface I { int finalize(); }
        abstract class C implements I {}
    }

} {FAIL}
Test Case: 9.2-implicit-13
Although an interface may extend the throws clause for clone(), implementing classes can only throw the common subset of checked exceptions as compared to Object.clone

Expected Result: OK

Regression Test:

tcltest::test 9.2-implicit-13 { Although an interface may extend the throws
        clause for clone(), implementing classes can only throw the common
        subset of checked exceptions as compared to Object.clone } {
    
    ok_pass_or_warn [empty_class T92i13 {
        interface I { Object clone() throws java.io.IOException; }
        class C implements I {
            public Object clone() { return null; }
        }
    }]

} {OK}
Test Case: 9.2-implicit-14
Although an interface may extend the throws clause for clone(), implementing classes can only throw the common subset of checked exceptions as compared to Object.clone

Expected Result: FAIL

Regression Test:

tcltest::test 9.2-implicit-14 { Although an interface may extend the throws
        clause for clone(), implementing classes can only throw the common
        subset of checked exceptions as compared to Object.clone } {
    
    empty_class T92i14 {
        interface I { Object clone() throws java.io.IOException; }
        class C implements I {
            public Object clone() throws CloneNotSupportedException
            { return null; }
        }
    }

} {FAIL}
Test Case: 9.2-implicit-15
Although an interface may extend the throws clause for clone(), implementing classes can only throw the common subset of checked exceptions as compared to Object.clone

Expected Result: FAIL

Regression Test:

tcltest::test 9.2-implicit-15 { Although an interface may extend the throws
        clause for clone(), implementing classes can only throw the common
        subset of checked exceptions as compared to Object.clone } {
    
    empty_class T92i15 {
        interface I { Object clone() throws java.io.IOException; }
        class C implements I {
            public Object clone() throws java.io.IOException
            { return null; }
        }
    }

} {FAIL}
Test Case: 9.2-implicit-16
Although an interface may extend the throws clause for clone(), implementing classes can only throw the common subset of checked exceptions as compared to Object.clone

Expected Result: OK

Regression Test:

tcltest::test 9.2-implicit-16 { Although an interface may extend the throws
        clause for clone(), implementing classes can only throw the common
        subset of checked exceptions as compared to Object.clone } {
    
    ok_pass_or_warn [empty_class T92i16 {
        interface I { Object clone() throws java.io.IOException; }
        abstract class C implements I {
            public abstract Object clone();
        }
        void m(C c) {
            c.clone(); // cannot throw a checked exception
        }
    }]

} {OK}
Test Case: 9.2-implicit-17
The version of clone() inherited from Object does not satisfy clone() specified in an interface

Expected Result: FAIL

Regression Test:

tcltest::test 9.2-implicit-17 { The version of clone() inherited from Object
        does not satisfy clone() specified in an interface } {
    
    empty_class T92i17 {
        interface I { Object clone() throws java.io.IOException; }
        abstract class C implements I {}
    }

} {FAIL}
Test Case: 9.2-implicit-18
The version of clone() inherited from Object does not satisfy clone() specified in an interface

Expected Result: FAIL

Regression Test:

tcltest::test 9.2-implicit-18 { The version of clone() inherited from Object
        does not satisfy clone() specified in an interface } {
    
    empty_class T92i18 {
        interface I { Object clone() throws CloneNotSupportedException; }
        abstract class C implements I {}
    }

} {FAIL}
Test Case: 9.2-implicit-19
The version of finalize() inherited from Object does not satisfy finalize() specified in an interface

Expected Result: FAIL

Regression Test:

tcltest::test 9.2-implicit-19 { The version of finalize() inherited from Object
        does not satisfy finalize() specified in an interface } {
    
    empty_class T92i19 {
        interface I { void finalize() throws Throwable; }
        abstract class C implements I {}
    }

} {FAIL}

9.3

Directory : tests/jls/interfaces/field-constant-declarations


Test Case: 9.3-modifier-1
An interface field may be redundantly public

Expected Result: OK

Regression Test:

tcltest::test 9.3-modifier-1 { An interface field may be redundantly public } {
    
    ok_pass_or_warn [empty_class T93m1 "interface I { public int i = 1; }"]

} {OK}
Test Case: 9.3-modifier-2
An interface field may not have public twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-modifier-2 { An interface field may not have public twice } {
    
    empty_class T93m2 "interface I { public public int i = 1; }"

} {FAIL}
Test Case: 9.3-modifier-3
An interface field may be redundantly static

Expected Result: OK

Regression Test:

tcltest::test 9.3-modifier-3 { An interface field may be redundantly static } {
    
    ok_pass_or_warn [empty_class T93m3 "interface I { static int i = 1; }"]

} {OK}
Test Case: 9.3-modifier-4
An interface field may not have static twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-modifier-4 { An interface field may not have static twice } {
    
    empty_class T93m4 "interface I { static static int i = 1; }"

} {FAIL}
Test Case: 9.3-modifier-5
An interface field may be redundantly final

Expected Result: OK

Regression Test:

tcltest::test 9.3-modifier-5 { An interface field may be redundantly final } {
    
    ok_pass_or_warn [empty_class T93m5 "interface I { final int i = 1; }"]

} {OK}
Test Case: 9.3-modifier-6
An interface field may not have final twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-modifier-6 { An interface field may not have final twice } {
    
    empty_class T93m6 "interface I { final final int i = 1; }"

} {FAIL}
Test Case: 9.3-modifier-7
An interface field may not be protected

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-modifier-7 { An interface field may not be protected } {
    
    empty_class T93m7 "interface I { protected int i = 1; }"

} {FAIL}
Test Case: 9.3-modifier-8
An interface field may not be private

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-modifier-8 { An interface field may not be private } {
    
    empty_class T93m8 "interface I { private int i = 1; }"

} {FAIL}
Test Case: 9.3-modifier-9
An interface field may not be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-modifier-9 { An interface field may not be abstract } {
    
    empty_class T93m9 "interface I { abstract int i = 1; }"

} {FAIL}
Test Case: 9.3-modifier-10
An interface field may not be transient

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-modifier-10 { An interface field may not be transient } {
    
    empty_class T93m10 "interface I { transient int i = 1; }"

} {FAIL}
Test Case: 9.3-modifier-11
An interface field may not be volatile

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-modifier-11 { An interface field may not be volatile } {
    
    empty_class T93m11 "interface I { volatile int i = 1; }"

} {FAIL}
Test Case: 9.3-modifier-12
An interface field may not be strictfp

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-modifier-12 { An interface field may not be strictfp } {
    
    empty_class T93m12 "interface I { strictfp int i = 1; }"

} {FAIL}
Test Case: 9.3-modifier-13
An interface field may not be native

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-modifier-13 { An interface field may not be native } {
    
    empty_class T93m13 "interface I { native int i = 1; }"

} {FAIL}
Test Case: 9.3-modifier-14
An interface field may not be synchronized

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-modifier-14 { An interface field may not be synchronized } {
    
    empty_class T93m14 "interface I { synchronized int i = 1; }"

} {FAIL}
Test Case: 9.3-modifier-15
Longest legal modifier sequence

Expected Result: OK

Regression Test:

tcltest::test 9.3-modifier-15 { Longest legal modifier sequence } {
    
    ok_pass_or_warn [empty_class T93m15 {
        interface I { public static final int i = 1; }
    }]

} {OK}
Test Case: 9.3-modifier-16
Stress test

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-modifier-16 { Stress test } {
    
    empty_class T93m16 {
        interface I {
            public static final protected private abstract transient volatile
            strictfp native synchronized public static final int i = 1;
        }
    }

} {FAIL}
Test Case: 9.3-modifier-17
static public is legal, though redundant and not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 9.3-modifier-17 { static public is legal, though redundant and
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T93m17 {
	interface I { static public int i = 1; }
    }]

} {OK}
Test Case: 9.3-modifier-18
final public is legal, though redundant and not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 9.3-modifier-18 { final public is legal, though redundant and
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T93m18 {
	interface I { final public int i = 1; }
    }]

} {OK}
Test Case: 9.3-modifier-19
final static is legal, though redundant and not in the preferred order

Expected Result: OK

Regression Test:

tcltest::test 9.3-modifier-19 { final static is legal, though redundant and
        not in the preferred order } {
    
    ok_pass_or_warn [empty_class T93m19 {
	interface I { final static int i = 1; }
    }]

} {OK}
Test Case: 9.3-conflict-1
An interface may not declare the same field twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-conflict-1 { An interface may not declare the same field
        twice } {
    
    empty_class T93c1 "interface I { int i = 1; int i = 2; }"

} {FAIL}
Test Case: 9.3-conflict-2
An interface may inherit a field with the same name twice, provided it doesn't either one by simple name

Expected Result: PASS

Regression Test:

tcltest::test 9.3-conflict-2 { An interface may inherit a field with the same
        name twice, provided it doesn't either one by simple name } {
    
    empty_class T93c2 {
        interface I1 { int i = 1; }
        interface I2 { int i = 2; }
        interface I3 extends I1, I2 {}
    }

} {PASS}
Test Case: 9.3-conflict-3
An interface may inherit a field with the same name twice, but may not use it, even if both have the same value

Expected Result: FAIL

Regression Test:

tcltest::test 9.3-conflict-3 { An interface may inherit a field with the same
        name twice, but may not use it, even if both have the same value } {
    
    empty_class T93c3 {
        interface I1 { int i = 1; }
        interface I2 { int i = 1; }
        interface I3 extends I1, I2 { int j = i; }
    }

} {FAIL}
Test Case: 9.3-conflict-4
A field inherited through two paths is not ambiguous

Expected Result: PASS

Regression Test:

tcltest::test 9.3-conflict-4 { A field inherited through two paths is not
        ambiguous } {
    
    empty_class T93c4 {
        interface I1 { int i = 1; }
        interface I2 extends I1 {}
        interface I3 extends I1, I2 { int j = i; }
    }

} {PASS}

9.3.1

Directory : tests/jls/interfaces/field-constant-declarations/initialization-of-fields


Test Case: 9.3.1-init-1
All interface fields must have an initializer

Expected Result: FAIL

Regression Test:

tcltest::test 9.3.1-init-1 { All interface fields must have an initializer } {
    
    compile [saveas T931i1.java {
        interface T931i1 { int i; }
    }]

} {FAIL}
Test Case: 9.3.1-init-2
Keyword this may not appear directly in init

Expected Result: FAIL

Regression Test:

tcltest::test 9.3.1-init-2 { Keyword this may not appear directly in init } {
    
    empty_class T931i2 {
        interface I {
            int j = 1;
            int i = this.j;
        }
    }

} {FAIL}
Test Case: 9.3.1-init-3
Keyword super may not appear directly in init

Expected Result: FAIL

Regression Test:

tcltest::test 9.3.1-init-3 { Keyword super may not appear directly in init } {
    
    empty_class T931i3 {
        interface I1 { int i = 1; }
        interface I2 extends I1 { int j = super.i; }
    }

} {FAIL}
Test Case: 9.3.1-init-4
Initializer may use anonymous class

Expected Result: PASS

Regression Test:

tcltest::test 9.3.1-init-4 { Initializer may use anonymous class } {
    
    empty_class T931i4 {
        interface I { int i = new Object() { int foo() { return 1; } }.foo(); }
    }

} {PASS}
Test Case: 9.3.1-init-5
Initializer may use class literal

Expected Result: PASS

Regression Test:

tcltest::test 9.3.1-init-5 { Initializer may use class literal } {
    
    empty_class T931i5 "interface I { Class c = I.class; }"

} {PASS}
Test Case: 9.3.1-init-6
Initializer may use anonymous class

Expected Result: PASS

Regression Test:

tcltest::test 9.3.1-init-6 { Initializer may use anonymous class } {
    
    compile [saveas T931i6a.java {
interface T931i6a {
    int i = new Object() {
	int m() { return 0; }
    }.m();
}
class T931i6b {
    int j = T931i6a.i;
}
    }]

} {PASS}
Test Case: 9.3.1-illegal-forward-1
Simple usage before declaration legal if not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 9.3.1-illegal-forward-1 { Simple usage before
        declaration legal if not in declaring class } {
    
    empty_class T931if1 {
        interface I {
            int i = j;
            int j = 1;
        }
    }

} {FAIL}
Test Case: 9.3.1-illegal-forward-2
Simple usage before declaration legal if not in declaring class

Expected Result: FAIL

Regression Test:

tcltest::test 9.3.1-illegal-forward-2 { Simple usage before
        declaration legal if not in declaring class } {
    
    empty_class T931if2 {
        interface I {
            int i = i + 1;
        }
    }

} {FAIL}
Test Case: 9.3.1-legal-forward-1
Simple usage before declaration legal if not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 9.3.1-legal-forward-1 { Simple usage before
        declaration legal if not in declaring class } {
    
    empty_class T931lf1 {
        interface I {
            int i = I.j; // not simple usage
            int j = 1;
        }
    }

} {PASS}
Test Case: 9.3.1-legal-forward-2
Simple usage before declaration legal if not in declaring class

Expected Result: PASS

Regression Test:

tcltest::test 9.3.1-legal-forward-2 { Simple usage before
        declaration legal if not in declaring class } {
    
    empty_class T931lf2 {
        interface I {
            int i = new Object(){ int bar() { return j; } }.bar();
            // not in declaring class
            int j = 1;
        }
    }

} {PASS}

9.4

Directory : tests/jls/interfaces/abstract-method-declarations


Test Case: 9.4-modifier-1
interface methods may be redundantly public

Expected Result: OK

Regression Test:

tcltest::test 9.4-modifier-1 { interface methods may be redundantly public } {
    
    ok_pass_or_warn [empty_class T94m1 "interface I { public void m(); }"]

} {OK}
Test Case: 9.4-modifier-2
interface methods may not have public twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-modifier-2 { interface methods may not have public twice } {
    
    empty_class T94m1 "interface I { public public void m(); }"

} {FAIL}
Test Case: 9.4-modifier-3
interface methods may be redundantly abstract

Expected Result: OK

Regression Test:

tcltest::test 9.4-modifier-3 { interface methods may be redundantly
        abstract } {
    
    ok_pass_or_warn [empty_class T94m3 "interface I { abstract void m(); }"]

} {OK}
Test Case: 9.4-modifier-4
interface methods may not have abstract twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-modifier-4 { interface methods may not have abstract
        twice } {
    
    empty_class T94m4 "interface I { abstract abstract void m(); }"

} {FAIL}
Test Case: 9.4-modifier-5
interface methods may not be protected

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-modifier-5 { interface methods may not be protected } {
    
    empty_class T94m5 "interface I { protected void m(); }"

} {FAIL}
Test Case: 9.4-modifier-6
interface methods may not be private

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-modifier-6 { interface methods may not be private } {
    
    empty_class T94m6 "interface I { private void m(); }"

} {FAIL}
Test Case: 9.4-modifier-7
interface methods may not be static

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-modifier-7 { interface methods may not be static } {
    
    empty_class T94m7 "interface I { static void m(); }"

} {FAIL}
Test Case: 9.4-modifier-8
interface methods may not be final

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-modifier-8 { interface methods may not be final } {
    
    empty_class T94m8 "interface I { final void m(); }"

} {FAIL}
Test Case: 9.4-modifier-9
interface methods may not be transient

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-modifier-9 { interface methods may not be transient } {
    
    empty_class T94m9 "interface I { transient void m(); }"

} {FAIL}
Test Case: 9.4-modifier-10
interface methods may not be volatile

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-modifier-10 { interface methods may not be volatile } {
    
    empty_class T94m10 "interface I { volatile void m(); }"

} {FAIL}
Test Case: 9.4-modifier-11
interface methods may not be strictfp

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-modifier-11 { interface methods may not be strictfp } {
    
    empty_class T94m11 "interface I { strictfp void m(); }"

} {FAIL}
Test Case: 9.4-modifier-12
interface methods may not be native

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-modifier-12 { interface methods may not be native } {
    
    empty_class T94m12 "interface I { native void m(); }"

} {FAIL}
Test Case: 9.4-modifier-13
interface methods may not be synchronized

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-modifier-13 { interface methods may not be synchronized } {
    
    empty_class T94m13 "interface I { synchronized void m(); }"

} {FAIL}
Test Case: 9.4-modifier-14
Longest legal modifier sequence

Expected Result: OK

Regression Test:

tcltest::test 9.4-modifier-14 { Longest legal modifier sequence } {
    
    ok_pass_or_warn [empty_class T94m14 {
        interface I { public abstract void m(); }
    }]

} {OK}
Test Case: 9.4-modifier-15
Stress test

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-modifier-15 { Stress test } {
    
    empty_class T94m15 {
        interface I {
            public abstract protected private static final transient volatile
            strictfp native synchronized public abstract void m();
        }
    }

} {FAIL}
Test Case: 9.4-conflict-1
An interface may not declare the same method twice

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-conflict-1 { An interface may not declare the same method
        twice } {
    
    empty_class T94c1 "interface I { void m(); void m(); }"

} {FAIL}
Test Case: 9.4-conflict-2
An interface may inherit a method with the same name and signature twice

Expected Result: PASS

Regression Test:

tcltest::test 9.4-conflict-2 { An interface may inherit a method with the same
        name and signature twice } {
    
    empty_class T94c2 {
        interface I1 { void m(); }
        interface I2 { void m(); }
        interface I3 extends I1, I2 {}
    }

} {PASS}
Test Case: 9.4-conflict-3
An interface may inherit a method with the same name and signature twice, and there is no ambiguity in using it

Expected Result: PASS

Regression Test:

tcltest::test 9.4-conflict-3 { An interface may inherit a method with the same
        name and signature twice, and there is no ambiguity in using it } {
    
    empty_class T94c3 {
        interface I1 { void m(); }
        interface I2 { void m(); }
        interface I3 extends I1, I2 {}
        void foo(I3 i) {
            i.m();
        }
    }

} {PASS}
Test Case: 9.4-conflict-4
A method inherited through two paths is not ambiguous

Expected Result: PASS

Regression Test:

tcltest::test 9.4-conflict-4 { A method inherited through two paths is not
        ambiguous } {
    
    empty_class T94c4 {
        interface I1 { void m(); }
        interface I2 extends I1 {}
        interface I3 extends I1, I2 {}
        void bar(I3 i) {
            i.m();
        }
    }

} {PASS}
Test Case: 9.4-abstract-1
An interface method is abstract, so it must not have a body

Expected Result: FAIL

Regression Test:

tcltest::test 9.4-abstract-1 { An interface method is abstract, so it must
        not have a body } {
    
    empty_class T94a1 "interface I { void m() {} }"

} {FAIL}

9.4.1

Directory : tests/jls/interfaces/abstract-method-declarations/inheritance-and-overriding


Test Case: 9.4.1-conflict-1
An overriding method must not conflict in return type or throws clause

Expected Result: FAIL

Regression Test:

tcltest::test 9.4.1-conflict-1 { An overriding method must not conflict in
        return type or throws clause } {
    
    empty_class T941c1 {
        interface I1 { void m(); }
        interface I2 extends I1 { int m(); }
    }

} {FAIL}
Test Case: 9.4.1-conflict-2
An overriding method must not conflict in return type or throws clause

Expected Result: FAIL

Regression Test:

tcltest::test 9.4.1-conflict-2 { An overriding method must not conflict in
        return type or throws clause } {
    
    empty_class T941c2 {
        interface I1 { void m(); }
        interface I2 extends I1 { void m() throws Exception; }
    }

} {FAIL}
Test Case: 9.4.1-conflict-3
An interface must not inherit conflicting return types, but throws clauses are ok

Expected Result: FAIL

Regression Test:

tcltest::test 9.4.1-conflict-3 { An interface must not inherit conflicting
        return types, but throws clauses are ok } {
    
    empty_class T941c3 {
        interface I1 { void m(); }
        interface I2 { int m(); }
        interface I3 extends I1, I2 {}
    }

} {FAIL}
Test Case: 9.4.1-conflict-4
An interface must not inherit conflicting return types, but throws clauses are ok

Expected Result: PASS

Regression Test:

tcltest::test 9.4.1-conflict-4 { An interface must not inherit conflicting
        return types, but throws clauses are ok } {
    
    empty_class T941c4 {
        class E1 extends Exception {}
        class E2 extends Exception {}
        interface I1 { void m() throws E1; }
        interface I2 { void m() throws E2; }
        interface I3 extends I1, I2 {}
    }

} {PASS}
Test Case: 9.4.1-override-1
methods not overridden are inherited

Expected Result: PASS

Regression Test:

tcltest::test 9.4.1-override-1 { methods not overridden are inherited } {
    
    empty_class T941o1 {
        interface I1 {
            void m();
            void m(int i);
        }
        interface I2 extends I1 {
            void m();
        }
        void foo(I2 i) {
            i.m(1);
        }
    }

} {PASS}
Test Case: 9.4.1-override-2
A method may be overridden to have a less permissive throws clause

Expected Result: PASS

Regression Test:

tcltest::test 9.4.1-override-2 { A method may be overridden to have a less
        permissive throws clause } {
    
    empty_class T941o2 {
        interface I1 { void m() throws Throwable; }
        interface I2 extends I1 { void m() throws Exception; }
    }

} {PASS}

9.4.2

Directory : tests/jls/interfaces/abstract-method-declarations/overloading


Test Case: 9.4.2-overload-1
there are no required relations between overloaded methods

Expected Result: PASS

Regression Test:

tcltest::test 9.4.2-overload-1 { there are no required relations between
        overloaded methods } {
    
    empty_class T942o1 {
        interface I {
            void m();
            int m(int i) throws Exception;
        }
    }

} {PASS}
Test Case: 9.4.2-overload-2
there are no required relations between overloaded methods

Expected Result: PASS

Regression Test:

tcltest::test 9.4.2-overload-2 { there are no required relations between
        overloaded methods } {
    
    empty_class T942o2 {
        interface I1 {
            void m();
        }
        interface I2 extends I1 {
            int m(int i) throws Exception;
        }
    }

} {PASS}

10.6

Directory : tests/jls/arrays/array-initializers


Test Case: 10.6-syntax-1
array initializer may be empty

Expected Result: PASS

Regression Test:

tcltest::test 10.6-syntax-1 { array initializer may be empty } {
    
    empty_main T106s1 {
        int[] ia = {};
    }

} {PASS}
Test Case: 10.6-syntax-2
array initializer may contain initializers

Expected Result: PASS

Regression Test:

tcltest::test 10.6-syntax-2 { array initializer may contain initializers } {
    
    empty_main T106s2 {
        int[] ia = { 1 };
    }

} {PASS}
Test Case: 10.6-syntax-3
array initializer may contain initializers

Expected Result: PASS

Regression Test:

tcltest::test 10.6-syntax-3 { array initializer may contain initializers } {
    
    empty_main T106s3 {
        int[] ia = { 1, 2 };
    }

} {PASS}
Test Case: 10.6-syntax-4
array initializer may contain concluding comma

Expected Result: PASS

Regression Test:

tcltest::test 10.6-syntax-4 { array initializer may contain concluding comma } {
    
    empty_main T106s4 {
        int[] ia = { , };
    }

} {PASS}
Test Case: 10.6-syntax-5
array initializer may contain concluding comma

Expected Result: PASS

Regression Test:

tcltest::test 10.6-syntax-5 { array initializer may contain concluding comma } {
    
    empty_main T106s5 {
        int[] ia = { 1, };
    }

} {PASS}
Test Case: 10.6-syntax-6
array initializers may nest

Expected Result: PASS

Regression Test:

tcltest::test 10.6-syntax-6 { array initializers may nest } {
    
    empty_main T106i6 {
        int[][] iaa = { {1}, {2} };
    }

} {PASS}
Test Case: 10.6-type-1
expressions in array initializer must be assignment compatible with array type

Expected Result: PASS

Regression Test:

tcltest::test 10.6-type-1 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t1 {
        short s = 1;
        int[] ia = { s, '1' };
    }

} {PASS}
Test Case: 10.6-type-2
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 10.6-type-2 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t2 {
        int[] ia = { 1L };
    }

} {FAIL}
Test Case: 10.6-type-3
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 10.6-type-3 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t3 {
        int[] ia = { new Object() };
    }

} {FAIL}
Test Case: 10.6-type-4
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 10.6-type-4 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t4 {
        int[] ia = { null };
    }

} {FAIL}
Test Case: 10.6-type-5
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 10.6-type-5 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t5 {
        int[] ia = { System.out.println() };
    }

} {FAIL}
Test Case: 10.6-type-6
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 10.6-type-6 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t6 {
        Object[] oa = { 1 };
    }

} {FAIL}
Test Case: 10.6-type-7
expressions in array initializer must be assignment compatible with array type

Expected Result: PASS

Regression Test:

tcltest::test 10.6-type-7 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t7 {
        Object[] oa = { new Object() };
    }

} {PASS}
Test Case: 10.6-type-8
expressions in array initializer must be assignment compatible with array type

Expected Result: PASS

Regression Test:

tcltest::test 10.6-type-8 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t8 {
        Object[] oa = { null };
    }

} {PASS}
Test Case: 10.6-type-9
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 10.6-type-9 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t9 {
        Object[] oa = { System.out.println() };
    }

} {FAIL}
Test Case: 10.6-type-10
expressions in array initializer must be assignment compatible with array type

Expected Result: PASS

Regression Test:

tcltest::test 10.6-type-10 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t10 {
        int[][] iaa = { {1} };
    }

} {PASS}
Test Case: 10.6-type-11
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 10.6-type-11 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t11 {
        int[][] iaa = { 1 };
    }

} {FAIL}
Test Case: 10.6-type-12
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 10.6-type-12 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t12 {
        int[][] iaa = { { {1} } };
    }

} {FAIL}
Test Case: 10.6-type-13
expressions in array initializer must be assignment compatible with array type

Expected Result: PASS

Regression Test:

tcltest::test 10.6-type-13 { expressions in array initializer must be
        assignment compatible with array type } {
    
    empty_main T106t13 {
        int[][] iaa = { {1, 2}, null };
    }

} {PASS}

13.1

Directory : tests/jls/binary-compatibility/form-of-binary


Test Case: 13.1-constructor-1
Constructors in a non-private non-static nested class have an additional first parameter in the binary, for the enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 13.1-constructor-1 { Constructors in a non-private non-static
        nested class have an additional first parameter in the binary, for
        the enclosing class } {
    
    empty_class T131c1a {
	class Inner {}
    }
    delete T131c1a.java
    compile -classpath . [saveas T131c1b.java {
class T131c1b {
    Object o = new T131c1a().new Inner();
}
    }]

} {PASS}
Test Case: 13.1-covariance-1
Class files may have more than one method with the same parameter types but different return types. In particular, legal .class files compiled with gj (generic java) or the JSR14 beta compiler (the prequel to the expected JDK 1.5) allow covariance in return types, and do so by compiling synthetic bridge methods. Here, we check that the compiler is able to gracefully handle covariance when loading a .class file, even though this is normally a binary incompatible change.

Expected Result: PASS

Regression Test:

tcltest::test 13.1-covariance-1 { Class files may have more than one method
        with the same parameter types but different return types. In
        particular, legal .class files compiled with gj (generic java) or the
        JSR14 beta compiler (the prequel to the expected JDK 1.5) allow
        covariance in return types, and do so by compiling synthetic bridge
        methods. Here, we check that the compiler is able to gracefully handle
        covariance when loading a .class file, even though this is normally
        a binary incompatible change. } {
    
    compile [saveas T131co1a.java {
class T131co1a {
    T131co1b m() { return null; }
}
class T131co1b extends T131co1a {
    T131co1b m() { return null; }
}
class T131co1c extends T131co1b {
    { m(); }
}
    }]
    delete T131co1a.java
    compile -classpath . [saveas T131co1a.java {
class T131co1a {
    T131co1a m() { return null; } // change return type to a instead of b
}
// class T131co1b extends T131co1a {
//     T131co1b m() { return null; } // now covariant!
    // if this class were uncommented and compiled by gj, it would also have
    // /*synthetic*/ T131co1a m() { return /*T131co1b*/m(); }
// }
class T131co1c extends T131co1b {
    { m(); }
}
    }]

} {PASS}
Test Case: 13.1-covariance-2
Class files may have more than one method with the same parameter types but different return types. In particular, legal .class files compiled with gj (generic java) or the JSR14 beta compiler (the prequel to the expected JDK 1.5) allow covariance in return types, and do so by compiling synthetic bridge methods. Here, we check that the compiler is able to gracefully handle covariance when loading a .class file, even though this is normally a binary incompatible change.

Expected Result: PASS

Regression Test:

tcltest::test 13.1-covariance-2 { Class files may have more than one method
        with the same parameter types but different return types. In
        particular, legal .class files compiled with gj (generic java) or the
        JSR14 beta compiler (the prequel to the expected JDK 1.5) allow
        covariance in return types, and do so by compiling synthetic bridge
        methods. Here, we check that the compiler is able to gracefully handle
        covariance when loading a .class file, even though this is normally
        a binary incompatible change. } {
    
    compile [saveas T131co2a.java {
class T131co2a {
    T131co2b[] m() { return null; }
}
class T131co2b extends T131co2a {
    T131co2b[] m() { return null; }
}
class T131co2c extends T131co2b {
    { m(); }
}
    }]
    delete T131co2a.java
    compile -classpath . [saveas T131co2a.java {
class T131co2a {
    T131co2a[] m() { return null; } // change return type to a[] instead of b[]
}
// class T131co2b extends T131co2a {
//     T131co2b[] m() { return null; } // now covariant!
    // if this class were uncommented and compiled by gj, it would also have
    // /*synthetic*/ T131co2a[] m() { return /*T131co2b*/m(); }
// }
class T131co2c extends T131co2b {
    { m(); }
}
    }]

} {PASS}
Test Case: 13.1-covariance-3
Class files may have more than one method with the same parameter types but different return types. In particular, legal .class files compiled with gj (generic java) or the JSR14 beta compiler (the prequel to the expected JDK 1.5) allow covariance in return types, and do so by compiling synthetic bridge methods. Here, we check that the compiler is able to gracefully handle covariance when loading a .class file, even though this is normally a binary incompatible change.

Expected Result: PASS

Regression Test:

tcltest::test 13.1-covariance-3 { Class files may have more than one method
        with the same parameter types but different return types. In
        particular, legal .class files compiled with gj (generic java) or the
        JSR14 beta compiler (the prequel to the expected JDK 1.5) allow
        covariance in return types, and do so by compiling synthetic bridge
        methods. Here, we check that the compiler is able to gracefully handle
        covariance when loading a .class file, even though this is normally
        a binary incompatible change. } {
    
    compile [saveas T131co3a.java {
interface T131co3a {
    T131co3b m();
}
interface T131co3b extends T131co3a {
    T131co3b m();
}
abstract class T131co3c implements T131co3b {
    { m(); }
}
    }]
    delete T131co3a.java
    compile -classpath . [saveas T131co3a.java {
interface T131co3a {
    T131co3a m(); // change return type to a instead of b
}
// interface T131co3b extends T131co3a {
//     T131co3b m(); // now covariant!
// }
abstract class T131co3c implements T131co3b {
    // if b were uncommented and compiled by gj, this class would also have
    // /*synthetic*/ T131co3a m() { return /*T131co3b*/m(); }
    // Note that calling a.m() may fail when this class is not compiled by
    // gj, as the bridge method is missing; but that is a different problem.
    { m(); }
}
    }]

} {PASS}

14.3

Directory : tests/jls/blocks-and-statements/local-class-declarations


Test Case: 14.3-1
tests local class declarations in both static and instance methods

Expected Result: PASS

Regression Test:

tcltest::test 14.3-1 { tests local class declarations in both static and
        instance methods } {
    
    empty_class TestLCD {
        static Object static_method() {
            abstract class Foo { }
            return new Foo() { };
        }
        Object instance_method() {
            abstract class Foo { }
            return new Foo() { };
        }
    }

} {PASS}
Test Case: 14.3-scope-1
The scope of a local class includes its declaration

Expected Result: FAIL

Regression Test:

tcltest::test 14.3-scope-1 { The scope of a local class includes its
        declaration } {
    
    empty_main T143s1 {
	class Local extends Local {}
    }

} {FAIL}
Test Case: 14.3-scope-2
The scope of a local class starts at its declaration, not before

Expected Result: FAIL

Regression Test:

tcltest::test 14.3-scope-2 { The scope of a local class starts at its
        declaration, not before } {
    
    empty_main T143s2 {
	new Local();
	class Local {}
    }

} {FAIL}
Test Case: 14.3-scope-3
The scope of a local class continues to the end of the current block

Expected Result: PASS

Regression Test:

tcltest::test 14.3-scope-3 { The scope of a local class continues to the end
        of the current block } {
    
    empty_main T143s3 {
	class Local {
	    { new Local() {}; }
	}
	new Local();
	{
	    new Local();
	}
    }

} {PASS}
Test Case: 14.3-scope-4
The scope of a local class continues to the end of the current block

Expected Result: FAIL

Regression Test:

tcltest::test 14.3-scope-4 { The scope of a local class continues to the end
        of the current block } {
    
    empty_main T143s4 {
	class Local {}
	class Local {}
    }

} {FAIL}
Test Case: 14.3-scope-5
The scope of a local class continues to the end of the current block

Expected Result: FAIL

Regression Test:

tcltest::test 14.3-scope-5 { The scope of a local class continues to the end
        of the current block } {
    
    empty_main T143s5 {
	class Local {}
	{
	    class Local {}
	}
    }

} {FAIL}
Test Case: 14.3-scope-6
The scope of a local class continues to the end of the current block, but may be shadowed in other classes

Expected Result: PASS

Regression Test:

tcltest::test 14.3-scope-6 { The scope of a local class continues to the end
        of the current block, but may be shadowed in other classes } {
    
    empty_main T143s6 {
	class Local {}
	{
	    new Object() {
		class Local {}
	    };
	}
	new Object() {
	    class Local {}
	};
    }

} {PASS}
Test Case: 14.3-scope-7
The scope of a local class continues to the end of the current block

Expected Result: PASS

Regression Test:

tcltest::test 14.3-scope-7 { The scope of a local class continues to the end
        of the current block } {
    
    empty_main T143s7 {
	{
	    class Local {}
	}
	class Local {}
    }

} {PASS}
Test Case: 14.3-scope-8
Example of scoping, minus failures

Expected Result: PASS

Regression Test:

tcltest::test 14.3-scope-8 { Example of scoping, minus failures } {
    
    empty_class T143s8 {
	class Cyclic {}
	void foo() {
	    new Cyclic(); // create a T143s8.Cyclic
	    {
		class Local{};
		{
		    class AnotherLocal {
			void bar() {
			    class Local {}; // ok
			}
		    }
		}
	    }
	    class Local{}; // ok, not in scope of prior Local
	}
    }

} {PASS}
Test Case: 14.3-scope-9
The scope of a local class starts at its declaration, not before

Expected Result: PASS

Regression Test:

tcltest::test 14.3-scope-9 { The scope of a local class starts at its
        declaration, not before } {
    
    empty_class T143s9 {
	class Local {
	    static final int i = 1;
	}
	void m(int j) {
	    switch (j) {
		case 0:
		case (1 == Local.i ? 1 : 0):
	    }
	    class Local {
		static final int i = 2;
	    }
	    switch (j) {
		case 0:
		case (2 == Local.i ? 1 : 0):
	    }
	}
    }

} {PASS}
Test Case: 14.3-scope-10
While not well-specified, the scope of a local class in a switch statement extends to the end of the switch

Expected Result: PASS

Regression Test:

tcltest::test 14.3-scope-10 { While not well-specified, the scope of a local
        class in a switch statement extends to the end of the switch } {
    
    empty_class T143s10 {
	void m(int i) {
	    switch (i) {
		case 0:
		class Local {}
		break;
		case 1:
		new Local();
	    }
	}
    }

} {PASS}
Test Case: 14.3-scope-11
While not well-specified, the scope of a local class in a switch statement extends to the end of the switch

Expected Result: FAIL

Regression Test:

tcltest::test 14.3-scope-11 { While not well-specified, the scope of a local
        class in a switch statement extends to the end of the switch } {
    
    empty_class T143s11 {
	void m(int i) {
	    switch (i) {
		case 0:
		class Local {}
		break;
		case 1:
		class Local {}
	    }
	}
    }

} {FAIL}

14.4.2

Directory : tests/jls/blocks-and-statements/local-variable-declaration-statements/scope


Test Case: 14.4.2-valid-scope-1
The scope of a local variable declarator includes its own initializer and further declarations to right

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-valid-scope-1 { The scope of a local variable declarator
        includes its own initializer and further declarations to right } {
    
    empty_main T1442vs1 {
        int i = (i = 1) + i;
    }

} {PASS}
Test Case: 14.4.2-valid-scope-2
The scope of a local variable declarator includes its own initializer and further declarations to right

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-valid-scope-2 { The scope of a local variable declarator
        includes its own initializer and further declarations to right } {
    
    empty_main T1442vs2 {
        int i = 1, j = i;
    }

} {PASS}
Test Case: 14.4.2-valid-scope-3
The scope of a local variable declarator includes its own initializer and further declarations to right

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-valid-scope-3 { The scope of a local variable declarator
        includes its own initializer and further declarations to right } {
    
    empty_main T1442vs3 {
        int i;
        i = 1;
    }

} {PASS}
Test Case: 14.4.2-valid-scope-4
The scope of a local variable declarator includes its own initializer and further declarations to right

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-valid-scope-4 { The scope of a local variable declarator
        includes its own initializer and further declarations to right } {
    
    empty_main T1442vs4 {
        { int i; }
        int i;
    }

} {PASS}
Test Case: 14.4.2-valid-scope-5
The scope of a local variable declarator includes its own initializer and further declarations to right

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-valid-scope-5 { The scope of a local variable declarator
        includes its own initializer and further declarations to right } {
    
    empty_main T1442vs5 {
        for (int i = (i = 1) + i; ; );
    }

} {PASS}
Test Case: 14.4.2-valid-scope-6
The scope of a local variable declarator includes its own initializer and further declarations to right

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-valid-scope-6 { The scope of a local variable declarator
        includes its own initializer and further declarations to right } {
    
    empty_main T1442vs6 {
        for (int i = 1, j = i; ; );
    }

} {PASS}
Test Case: 14.4.2-valid-scope-7
The scope of a local variable declarator includes its own initializer and further declarations to right

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-valid-scope-7 { The scope of a local variable declarator
        includes its own initializer and further declarations to right } {
    
    empty_main T1442vs7 {
        for (int i; ; i = 1);
    }

} {PASS}
Test Case: 14.4.2-valid-scope-8
The scope of a local variable declarator includes its own initializer and further declarations to right

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-valid-scope-8 { The scope of a local variable declarator
        includes its own initializer and further declarations to right } {
    
    empty_main T1442vs8 {
        for (int i = 1; i < 1; );
        for (int i; ; );
    }

} {PASS}
Test Case: 14.4.2-invalid-scope-1
A local variable cannot be redeclared

Expected Result: FAIL

Regression Test:

tcltest::test 14.4.2-invalid-scope-1 { A local variable cannot be redeclared } {
    
    empty_main T1442is1 {
        int i;
        int i;
    }

} {FAIL}
Test Case: 14.4.2-invalid-scope-2
A local variable cannot be redeclared

Expected Result: FAIL

Regression Test:

tcltest::test 14.4.2-invalid-scope-2 { A local variable cannot be redeclared } {
    
    empty_main T1442is2 {
        int i;
        for (int i; ; );
    }

} {FAIL}
Test Case: 14.4.2-invalid-scope-3
A local variable cannot be redeclared

Expected Result: FAIL

Regression Test:

tcltest::test 14.4.2-invalid-scope-3 { A local variable cannot be redeclared } {
    
    empty_main T1442is3 {
        int i;
        try {
            throw new Exception();
        } catch (Exception i) {
        }
    }

} {FAIL}
Test Case: 14.4.2-invalid-scope-4
A local variable cannot be redeclared

Expected Result: FAIL

Regression Test:

tcltest::test 14.4.2-invalid-scope-4 { A local variable cannot be redeclared } {
    
    empty_class T1442is4 {
        void foo(int i) {
            int i;
        }
    }

} {FAIL}
Test Case: 14.4.2-invalid-scope-5
A local variable cannot be redeclared

Expected Result: FAIL

Regression Test:

tcltest::test 14.4.2-invalid-scope-5 { A local variable cannot be redeclared } {
    
    empty_main T1442is5 {
        for (int i; ; ) {
            int i;
        }
    }

} {FAIL}
Test Case: 14.4.2-invalid-scope-6
A local variable cannot be redeclared

Expected Result: FAIL

Regression Test:

tcltest::test 14.4.2-invalid-scope-6 { A local variable cannot be redeclared } {
    
    empty_main T1442is6 {
        try {
            throw new Exception();
        } catch (Exception i) {
            int i;
        }
    }

} {FAIL}
Test Case: 14.4.2-shadow-1
A local variable may shadow member variables

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-shadow-1 { A local variable may shadow member variables } {
    
    empty_class T1442s1 {
        Object i;
        void foo() {
            i = new Object();
            int i;
            i = 1;
        }
    }

} {PASS}
Test Case: 14.4.2-shadow-2
A local variable may shadow member variables

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-shadow-2 { A local variable may shadow member variables } {
    
    empty_class T1442s2 {
        static Object i;
        void foo() {
            i = new Object();
            int i;
            i = 1;
        }
    }

} {PASS}
Test Case: 14.4.2-shadow-3
A local variable may shadow member variables

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-shadow-3 { A local variable may shadow member variables } {
    
    empty_class T1442s3 {
        static Object i;
        static void foo() {
            i = new Object();
            int i;
            i = 1;
        }
    }

} {PASS}
Test Case: 14.4.2-shadow-4
A local variable may be shadowed by a member

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-shadow-4 { A local variable may be shadowed by a member } {
    
    empty_main T1442s4 {
        Object i;
        new Object() {
            int i;
        };
    }

} {PASS}
Test Case: 14.4.2-shadow-5
A local variable may be shadowed by a local

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-shadow-5 { A local variable may be shadowed by a local } {
    
    empty_main T1442s5 {
        final Object i = null;
        new Object() {
            {
                Object o = i;
                int i;
                i = 1;
            }
        };
    }

} {PASS}
Test Case: 14.4.2-shadow-6
A local variable may be shadowed by a local

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-shadow-6 { A local variable may be shadowed by a local } {
    
    empty_main T1442s6 {
        final Object i = null;
        new Object() {
            {
                Object o = i;
                for (int i = 1; i < 1; );
                o = i;
            }
        };
    }

} {PASS}
Test Case: 14.4.2-shadow-7
A local variable may be shadowed by a local

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-shadow-7 { A local variable may be shadowed by a local } {
    
    empty_main T1442s7 {
        final int i = 1;
        new Object() {
            {
                try {
                    int j = i;
                    throw new Exception();
                } catch (Exception i) {
                }
            }
        };
    }

} {PASS}
Test Case: 14.4.2-shadow-8
A local variable may be shadowed by a parameter

Expected Result: PASS

Regression Test:

tcltest::test 14.4.2-shadow-8 { A local variable may be shadowed by a
        parameter } {
    
    empty_main T1442s8 {
        final Object i = null;
        new Object() {
            Object o = i;
            void foo(int i) {
                i = 1;
            }
        };
    }

} {PASS}
Test Case: 14.4.2-shadow-9
A local variable may be shadowed by an inherited member

Expected Result: OK

Regression Test:

tcltest::test 14.4.2-shadow-9 { A local variable may be shadowed by an inherited
        member } {
    
    ok_pass_or_warn [empty_class T1442s9 {
        void foo(final byte b) {
            class One {
                final int i = 1;
            }
            Object i;
            class Two extends One {
                {
                    switch (b) {
                        case 0:
                        case (i == 1) ? 1 : 0:
                    }
                }
            }
        }
    }]

} {OK}

14.7

Directory : tests/jls/blocks-and-statements/labeled-statements


Test Case: 14.7-scope-1
The scope of a label is its contained statement

Expected Result: PASS

Regression Test:

tcltest::test 14.7-scope-1 { The scope of a label is its contained statement } {
    
    empty_main T147scope1 {
        int i, j;
        label: i = 1;
        label: j = 1;
    }

} {PASS}
Test Case: 14.7-shadow-1
Labels cannot shadow another label in the same enclosing method, constructor, or initializer

Expected Result: FAIL

Regression Test:

tcltest::test 14.7-shadow-1 { Labels cannot shadow another label in the
        same enclosing method, constructor, or initializer } {
    
    empty_main T147shadow1 {
        int i;
        test: {
            test: i = 1;
        }
    }

} {FAIL}
Test Case: 14.7-shadow-2
Labels cannot shadow another label in the same enclosing method, constructor, or initializer

Expected Result: FAIL

Regression Test:

tcltest::test 14.7-shadow-2 { Labels cannot shadow another label in the
        same enclosing method, constructor, or initializer } {
    
    empty_main T147shadow2 {
        int i;
        test: test: i = 1;
    }

} {FAIL}
Test Case: 14.7-shadow-3
Labels cannot shadow another label in the same immediately enclosing method, constructor, or initializer. Here, the two labels are in different immediately enclosing methods.

Expected Result: PASS

Regression Test:

tcltest::test 14.7-shadow-3 { Labels cannot shadow another label in the same
        immediately enclosing method, constructor, or initializer. Here, the
        two labels are in different immediately enclosing methods.} {
    
    empty_main T147shadow3 {
        test: new Object() {
            void foo() {
                int i;
                test: i = 1;
            }
        };
    }

} {PASS}
Test Case: 14.7-same-1
Labels can share same identifier as package

Expected Result: PASS

Regression Test:

tcltest::test 14.7-same-1 { Labels can share same identifier as package } {
    
    compile [saveas test/T147same1.java {
package test;
class T147same1 {
    void foo() {
        int i;
        test: i = 1;
        new test.T147same1();
    }
}
    }]

} {PASS}
Test Case: 14.7-same-2
Labels can share same identifier as class

Expected Result: PASS

Regression Test:

tcltest::test 14.7-same-2 { Labels can share same identifier as class } {
    
    empty_main T147same2 {
        int i;
        T147same2: i = 1;
        new T147same2();
    }

} {PASS}
Test Case: 14.7-same-3
Labels can share same identifier as interface

Expected Result: PASS

Regression Test:

tcltest::test 14.7-same-3 { Labels can share same identifier as interface } {
    
    empty_main T147same3 {
        int i;
        Cloneable: i = 1;
        new Cloneable() {};
    }

} {PASS}
Test Case: 14.7-same-4
Labels can share same identifier as method

Expected Result: PASS

Regression Test:

tcltest::test 14.7-same-4 { Labels can share same identifier as method } {
    
    empty_class T147same4 {
        void test() {}
        void foo() {
            int i;
            test: i = 1;
            test();
        }
    }

} {PASS}
Test Case: 14.7-same-5
Labels can share same identifier as field

Expected Result: PASS

Regression Test:

tcltest::test 14.7-same-5 { Labels can share same identifier as field } {
    
    empty_class T147same5 {
        int test;
        void foo() {
            int i;
            test: i = 1;
            test = 1;
        }
    }

} {PASS}
Test Case: 14.7-same-6
Labels can share same identifier as parameter

Expected Result: PASS

Regression Test:

tcltest::test 14.7-same-6 { Labels can share same identifier as parameter } {
    
    empty_class T147same6 {
        void foo(String[] args) {
            int i;
            args: i = 1;
            i = args.length;
        }
    }

} {PASS}
Test Case: 14.7-same-7
Labels can share same identifier as local variable

Expected Result: PASS

Regression Test:

tcltest::test 14.7-same-7 { Labels can share same identifier as
        local variable } {
    
    empty_main T147same7 {
        int test, i;
        test: i = 1;
        test = 1;
    }

} {PASS}
Test Case: 14.7-enclosed-1
Labels must have an enclosed statement

Expected Result: FAIL

Regression Test:

tcltest::test 14.7-enclosed-1 { Labels must have an enclosed statement } {
    
    empty_main T147enclosed1 {
        test:
    }

} {FAIL}
Test Case: 14.7-enclosed-2
Labels must have an enclosed statement

Expected Result: FAIL

Regression Test:

tcltest::test 14.7-enclosed-2 { Labels must have an enclosed statement } {
    
    empty_main T147enclosed2 {
        test: int i;
    }

} {FAIL}
Test Case: 14.7-enclosed-3
Labels must have an enclosed statement

Expected Result: FAIL

Regression Test:

tcltest::test 14.7-enclosed-3 { Labels must have an enclosed statement } {
    
    empty_main T147enclosed3 {
        test: class Foo {}
    }

} {FAIL}
Test Case: 14.7-enclosed-4
Labels must have an enclosed statement

Expected Result: PASS

Regression Test:

tcltest::test 14.7-enclosed-4 { Labels must have an enclosed statement } {
    
    empty_main T147enclosed4 {
        test: {}
    }

} {PASS}
Test Case: 14.7-enclosed-5
Labels must have an enclosed statement

Expected Result: PASS

Regression Test:

tcltest::test 14.7-enclosed-5 { Labels must have an enclosed statement } {
    
    empty_main T147enclosed5 {
        test: ;
    }

} {PASS}
Test Case: 14.7-ident-1
Labels must be identifiers

Expected Result: FAIL

Regression Test:

tcltest::test 14.7-ident-1 { Labels must be identifiers } {
    
    empty_main T147ident1 {
        int i;
        1: i = 1;
    }

} {FAIL}
Test Case: 14.7-ident-2
Labels must be identifiers

Expected Result: FAIL

Regression Test:

tcltest::test 14.7-ident-2 { Labels must be identifiers } {
    
    empty_main T147ident2 {
        int i;
        "label": i = 1;
    }

} {FAIL}
Test Case: 14.7-ident-3
Labels must be identifiers

Expected Result: FAIL

Regression Test:

tcltest::test 14.7-ident-3 { Labels must be identifiers } {
    
    empty_main T147ident3 {
        int i;
        (label): i = 1;
    }

} {FAIL}
Test Case: 14.7-ident-4
Labels must be identifiers

Expected Result: FAIL

Regression Test:

tcltest::test 14.7-ident-4 { Labels must be identifiers } {
    
    empty_main T147ident4 {
        int i;
        label.a: i = 1;
    }

} {FAIL}
Test Case: 14.7-ident-5
Labels must be identifiers

Expected Result: FAIL

Regression Test:

tcltest::test 14.7-ident-5 { Labels must be identifiers } {
    
    empty_main T147ident5 {
        int i;
        int: i = 1;
    }

} {FAIL}
Test Case: 14.7-ident-6
Labels must be identifiers, including unicode

Expected Result: PASS

Regression Test:

tcltest::test 14.7-ident-6 { Labels must be identifiers, including unicode } {
    
    empty_main T147ident6 {
        int i;
        \u0061\u003a break a;
        b: break \u0062;
    }

} {PASS}

14.9

Directory : tests/jls/blocks-and-statements/if-statement


Test Case: 14.9-invalid-syntax-1
Expression have ()

Expected Result: FAIL

Regression Test:

tcltest::test 14.9-invalid-syntax-1 { Expression have () } {
    
    empty_main T149is1 {
        if true
            ;
    }

} {FAIL}
Test Case: 14.9-invalid-syntax-2
Expression must be of type boolean

Expected Result: FAIL

Regression Test:

tcltest::test 14.9-invalid-syntax-2 { Expression must be of type boolean } {
    
    empty_main T149is2 {
        if (0)
            ;
    }

} {FAIL}
Test Case: 14.9-invalid-syntax-3
else without Statement is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 14.9-invalid-syntax-3 { else without Statement is invalid } {
    
    empty_main T149is3 {
        if (true)
            ;
        else
    }

} {FAIL}
Test Case: 14.9-invalid-syntax-4
Multiple if Statement are invalid

Expected Result: FAIL

Regression Test:

tcltest::test 14.9-invalid-syntax-4 { Multiple if Statement are invalid } {
    
    empty_main T149is4 {
        if (true)
            ;
            ;
        else
            ;
    }

} {FAIL}
Test Case: 14.9-expression-evaluation-1
constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-1 {constant expression} {
    
    empty_main T149ee1 {
        if (true)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-2
constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-2 {constant expression} {
    
    empty_main T149ee2 {
        if (false == true)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-3
non-constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-3 {non-constant expression} {
    
    empty_main T149ee3 {
        final boolean aconst = false;
        boolean anonconst = true;

        if (aconst == anonconst)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-4
constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-4 {constant expression} {
    
    empty_main T149ee4 {
        if ((byte) 0 == (byte) 1)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-5
non-constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-5 {non-constant expression} {
    
    empty_main T149ee5 {
        final byte aconst = 0;
        byte anonconst = 1;

        if (anonconst == aconst)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-6
constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-6 {constant expression} {
    
    empty_main T149ee6 {
        if ((short) 0 == (short) 1)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-7
non-constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-7 {non-constant expression} {
    
    empty_main T149ee7 {
        final short aconst = 0;
        short anonconst = 1;

        if (anonconst == aconst)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-8
constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-8 {constant expression} {
    
    empty_main T149ee8 {
        if ((char) 0 == (char) 1)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-9
non-constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-9 {non-constant expression} {
    
    empty_main T149ee9 {
        final char aconst = 0;
        char anonconst = 1;

        if (anonconst == aconst)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-10
constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-10 {constant expression} {
    
    empty_main T149ee10 {
        if (0 == 1)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-11
non-constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-11 {non-constant expression} {
    
    empty_main T149ee11 {
        final int aconst = 0;
        int anonconst = 1;

        if (anonconst == aconst)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-12
constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-12 {constant expression} {
    
    empty_main T149ee12 {
        if (0L == 1L)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-13
non-constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-13 {non-constant expression} {
    
    empty_main T149ee13 {
        final long aconst = 0L;
        long anonconst = 1L;

        if (anonconst == aconst)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-14
constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-14 {constant expression} {
    
    empty_main T149ee14 {
        if (0F == 1F)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-15
non-constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-15 {non-constant expression} {
    
    empty_main T149ee15 {
        final float aconst = 0F;
        float anonconst = 1F;

        if (anonconst == aconst)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-16
constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-16 {constant expression} {
    
    empty_main T149ee16 {
        if (0D == 1D)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-17
non-constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-17 {non-constant expression} {
    
    empty_main T149ee17 {
        final double aconst = 0D;
        double anonconst = 1D;

        if (anonconst == aconst)
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-18
constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-18 {constant expression} {
    
    empty_main T149ee18 {
        if ("hi" == "there")
            ;
    }

} {PASS}
Test Case: 14.9-expression-evaluation-19
non-constant expression

Expected Result: PASS

Regression Test:

tcltest::test 14.9-expression-evaluation-19 {non-constant expression} {
    
    empty_main T149ee19 {
        final String aconst = "hi";
        String anonconst = "there";

        if (anonconst == aconst)
            ;
    }

} {PASS}

14.10

Directory : tests/jls/blocks-and-statements/switch-statement


Test Case: 14.10-invalid-syntax-1
SwitchStatement must have () around Expression

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-invalid-syntax-1 { SwitchStatement must have () around Expression } {
    
    compile [saveas T1410is1.java {
class T1410is1 {
    void foo(int i) {
        switch i {
            default:
        }
    }
}
    }]

} {FAIL}
Test Case: 14.10-invalid-syntax-2
SwitchBlock must have {} around statements

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-invalid-syntax-2 { SwitchBlock must have {} around statements } {
    
    compile [saveas T1410is2.java {
class T1410is2 {
    void foo(int i) {
        switch (i)
            default:
    }
}
    }]

} {FAIL}
Test Case: 14.10-invalid-syntax-3
SwitchBlockStatementGroup must begin with a SwitchLabel

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-invalid-syntax-3 { SwitchBlockStatementGroup must begin with
         a SwitchLabel} {
    
    compile [saveas T1410is3.java {
class T1410is3 {
    void foo(int i) {
        switch (i) {
            i = 0;
        }
    }
}
    }]

} {FAIL}
Test Case: 14.10-invalid-syntax-4
Duff's device is not valid

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-invalid-syntax-4 { Duff's device is not valid } {
    
    compile [saveas T1410is4.java {
class T1410is4 {
    void foo(int n) {
        int q = (n+7)/8;
        switch (n%8) {
            case 0:         do {    foo();          // Great C hack, Tom,
            case 7:                 foo();          // but it's not valid here.
            case 6:                 foo();
            case 5:                 foo();
            case 4:                 foo();
            case 3:                 foo();
            case 2:                 foo();
            case 1:                 foo();
                            } while (--q >= 0);
        }
    }
}
    }]

} {FAIL}
Test Case: 14.10-invalid-syntax-5
Jikes 1.17 accepts a cute typo

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-invalid-syntax-5 { Jikes 1.17 accepts a cute typo } {
    
    empty_class T1410is5 {
	void m(int i) {
	    switch (i) {
		befault:
	    }
	}
    }

} {FAIL}
Test Case: 14.10-valid-1
SwitchBlockStatementGroups and SwitchLabels are optional inside a SwitchBlock

Expected Result: PASS

Regression Test:

tcltest::test 14.10-valid-1 { SwitchBlockStatementGroups and SwitchLabels are
        optional inside a SwitchBlock } {
    
    switch_labels T1410v1 int {}

} {PASS}
Test Case: 14.10-valid-2
default SwitchLabel by itself is acceptable

Expected Result: PASS

Regression Test:

tcltest::test 14.10-valid-2 { default SwitchLabel by itself is acceptable } {
    
    switch_labels T1410v2 int {default:}

} {PASS}
Test Case: 14.10-invalid-type-1
Expression type must be char, byte, short, or int

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-invalid-type-1 { Expression type must be char, byte, short, or int } {
    
    switch_labels T1410it1 boolean

} {FAIL}
Test Case: 14.10-invalid-type-2
Expression type must be char, byte, short, or int

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-invalid-type-2 { Expression type must be char, byte, short, or int } {
    
    switch_labels T1410it2 float

} {FAIL}
Test Case: 14.10-invalid-type-3
Expression type must be char, byte, short, or int

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-invalid-type-3 { Expression type must be char, byte, short, or int } {
    
    switch_labels T1410it3 double

} {FAIL}
Test Case: 14.10-invalid-type-4
Expression type must be char, byte, short, or int

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-invalid-type-4 { Expression type must be char, byte, short, or int } {
    
    switch_labels T1410it4 long

} {FAIL}
Test Case: 14.10-invalid-type-5
Expression type must be char, byte, short, or int

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-invalid-type-5 { Expression type must be char, byte, short, or int } {
    
    switch_labels T1410it5 Object

} {FAIL}
Test Case: 14.10-invalid-type-6
Expression type must be char, byte, short, or int

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-invalid-type-6 { Expression type must be char, byte, short, or int } {
    
    switch_labels T1410it6 String

} {FAIL}
Test Case: 14.10-valid-type-1
Expression type must be char, byte, short, or int

Expected Result: PASS

Regression Test:

tcltest::test 14.10-valid-type-1 { Expression type must be char, byte, short, or int } {
    
    switch_labels T1410vt1 char

} {PASS}
Test Case: 14.10-valid-type-2
Expression type must be char, byte, short, or int

Expected Result: PASS

Regression Test:

tcltest::test 14.10-valid-type-2 { Expression type must be char, byte, short, or int } {
    
    switch_labels T1410vt2 byte

} {PASS}
Test Case: 14.10-valid-type-3
Expression type must be char, byte, short, or int

Expected Result: PASS

Regression Test:

tcltest::test 14.10-valid-type-3 { Expression type must be char, byte, short, or int } {
    
    switch_labels T1410vt3 short

} {PASS}
Test Case: 14.10-valid-type-4
Expression type must be char, byte, short, or int

Expected Result: PASS

Regression Test:

tcltest::test 14.10-valid-type-4 { Expression type must be char, byte, short, or int } {
    
    switch_labels T1410vt4 int

} {PASS}
Test Case: 14.10-switchlabel-1
case label must have a ConstantExpression

Expected Result: PASS

Regression Test:

tcltest::test 14.10-switchlabel-1 { case label must have a ConstantExpression } {
    
    switch_labels T1410sl1 int {case 0: case 1:}

} {PASS}
Test Case: 14.10-switchlabel-2
case label must have a ConstantExpression, i++ is not a constant expression as defined by 15.28

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-switchlabel-2 { case label must have a ConstantExpression,
        i++ is not a constant expression as defined by 15.28} {
    
    switch_labels T1410sl2 int {case (i++):}

} {FAIL}
Test Case: 14.10-switchlabel-3
case label must have a ConstantExpression, the additive operator - produces a constant expression (see 15.28)

Expected Result: PASS

Regression Test:

tcltest::test 14.10-switchlabel-3 { case label must have a ConstantExpression,
        the additive operator - produces a constant expression (see 15.28)} {
    
    switch_labels T1410sl3 int {case 0: case (2-1): case (3-1): default:}

} {PASS}
Test Case: 14.10-assignable-1
ConstantExpression must be assignable to Expression

Expected Result: PASS

Regression Test:

tcltest::test 14.10-assignable-1 { ConstantExpression must be assignable to Expression } {
    
    switch_labels T1410a1 int {case 0:}

} {PASS}
Test Case: 14.10-assignable-2
ConstantExpression must be assignable to Expression

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-assignable-2 { ConstantExpression must be assignable to Expression } {
    
    switch_labels T1410a2 int {case 0L:}

} {FAIL}
Test Case: 14.10-assignable-3
ConstantExpression must be assignable to Expression

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-assignable-3 { ConstantExpression must be assignable to Expression } {
    
    switch_labels T1410a3 int {case 0.0D:}

} {FAIL}
Test Case: 14.10-assignable-4
ConstantExpression must be assignable to Expression

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-assignable-4 { ConstantExpression must be assignable to Expression } {
    
    switch_labels T1410a4 int {case true:}

} {FAIL}
Test Case: 14.10-assignable-5
ConstantExpression must be assignable to Expression

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-assignable-5 { ConstantExpression must be assignable to Expression } {
    
    switch_labels T1410a5 byte {case 128:}

} {FAIL}
Test Case: 14.10-assignable-6
ConstantExpression must be assignable to Expression

Expected Result: PASS

Regression Test:

tcltest::test 14.10-assignable-6 { ConstantExpression must be assignable to Expression } {
    
    switch_labels T1410a6 byte {case 127:}

} {PASS}
Test Case: 14.10-assignable-7
ConstantExpression must be assignable to Expression

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-assignable-7 { ConstantExpression must be assignable to Expression } {
    
    switch_labels T1410a7 int {case null:}

} {FAIL}
Test Case: 14.10-assignable-8
ConstantExpression must be assignable to Expression

Expected Result: PASS

Regression Test:

tcltest::test 14.10-assignable-8 { ConstantExpression must be assignable to Expression } {
    
    switch_labels T1410a8 byte {case (short) 1:}

} {PASS}
Test Case: 14.10-assignable-9
ConstantExpression must be assignable to Expression

Expected Result: PASS

Regression Test:

tcltest::test 14.10-assignable-9 { ConstantExpression must be assignable to Expression } {
    
    switch_labels T1410a9 byte {case '1':}

} {PASS}
Test Case: 14.10-assignable-10
ConstantExpression must be assignable to Expression

Expected Result: PASS

Regression Test:

tcltest::test 14.10-assignable-10 { ConstantExpression must be assignable to Expression } {
    
    switch_labels T1410a10 char {case (short) 1:}

} {PASS}
Test Case: 14.10-assignable-11
ConstantExpression must be assignable to Expression

Expected Result: PASS

Regression Test:

tcltest::test 14.10-assignable-11 { ConstantExpression must be assignable to Expression } {
    
    switch_labels T1410a11 short {case '1':}

} {PASS}
Test Case: 14.10-assignable-12
ConstantExpression must be assignable to Expression

Expected Result: PASS

Regression Test:

tcltest::test 14.10-assignable-12 { ConstantExpression must be assignable to Expression } {
    
    switch_labels T1410a12 char {case (byte) 1:}

} {PASS}
Test Case: 14.10-duplicate-1
No two case statements may have the same ConstantExpression value

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-duplicate-1 { No two case statements may have the same
        ConstantExpression value } {
    
    switch_labels T1410d1 int {case 0: case 1: case 0:}

} {FAIL}
Test Case: 14.10-duplicate-2
No two case statements may have the same ConstantExpression value

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-duplicate-2 { No two case statements may have the same
        ConstantExpression value } {
    
    switch_labels T1410d2 int {case 0: case 1: case (2-2):}

} {FAIL}
Test Case: 14.10-duplicate-3
No two case statements may have the same ConstantExpression value

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-duplicate-3 { No two case statements may have the same
        ConstantExpression value } {
    
    switch_labels T1410d3 int {case 0: case 1: case ((2==2) ? 0 : 2):}

} {FAIL}
Test Case: 14.10-duplicate-4
At most 1 default statement can be associated with the same switch statement

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-duplicate-4 { At most 1 default statement can be associated
        with the same switch statement } {
    
    switch_labels T1410d4 int {default: case 0: default:}

} {FAIL}
Test Case: 14.10-abrupt-completion-1
break is a valid abrupt completion

Expected Result: PASS

Regression Test:

tcltest::test 14.10-abrupt-completion-1 { break is a valid abrupt completion } {
    
    switch_labels T1410ac1 int {case 0:
                                  break;
                                case 1:
                                  break;}

} {PASS}
Test Case: 14.10-abrupt-completion-2
continue is not a valid abrupt completion

Expected Result: FAIL

Regression Test:

tcltest::test 14.10-abrupt-completion-2 { continue is not a valid abrupt completion } {
    
    switch_labels T1410ac2 int {case 0:
                                  break;
                                case 1:
                                  continue;}

} {FAIL}
Test Case: 14.10-exhaustion-1
When all 256 cases explicitly listed, the specs are unclear as to whether default is reachable

Expected Result: PASS

Regression Test:

tcltest::test 14.10-exhaustion-1 { When all 256 cases explicitly listed, the
        specs are unclear as to whether default is reachable } {
    
    switch_labels T1410e1 byte [exhaust_list] "break; default:"

} {PASS}
Test Case: 14.10-exhaustion-2
When all 256 cases explicitly listed, the specs are unclear as to whether the switch can complete normally

Expected Result: PASS

Regression Test:

tcltest::test 14.10-exhaustion-2 { When all 256 cases explicitly listed, the
        specs are unclear as to whether the switch can complete normally } {
    
    switch_labels T1410e2 byte [exhaust_list]  "throw new RuntimeException();\n        \}\n        \{System.out.println();"

} {PASS}
Test Case: 14.10-example-1
This example causes an assertion in Jikes

Expected Result: PASS

Regression Test:

tcltest::test 14.10-example-1 { This example causes an assertion in Jikes } {
    
    compile -g [saveas T1410e1.java {
class T1410e1 {
    void foo() {
        int i;
        switch (i = 1) {
            case 1:
        }
    }
}
    }]

} {PASS}

14.14

Directory : tests/jls/blocks-and-statements/break-statement


Test Case: 14.14-plain-1
plain break must occur in a loop statement or switch

Expected Result: FAIL

Regression Test:

tcltest::test 14.14-plain-1 { plain break must occur in a loop
        statement or switch } {
    
    empty_main T1414p1 {
        break;
    }

} {FAIL}
Test Case: 14.14-plain-2
plain break must occur in a loop statement or switch

Expected Result: PASS

Regression Test:

tcltest::test 14.14-plain-2 { plain break must occur in a loop
        statement or switch } {
    
    empty_main T1414p2 {
        for (int i=0; i<10; ++i)
            break;
    }

} {PASS}
Test Case: 14.14-plain-3
plain break must occur in a loop statement or switch

Expected Result: PASS

Regression Test:

tcltest::test 14.14-plain-3 { plain break must occur in a loop
        statement or switch } {
    
    empty_main T1414p3 {
        int i=0;
        while (++i<10)
            break;
    }

} {PASS}
Test Case: 14.14-plain-4
plain break must occur in a loop statement or switch

Expected Result: PASS

Regression Test:

tcltest::test 14.14-plain-4 { plain break must occur in a loop
        statement or switch } {
    
    empty_main T1414p4 {
        int i=0;
        do break;
        while (++i<10);
    }

} {PASS}
Test Case: 14.14-plain-5
plain break must occur in a loop statement or switch

Expected Result: PASS

Regression Test:

tcltest::test 14.14-plain-5 { plain break must occur in a loop
        statement or switch } {
    
    empty_main T1414p5 {
        for (int i=0; i<10; ++i) {
            break;
        }
    }

} {PASS}
Test Case: 14.14-plain-6
plain break must occur in a loop statement or switch

Expected Result: PASS

Regression Test:

tcltest::test 14.14-plain-6 { plain break must occur in a loop
        statement or switch } {
    
    empty_main T1414p6 {
        int i=0;
        while (++i<10) {
            break;
        }
    }

} {PASS}
Test Case: 14.14-plain-7
plain break must occur in a loop statement or switch

Expected Result: PASS

Regression Test:

tcltest::test 14.14-plain-7 { plain break must occur in a loop
        statement or switch } {
    
    empty_main T1414p7 {
        int i=0;
        do {
            break;
        } while (++i<10);
    }

} {PASS}
Test Case: 14.14-plain-8
plain break must occur in a loop statement or switch

Expected Result: PASS

Regression Test:

tcltest::test 14.14-plain-8 { plain break must occur in a loop
        statement or switch } {
    
    empty_main T1414p8 {
        switch (args.length) {
            case 0: break;
        }
    }

} {PASS}
Test Case: 14.14-plain-9
plain break must occur in a loop statement or switch

Expected Result: FAIL

Regression Test:

tcltest::test 14.14-plain-9 { plain break must occur in a loop
        statement or switch } {
    
    empty_main T1414p9 {
        a: break;
    }

} {FAIL}
Test Case: 14.14-nonlocal-1
there are no non-local jumps

Expected Result: FAIL

Regression Test:

tcltest::test 14.14-nonlocal-1 { there are no non-local jumps } {
    
    empty_main T1414nonlocal1 {
        do {
            new Object() {
                {
                    break;
                }
            };
        } while (false);
    }

} {FAIL}
Test Case: 14.14-try-1
the break can be interrupted by a finally

Expected Result: PASS

Regression Test:

tcltest::test 14.14-try-1 { the break can be interrupted by
        a finally } {
    
    empty_main T1414try1 {
        do {
            try {
                try {
                    break;
                } finally { // discard the break
                    throw new Exception();
                }
            } catch (Throwable t) { // stop the exception
            }
            int i = 1; // reachable, even though it follows a break
        } while (false);
    }

} {PASS}
Test Case: 14.14-label-1
A label may be targeted by break

Expected Result: PASS

Regression Test:

tcltest::test 14.14-label-1 { A label may be
        targeted by break } {
    
    empty_main T1414l1 {
        a: {
            for (int i=0; i<10; ++i)
                break a;
        }
    }

} {PASS}
Test Case: 14.14-label-2
A label may be targeted by break

Expected Result: PASS

Regression Test:

tcltest::test 14.14-label-2 { A label may be
        targeted by break } {
    
    empty_main T1414l2 {
        a: b: for (int i=0; i<10; ++i)
            break a;
    }

} {PASS}
Test Case: 14.14-label-3
labeled break must occur in that label

Expected Result: FAIL

Regression Test:

tcltest::test 14.14-label-3 { labeled break must
        occur in that label } {
    
    empty_main T1414l3 {
        b: break a;
    }

} {FAIL}
Test Case: 14.14-label-4
labeled break must occur in that label

Expected Result: PASS

Regression Test:

tcltest::test 14.14-label-4 { labeled break must
        occur in that label } {
    
    empty_main T1414l4 {
        a: break a;
    }

} {PASS}
Test Case: 14.14-label-5
labeled break must occur in that label

Expected Result: PASS

Regression Test:

tcltest::test 14.14-label-5 { labeled break must
        occur in that label } {
    
    empty_main T1414l5 {
        a: for (int i=0; i<10; ++i)
            break a;
    }

} {PASS}
Test Case: 14.14-label-6
labeled break must occur in that label

Expected Result: PASS

Regression Test:

tcltest::test 14.14-label-6 { labeled break must
        occur in that label } {
    
    empty_main T1414l6 {
        int i=0;
        a: while (++i<10)
            break a;
    }

} {PASS}
Test Case: 14.14-label-7
labeled break must occur in that label

Expected Result: PASS

Regression Test:

tcltest::test 14.14-label-7 { labeled break must
        occur in that label } {
    
    empty_main T1414l7 {
        int i=0;
        a: do break a;
        while (++i<10);
    }

} {PASS}
Test Case: 14.14-label-8
labeled break must occur in that label

Expected Result: PASS

Regression Test:

tcltest::test 14.14-label-8 { labeled break must
        occur in that label } {
    
    empty_main T1414l8 {
        a: for (int i=0; i<10; ++i) {
            break a;
        }
    }

} {PASS}
Test Case: 14.14-label-9
labeled break must occur in that label

Expected Result: PASS

Regression Test:

tcltest::test 14.14-label-9 { labeled break must
        occur in that label } {
    
    empty_main T1414l9 {
        int i=0;
        a: while (++i<10) {
            break a;
        }
    }

} {PASS}
Test Case: 14.14-label-10
labeled break must occur in that label

Expected Result: PASS

Regression Test:

tcltest::test 14.14-label-10 { labeled break must
        occur in that label } {
    
    empty_main T1414l10 {
        int i=0;
        a: do {
            break a;
        } while (++i<10);
    }

} {PASS}
Test Case: 14.14-label-11
labeled break must occur in that label

Expected Result: PASS

Regression Test:

tcltest::test 14.14-label-11 { labeled break must
        occur in that label } {
    
    empty_main T1414l11 {
        a: switch (args.length) {
            case 0: break a;
        }
    }

} {PASS}
Test Case: 14.14-label-12
there are no non-local jumps

Expected Result: FAIL

Regression Test:

tcltest::test 14.14-label-12 { there are no
        non-local jumps } {
    
    empty_main T1414l12 {
        a: do {
            new Object() {
                {
                    break a;
                }
            };
        } while (false);
    }

} {FAIL}
Test Case: 14.14-label-13
the break can be interrupted by a finally

Expected Result: PASS

Regression Test:

tcltest::test 14.14-label-13 { the break can be
        interrupted by a finally } {
    
    empty_main T1414l13 {
        a: do {
            try {
                try {
                    break a;
                } finally { // discard the break
                    throw new Exception();
                }
            } catch (Throwable t) { // stop the exception
            }
            int i = 1; // reachable, even though it follows a break
        } while (false);
    }

} {PASS}
Test Case: 14.14-arg-1
The arg to break must be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 14.14-arg-1 { The arg to break
        must be an identifier } {
    
    empty_main T1414a1 {
        a: do {
            break 1;
        } while (false);
    }

} {FAIL}
Test Case: 14.14-arg-2
The arg to break must be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 14.14-arg-2 { The arg to break
        must be an identifier } {
    
    empty_main T1414a2 {
        a: do {
            break "a";
        } while (false);
    }

} {FAIL}
Test Case: 14.14-arg-3
The arg to break must be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 14.14-arg-3 { The arg to break
        must be an identifier } {
    
    empty_main T1414a3 {
        a: do {
            break (a);
        } while (false);
    }

} {FAIL}
Test Case: 14.14-arg-4
The arg to break must be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 14.14-arg-4 { The arg to break
        must be an identifier } {
    
    empty_main T1414a4 {
        a: do {
            break a.a;
        } while (false);
    }

} {FAIL}

14.15

Directory : tests/jls/blocks-and-statements/continue-statement


Test Case: 14.15-plain-1
continue must occur in a loop statement

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-plain-1 { continue must occur in a loop statement } {
    
    empty_main T1415p1 {
        continue;
    }

} {FAIL}
Test Case: 14.15-plain-2
continue must occur in a loop statement

Expected Result: PASS

Regression Test:

tcltest::test 14.15-plain-2 { continue must occur in a loop statement } {
    
    empty_main T1415p2 {
        for (int i=0; i<10; ++i)
            continue;
    }

} {PASS}
Test Case: 14.15-plain-3
continue must occur in a loop statement

Expected Result: PASS

Regression Test:

tcltest::test 14.15-plain-3 { continue must occur in a loop statement } {
    
    empty_main T1415p3 {
        int i=0;
        while (++i<10)
            continue;
    }

} {PASS}
Test Case: 14.15-plain-4
continue must occur in a loop statement

Expected Result: PASS

Regression Test:

tcltest::test 14.15-plain-4 { continue must occur in a loop statement } {
    
    empty_main T1415p4 {
        int i=0;
        do continue;
        while (++i<10);
    }

} {PASS}
Test Case: 14.15-plain-5
continue must occur in a loop statement

Expected Result: PASS

Regression Test:

tcltest::test 14.15-plain-5 { continue must occur in a loop statement } {
    
    empty_main T1415p5 {
        for (int i=0; i<10; ++i) {
            continue;
        }
    }

} {PASS}
Test Case: 14.15-plain-6
continue must occur in a loop statement

Expected Result: PASS

Regression Test:

tcltest::test 14.15-plain-6 { continue must occur in a loop statement } {
    
    empty_main T1415p6 {
        int i=0;
        while (++i<10) {
            continue;
        }
    }

} {PASS}
Test Case: 14.15-plain-7
continue must occur in a loop statement

Expected Result: PASS

Regression Test:

tcltest::test 14.15-plain-7 { continue must occur in a loop statement } {
    
    empty_main T1415p7 {
        int i=0;
        do {
            continue;
        } while (++i<10);
    }

} {PASS}
Test Case: 14.15-plain-8
continue must occur in a loop statement

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-plain-8 { continue must occur in a loop statement } {
    
    empty_main T1415p8 {
        switch (args.length) {
            case 0: continue;
        }
    }

} {FAIL}
Test Case: 14.15-nonlocal-1
there are no non-local jumps

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-nonlocal-1 { there are no non-local jumps } {
    
    empty_main T1415nonlocal1 {
        do {
            new Object() {
                {
                    continue;
                }
            };
        } while (false);
    }

} {FAIL}
Test Case: 14.15-try-1
the continue can be interrupted by a finally

Expected Result: PASS

Regression Test:

tcltest::test 14.15-try-1 { the continue can be interrupted by a finally } {
    
    empty_main T1415try1 {
        do {
            try {
                try {
                    continue;
                } finally { // discard the continue
                    throw new Exception();
                }
            } catch (Throwable t) { // stop the exception
            }
            int i = 1; // reachable, even though it follows a continue
        } while (false);
    }

} {PASS}
Test Case: 14.15-label-1
A label targeted by continue must have a loop as its statment

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-label-1 { A label targeted by continue
        must have a loop as its statment } {
    
    empty_main T1415l1 {
        a: {
            for (int i=0; i<10; ++i)
                continue a;
        }
    }

} {FAIL}
Test Case: 14.15-label-2
A label targeted by continue must have a loop as its statment

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-label-2 { A label targeted by continue
        must have a loop as its statment } {
    
    empty_main T1415l2 {
        a: b: for (int i=0; i<10; ++i)
            continue a;
    }

} {FAIL}
Test Case: 14.15-label-3
labeled continue must occur in that label

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-label-3 { labeled continue must occur in that label } {
    
    empty_main T1415l3 {
        b: continue a;
    }

} {FAIL}
Test Case: 14.15-label-4
continue must occur in a loop statement

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-label-4 { continue must occur in a loop statement } {
    
    empty_main T1415l4 {
        a: continue a;
    }

} {FAIL}
Test Case: 14.15-label-5
continue must occur in a loop statement

Expected Result: PASS

Regression Test:

tcltest::test 14.15-label-5 { continue must occur in a loop statement } {
    
    empty_main T1415l5 {
        a: for (int i=0; i<10; ++i)
            continue a;
    }

} {PASS}
Test Case: 14.15-label-6
continue must occur in a loop statement

Expected Result: PASS

Regression Test:

tcltest::test 14.15-label-6 { continue must occur in a loop statement } {
    
    empty_main T1415l6 {
        int i=0;
        a: while (++i<10)
            continue a;
    }

} {PASS}
Test Case: 14.15-label-7
continue must occur in a loop statement

Expected Result: PASS

Regression Test:

tcltest::test 14.15-label-7 { continue must occur in a loop statement } {
    
    empty_main T1415l7 {
        int i=0;
        a: do continue a;
        while (++i<10);
    }

} {PASS}
Test Case: 14.15-label-8
continue must occur in a loop statement

Expected Result: PASS

Regression Test:

tcltest::test 14.15-label-8 { continue must occur in a loop statement } {
    
    empty_main T1415l8 {
        a: for (int i=0; i<10; ++i) {
            continue a;
        }
    }

} {PASS}
Test Case: 14.15-label-9
continue must occur in a loop statement

Expected Result: PASS

Regression Test:

tcltest::test 14.15-label-9 { continue must occur in a loop statement } {
    
    empty_main T1415l9 {
        int i=0;
        a: while (++i<10) {
            continue a;
        }
    }

} {PASS}
Test Case: 14.15-label-10
continue must occur in a loop statement

Expected Result: PASS

Regression Test:

tcltest::test 14.15-label-10 { continue must occur in a loop statement } {
    
    empty_main T1415l10 {
        int i=0;
        a: do {
            continue a;
        } while (++i<10);
    }

} {PASS}
Test Case: 14.15-label-11
continue must occur in a loop statement

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-label-11 { continue must occur in a loop statement } {
    
    empty_main T1415l11 {
        a: switch (args.length) {
            case 0: continue a;
        }
    }

} {FAIL}
Test Case: 14.15-nonlocal-2
there are no non-local jumps

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-nonlocal-2 { there are no non-local jumps } {
    
    empty_main T1415nonlocal2 {
        a: do {
            new Object() {
                {
                    continue a;
                }
            };
        } while (false);
    }

} {FAIL}
Test Case: 14.15-try-2
the continue can be interrupted by a finally

Expected Result: PASS

Regression Test:

tcltest::test 14.15-try-2 { the continue can be interrupted by a finally } {
    
    empty_main T1415try2 {
        a: do {
            try {
                try {
                    continue a;
                } finally { // discard the continue
                    throw new Exception();
                }
            } catch (Throwable t) { // stop the exception
            }
            int i = 1; // reachable, even though it follows a continue
        } while (false);
    }

} {PASS}
Test Case: 14.15-arg-1
The arg to continue must be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-arg-1 { The arg to continue must be an identifier } {
    
    empty_main T1415a1 {
        a: do {
            continue 1;
        } while (false);
    }

} {FAIL}
Test Case: 14.15-arg-2
The arg to continue must be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-arg-2 { The arg to continue must be an identifier } {
    
    empty_main T1415a2 {
        a: do {
            continue "a";
        } while (false);
    }

} {FAIL}
Test Case: 14.15-arg-3
The arg to continue must be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-arg-3 { The arg to continue must be an identifier } {
    
    empty_main T1415a3 {
        a: do {
            continue (a);
        } while (false);
    }

} {FAIL}
Test Case: 14.15-arg-4
The arg to continue must be an identifier

Expected Result: FAIL

Regression Test:

tcltest::test 14.15-arg-4 { The arg to continue must be an identifier } {
    
    empty_main T1415a4 {
        a: do {
            continue a.a;
        } while (false);
    }

} {FAIL}

14.18

Directory : tests/jls/blocks-and-statements/synchronized-statement


Test Case: 14.18-expression-1
The type of the expression must be a reference

Expected Result: PASS

Regression Test:

tcltest::test 14.18-expression-1 { The type of the expression must be a
        reference } {
    
    empty_main T1418e1 {
        synchronized ("") {}
    }

} {PASS}
Test Case: 14.18-expression-2
The type of the expression must be a reference

Expected Result: PASS

Regression Test:

tcltest::test 14.18-expression-2 { The type of the expression must be a
        reference } {
    
    empty_main T1418e2 {
        synchronized (new Object()) {}
    }

} {PASS}
Test Case: 14.18-expression-3
The type of the expression must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 14.18-expression-3 { The type of the expression must be a
        reference } {
    
    empty_main T1418e3 {
        synchronized (1) {}
    }

} {FAIL}
Test Case: 14.18-expression-4
The type of the expression must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 14.18-expression-4 { The type of the expression must be a
        reference } {
    
    empty_main T1418e4 {
        synchronized (null) {}
    }

} {FAIL}
Test Case: 14.18-expression-5
The type of the expression must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 14.18-expression-5 { The type of the expression must be a
        reference } {
    
    empty_main T1418e5 {
        synchronized ('a') {}
    }

} {FAIL}
Test Case: 14.18-expression-6
The type of the expression must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 14.18-expression-6 { The type of the expression must be a
        reference } {
    
    empty_main T1418e6 {
        synchronized (System.out.println()) {}
    }

} {FAIL}
Test Case: 14.18-expression-7
The type of the expression must be a reference

Expected Result: PASS

Regression Test:

tcltest::test 14.18-expression-7 { The type of the expression must be a
        reference } {
    
    empty_main T1418e7 {
        synchronized ((String) null) {}
    }

} {PASS}
Test Case: 14.18-syntax-1
The synchronized expression must be in ()

Expected Result: FAIL

Regression Test:

tcltest::test 14.18-syntax-1 { The synchronized expression must be in () } {
    
    empty_main T1418s1 {
        synchronized "" {}
    }

} {FAIL}
Test Case: 14.18-syntax-2
The synchronized statement must be in {}

Expected Result: FAIL

Regression Test:

tcltest::test 14.18-syntax-2 { The synchronized statement must be in {} } {
    
    empty_main T1418s2 {
        synchronized ("") ;
    }

} {FAIL}
Test Case: 14.18-syntax-3
The synchronized statement must be in {}

Expected Result: FAIL

Regression Test:

tcltest::test 14.18-syntax-3 { The synchronized statement must be in {} } {
    
    empty_main T1418s3 {
        synchronized ("") break;
    }

} {FAIL}
Test Case: 14.18-syntax-4
The synchronized block may not be labeled

Expected Result: FAIL

Regression Test:

tcltest::test 14.18-syntax-4 { The synchronized block may not be labeled } {
    
    empty_main T1418s4 {
        synchronized ("") label: {};
    }

} {FAIL}
Test Case: 14.18-lock-1
A single thread may lock the same object multiple times (JLS example)

Expected Result: PASS

Regression Test:

tcltest::test 14.18-lock-1 { A single thread may lock the same object
        multiple times (JLS example) } {
    
    empty_main T1418l1 {
        Object t = new Object();
        synchronized (t) {
            synchronized (t) {
                System.out.println("made it!");
            }
        }
    }

} {PASS}
Test Case: 14.18-lock-2
A single thread may lock the same object multiple times (in a synchronized instance method, this is locked)

Expected Result: PASS

Regression Test:

tcltest::test 14.18-lock-2 { A single thread may lock the same object
        multiple times (in a synchronized instance method, this is locked)} {
    
    empty_class T1418l2 {
        synchronized void foo() {
            synchronized (this) {}
        }
    }

} {PASS}
Test Case: 14.18-lock-3
A single thread may lock the same object multiple times (in a synchronized static method, .class is locked)

Expected Result: PASS

Regression Test:

tcltest::test 14.18-lock-3 { A single thread may lock the same object
        multiple times (in a synchronized static method, .class is
        locked)} {
    
    empty_class T1418l3 {
        static synchronized void foo() {
            synchronized (T1418l3.class) {}
        }
    }

} {PASS}

14.19

Directory : tests/jls/blocks-and-statements/try-statement


Test Case: 14.19-shadow-1
A catch clause parameter may shadow a member

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-1 { A catch clause parameter may shadow a member } {
    
    empty_class T1419s1 {
        int i;
        void foo() {
            try {
                i = 1;
                throw new Exception();
            } catch (Exception i) {
            }
        }
    }

} {PASS}
Test Case: 14.19-shadow-2
A catch clause parameter may shadow a member

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-2 { A catch clause parameter may shadow a member } {
    
    empty_class T1419s2 {
        static int i;
        void foo() {
            try {
                i = 1;
                throw new Exception();
            } catch (Exception i) {
            }
        }
    }

} {PASS}
Test Case: 14.19-shadow-3
A catch clause parameter may shadow a member

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-3 { A catch clause parameter may shadow a member } {
    
    empty_class T1419s3 {
        static int i;
        static void foo() {
            try {
                i = 1;
                throw new Exception();
            } catch (Exception i) {
            }
        }
    }

} {PASS}
Test Case: 14.19-shadow-4
A catch clause parameter may shadow a local

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-4 { A catch clause parameter may shadow a local } {
    
    empty_class T1419s4 {
        void foo(final int i) {
            new Object() {
                {
                    try {
                        int j = i;
                        throw new Exception();
                    } catch (Exception i) {
                    }
                }
            };
        }
    }

} {PASS}
Test Case: 14.19-shadow-5
A catch clause parameter may shadow a local

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-5 { A catch clause parameter may shadow a local } {
    
    empty_main T1419s5 {
        final int i = 1;
        new Object() {
            {
                try {
                    int j = i;
                    throw new Exception();
                } catch (Exception i) {
                }
            }
        };
    }

} {PASS}
Test Case: 14.19-shadow-6
A catch clause parameter may shadow a local

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-6 { A catch clause parameter may shadow a local } {
    
    empty_main T1419s6 {
        int j = 1;
        for (final int i = 1; j < 1; )
            new Object() {
                {
                    try {
                        int j = i;
                        throw new Exception();
                    } catch (Exception i) {
                    }
                }
            };
    }

} {PASS}
Test Case: 14.19-shadow-7
A catch clause parameter may shadow a local

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-7 { A catch clause parameter may shadow a local } {
    
    empty_main T1419s7 {
        try {
            throw new ArithmeticException();
        } catch (final ArithmeticException i) {
            new Object() {
                {
                    try {
                        ArithmeticException ae = i;
                        throw new NullPointerException();
                    } catch (NullPointerException i) {
                    }
                }
            };
        }
    }

} {PASS}
Test Case: 14.19-shadow-8
Catch clauses may repeat a parameter name

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-8 { Catch clauses may repeat a parameter name } {
    
    empty_main T1419s8 {
        try {
            throw new Exception();
        } catch (NullPointerException e) {
        } catch (RuntimeException e) {
        } catch (Throwable e) {
        }
    }

} {PASS}
Test Case: 14.19-shadow-9
Local variables may not shadow a catch clause parameter

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-shadow-9 { Local variables may not shadow a catch clause
        parameter } {
    
    empty_main T1419s9 {
        try {
            throw new Exception();
        } catch (Exception e) {
            int e;
        }
    }

} {FAIL}
Test Case: 14.19-shadow-10
Local variables may not shadow a catch clause parameter

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-shadow-10 { Local variables may not shadow a catch clause
        parameter } {
    
    empty_main T1419s10 {
        try {
            throw new Exception();
        } catch (Exception e) {
            try {
                throw new Exception();
            } catch (Exception e) {
            }
        }
    }

} {FAIL}
Test Case: 14.19-shadow-11
A catch clause parameter may be shadowed

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-11 { A catch clause parameter may be shadowed } {
    
    empty_main T1419s11 {
        try {
            throw new Exception();
        } catch (Exception e) {
            new Object() {
                int e;
            };
        }
    }

} {PASS}
Test Case: 14.19-shadow-12
A catch clause parameter may be shadowed

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-12 { A catch clause parameter may be shadowed } {
    
    empty_main T1419s12 {
        try {
            throw new Exception();
        } catch (final Exception e) {
            new Object() {
                Object o = e;
                void foo(int e) {}
            };
        }
    }

} {PASS}
Test Case: 14.19-shadow-13
A catch clause parameter may be shadowed

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-13 { A catch clause parameter may be shadowed } {
    
    empty_main T1419s13 {
        try {
            throw new Exception();
        } catch (final Exception e) {
            new Object() {
                {
                    Object o = e;
                    int e;
                    e = 1;
                }
            };
        }
    }

} {PASS}
Test Case: 14.19-shadow-14
A catch clause parameter may be shadowed

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-14 { A catch clause parameter may be shadowed } {
    
    empty_main T1419s14 {
        try {
            throw new Exception();
        } catch (final Exception e) {
            new Object() {
                {
                    Object o = e;
                    for (int e = 1; e < 1; );
                    o = e;
                }
            };
        }
    }

} {PASS}
Test Case: 14.19-shadow-15
A catch clause parameter may be shadowed

Expected Result: PASS

Regression Test:

tcltest::test 14.19-shadow-15 { A catch clause parameter may be shadowed } {
    
    empty_main T1419s15 {
        try {
            throw new ArithmeticException();
        } catch (final ArithmeticException e) {
            new Object() {
                {
                    try {
                        ArithmeticException a = e;
                        throw new NullPointerException();
                    } catch (NullPointerException e) {
                    }
                }
            };
        }
    }

} {PASS}
Test Case: 14.19-syntax-1
The try block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-1 { The try block must be a block } {
    
    empty_main T1419syn1 {
	try ;
	catch (Exception e) {}
    }

} {FAIL}
Test Case: 14.19-syntax-2
The try block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-2 { The try block must be a block } {
    
    empty_main T1419syn2 {
	try int i;
	catch (Exception e) {}
    }

} {FAIL}
Test Case: 14.19-syntax-3
The try block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-3 { The try block must be a block } {
    
    empty_main T1419syn3 {
	int i;
	try i++;
	catch (Exception e) {}
    }

} {FAIL}
Test Case: 14.19-syntax-4
The try block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-4 { The try block must be a block } {
    
    empty_main T1419syn4 {
	try class C {}
	catch (Exception e) {}
    }

} {FAIL}
Test Case: 14.19-syntax-5
The try block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-5 { The try block must be a block } {
    
    empty_main T1419syn5 {
	try label: {}
	catch (Exception e) {}
    }

} {FAIL}
Test Case: 14.19-syntax-6
The catch block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-6 { The catch block must be a block } {
    
    empty_main T1419syn6 {
	try {}
	catch (Exception e) ;
    }

} {FAIL}
Test Case: 14.19-syntax-7
The catch block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-7 { The catch block must be a block } {
    
    empty_main T1419syn7 {
	try {}
	catch (Exception e) int i;
    }

} {FAIL}
Test Case: 14.19-syntax-8
The catch block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-8 { The catch block must be a block } {
    
    empty_main T1419syn8 {
	int i;
	try {}
	catch (Exception e) i++;
    }

} {FAIL}
Test Case: 14.19-syntax-9
The catch block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-9 { The catch block must be a block } {
    
    empty_main T1419syn9 {
	try {}
	catch (Exception e) class C {}
    }

} {FAIL}
Test Case: 14.19-syntax-10
The catch block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-10 { The catch block must be a block } {
    
    empty_main T1419syn10 {
	try {}
	catch (Exception e) label: {}
    }

} {FAIL}
Test Case: 14.19-syntax-11
The finally block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-11 { The finally block must be a block } {
    
    empty_main T1419syn11 {
	try {}
	finally ;
    }

} {FAIL}
Test Case: 14.19-syntax-12
The finally block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-12 { The finally block must be a block } {
    
    empty_main T1419syn12 {
	try {}
	finally int i;
    }

} {FAIL}
Test Case: 14.19-syntax-13
The finally block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-13 { The finally block must be a block } {
    
    empty_main T1419syn13 {
	int i;
	try {}
	finally i++;
    }

} {FAIL}
Test Case: 14.19-syntax-14
The finally block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-14 { The finally block must be a block } {
    
    empty_main T1419syn14 {
	try {}
	finally class C {}
    }

} {FAIL}
Test Case: 14.19-syntax-15
The finally block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-15 { The finally block must be a block } {
    
    empty_main T1419syn15 {
	try {}
	finally label: {}
    }

} {FAIL}
Test Case: 14.19-syntax-16
The finally block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-16 { The finally block must be a block } {
    
    empty_main T1419syn16 {
	try {}
	catch (Exception e) {}
	finally ;
    }

} {FAIL}
Test Case: 14.19-syntax-17
The finally block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-17 { The finally block must be a block } {
    
    empty_main T1419syn17 {
	try {}
	catch (Exception e) {}
	finally int i;
    }

} {FAIL}
Test Case: 14.19-syntax-18
The finally block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-18 { The finally block must be a block } {
    
    empty_main T1419syn18 {
	int i;
	try {}
	catch (Exception e) {}
	finally i++;
    }

} {FAIL}
Test Case: 14.19-syntax-19
The finally block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-19 { The finally block must be a block } {
    
    empty_main T1419syn19 {
	try {}
	catch (Exception e) {}
	finally class C {}
    }

} {FAIL}
Test Case: 14.19-syntax-20
The finally block must be a block

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-syntax-20 { The finally block must be a block } {
    
    empty_main T1419syn20 {
	try {}
	catch (Exception e) {}
	finally label: {}
    }

} {FAIL}
Test Case: 14.19-type-1
The catch variable must extend Throwable

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-type-1 { The catch variable must extend Throwable } {
    
    empty_main T1419t1 {
	try {
	    throw new Error();
	} catch (Error e[]) {}
    }

} {FAIL}
Test Case: 14.19-type-2
The catch variable must extend Throwable

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-type-2 { The catch variable must extend Throwable } {
    
    empty_main T1419t2 {
	try {
	    throw new Error();
	} catch (Error[] e) {}
    }

} {FAIL}
Test Case: 14.19-type-3
The catch variable must extend Throwable

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-type-3 { The catch variable must extend Throwable } {
    
    empty_main T1419t3 {
	try {
	    throw new Error();
	} catch (int e) {}
    }

} {FAIL}
Test Case: 14.19-type-4
The catch variable must extend Throwable

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-type-4 { The catch variable must extend Throwable } {
    
    empty_main T1419t4 {
	try {
	    throw new Error();
	} catch (Object e) {}
    }

} {FAIL}
Test Case: 14.19-type-5
The catch variable must extend Throwable

Expected Result: FAIL

Regression Test:

tcltest::test 14.19-type-5 { The catch variable must extend Throwable } {
    
    empty_main T1419t5 {
	try {
	    throw new Error();
	} catch (java.io.Serializable e) {}
    }

} {FAIL}

14.20

Directory : tests/jls/blocks-and-statements/unreachable-statements


Test Case: 14.20-valid-1
Example of valid unreachable code, since value analysis is not made

Expected Result: PASS

Regression Test:

tcltest::test 14.20-valid-1 { Example of valid unreachable code, since value
        analysis is not made } {
    
    empty_main T1420valid1 {
        int n = 5, k;
        while (n > 7) k = 2;
    }

} {PASS}
Test Case: 14.20-block-1
Empty blocks complete normally iff reachable

Expected Result: PASS

Regression Test:

tcltest::test 14.20-block-1 { Empty blocks complete normally iff reachable } {
    
    empty_main T1420block1 {
        {}
        int i;
    }

} {PASS}
Test Case: 14.20-block-2
Non-empty blocks complete normally iff last statement does

Expected Result: PASS

Regression Test:

tcltest::test 14.20-block-2 { Non-empty blocks complete normally iff last statement does } {
    
    empty_main T1420block2 {
        { int i; }
        int j;
    }

} {PASS}
Test Case: 14.20-block-3
Non-empty blocks complete normally iff last statement does

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-block-3 { Non-empty blocks complete normally iff last statement does } {
    
    empty_main T1420block3 {
        { return; }
        int i;
    }

} {FAIL}
Test Case: 14.20-block-4
Non-empty blocks complete normally iff last statement does

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-block-4 { Non-empty blocks complete normally iff last statement does } {
    
    empty_main T1420block4 {
        { return; }
        ;
    }

} {FAIL}
Test Case: 14.20-block-5
Non-empty blocks complete normally iff last statement does

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-block-5 { Non-empty blocks complete normally iff last statement does } {
    
    empty_main T1420block5 {
        { return; }
        {}
    }

} {FAIL}
Test Case: 14.20-block-6
Non-empty blocks complete normally iff last statement does

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-block-6 { Non-empty blocks complete normally iff last statement does } {
    
    empty_main T1420block6 {
        { return; }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-block-7
First block statement is reachable iff block is; all others iff the preceding statement completes normally

Expected Result: PASS

Regression Test:

tcltest::test 14.20-block-7 { First block statement is reachable iff block is;
        all others iff the preceding statement completes normally } {
    
    empty_main T1420block7 {
        int i;
        int j;
    }

} {PASS}
Test Case: 14.20-block-8
First block statement is reachable iff block is; all others iff the preceding statement completes normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-block-8 { First block statement is reachable iff block is;
        all others iff the preceding statement completes normally } {
    
    empty_main T1420block8 {
        return;
        int i;
    }

} {FAIL}
Test Case: 14.20-block-9
First block statement is reachable iff block is; all others iff the preceding statement completes normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-block-9 { First block statement is reachable iff block is;
        all others iff the preceding statement completes normally } {
    
    empty_main T1420block9 {
        return;
        ;
    }

} {FAIL}
Test Case: 14.20-block-10
First block statement is reachable iff block is; all others iff the preceding statement completes normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-block-10 { First block statement is reachable iff block is;
        all others iff the preceding statement completes normally } {
    
    empty_main T1420block10 {
        return;
        {}
    }

} {FAIL}
Test Case: 14.20-block-11
First block statement is reachable iff block is; all others iff the preceding statement completes normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-block-11 { First block statement is reachable iff block is;
        all others iff the preceding statement completes normally } {
    
    empty_main T1420block11 {
        return;
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-local-1
Local class declarations can complete normally iff reachable

Expected Result: PASS

Regression Test:

tcltest::test 14.20-local-1 { Local class declarations can complete normally
        iff reachable } {
    
    empty_main T1420local1 {
        class bar {}
        int i;
    }

} {PASS}
Test Case: 14.20-local-2
Local class declarations can complete normally iff reachable

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-local-2 { Local class declarations can complete normally
        iff reachable } {
    
    empty_main T1420local2 {
        return;
        class bar {}
    }

} {FAIL}
Test Case: 14.20-local-3
Local variable declarations can complete normally iff reachable

Expected Result: PASS

Regression Test:

tcltest::test 14.20-local-3 { Local variable declarations can complete normally
        iff reachable } {
    
    empty_main T1420local3 {
        int i;
        int j;
    }

} {PASS}
Test Case: 14.20-local-4
Local variable declarations can complete normally iff reachable

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-local-4 { Local variable declarations can complete normally
        iff reachable } {
    
    empty_main T1420local4 {
        return;
        int j;
    }

} {FAIL}
Test Case: 14.20-empty-1
The empty statement completes normally iff reachable

Expected Result: PASS

Regression Test:

tcltest::test 14.20-empty-1 { The empty statement completes normally iff reachable } {
    
    empty_main T1420empty1 {
        ;
        int i;
    }

} {PASS}
Test Case: 14.20-label-1
Labeled statements can complete normally if contained statement can as well

Expected Result: PASS

Regression Test:

tcltest::test 14.20-label-1 { Labeled statements can complete normally if
        contained statement can as well } {
    
    empty_main T1420label1 {
        int i;
        a: i = 1;
        int j;
    }

} {PASS}
Test Case: 14.20-label-2
Labeled statements can complete normally if it contains a reachable break to exit the label

Expected Result: PASS

Regression Test:

tcltest::test 14.20-label-2 { Labeled statements can complete normally if
        it contains a reachable break to exit the label } {
    
    empty_main T1420label2 {
        a: break a;
        int i;
    }

} {PASS}
Test Case: 14.20-label-3
Labeled statements can complete normally if it contains a reachable break to exit the label

Expected Result: PASS

Regression Test:

tcltest::test 14.20-label-3 { Labeled statements can complete normally if
        it contains a reachable break to exit the label } {
    
    empty_main T1420label3 {
        a: while (true)
            break a;
        int i;
    }

} {PASS}
Test Case: 14.20-label-4
Labeled statements without exiting break or normal completion of contained statement do not complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-label-4 { Labeled statements without exiting break or
        normal completion of contained statement do not complete normally } {
    
    empty_main T1420label4 {
        a: return;
        int i;
    }

} {FAIL}
Test Case: 14.20-label-5
Labeled statements without exiting break or normal completion of contained statement do not complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-label-5 { Labeled statements without exiting break or
        normal completion of contained statement do not complete normally } {
    
    empty_main T1420label5 {
        a: return;
        ;
    }

} {FAIL}
Test Case: 14.20-label-6
Labeled statements without exiting break or normal completion of contained statement do not complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-label-6 { Labeled statements without exiting break or
        normal completion of contained statement do not complete normally } {
    
    empty_main T1420label6 {
        a: return;
        {}
    }

} {FAIL}
Test Case: 14.20-label-7
Labeled statements without exiting break or normal completion of contained statement do not complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-label-7 { Labeled statements without exiting break or
        normal completion of contained statement do not complete normally } {
    
    empty_main T1420label7 {
        a: return;
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-label-8
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-label-8 { The break is interrupted by the try-finally } {
    
    empty_main T1420label8 {
        a: try {
            break a;
        } finally {
            return;
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-label-9
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-label-9 { The break is interrupted by the try-finally } {
    
    empty_main T1420label9 {
        a: try {
            break a;
        } finally {
            return;
        }
        ;
    }

} {FAIL}
Test Case: 14.20-label-10
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-label-10 { The break is interrupted by the try-finally } {
    
    empty_main T1420label10 {
        a: try {
            break a;
        } finally {
            return;
        }
        {}
    }

} {FAIL}
Test Case: 14.20-label-11
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-label-11 { The break is interrupted by the try-finally } {
    
    empty_main T1420label11 {
        a: try {
            break a;
        } finally {
            return;
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-label-12
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-label-12 { The break is interrupted by the try-finally } {
    
    empty_main T1420label12 {
        a: try {
            throw new Exception();
        } catch (Exception e) {
            break a;
        } finally {
            return;
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-label-13
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-label-13 { The break is interrupted by the try-finally } {
    
    empty_main T1420label13 {
        a: try {
            throw new Exception();
        } catch (Exception e) {
            break a;
        } finally {
            return;
        }
        ;
    }

} {FAIL}
Test Case: 14.20-label-14
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-label-14 { The break is interrupted by the try-finally } {
    
    empty_main T1420label14 {
        a: try {
            throw new Exception();
        } catch (Exception e) {
            break a;
        } finally {
            return;
        }
        {}
    }

} {FAIL}
Test Case: 14.20-label-15
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-label-15 { The break is interrupted by the try-finally } {
    
    empty_main T1420label15 {
        a: try {
            throw new Exception();
        } catch (Exception e) {
            break a;
        } finally {
            return;
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-expression-1
Expression statements can complete normally iff reachable

Expected Result: PASS

Regression Test:

tcltest::test 14.20-expression-1 { Expression statements can complete normally
        iff reachable } {
    
    empty_main T1420expression1 {
        System.out.println();
        int i;
        i = 1;
        i++;
        --i;
        new Object();
        new Object() {};
    }

} {PASS}
Test Case: 14.20-expression-2
Expression statements can complete normally iff reachable (even if stricter analysis shows otherwise)

Expected Result: PASS

Regression Test:

tcltest::test 14.20-expression-2 { Expression statements can complete normally
        iff reachable (even if stricter analysis shows otherwise) } {
    
    empty_class T1420expression2 {
        void die() { throw new RuntimeException(); }
        void foo() {
            System.exit(1); // never returns
            die(); // always abrupt exit with exception
            Object o = new Object[Integer.MAX_VALUE][Integer.MAX_VALUE][Integer.MAX_VALUE]; // almost a guaranteed OutOfMemoryError
            foo(); // recursion short-circuits rest of method
            int i; // will never get here, but it is reachable
        }
    }

} {PASS}
Test Case: 14.20-switch-1
A switch statement can complete normally if: The last statement in the switch block can complete normally.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-switch-1 { A switch statement can complete normally if:
        The last statement in the switch block can complete normally. } {
    
    empty_main T1420switch1 {
        switch (args.length) {
            case 0:
            int i;
        }
        int j;
    }

} {PASS}
Test Case: 14.20-switch-2
A switch statement can complete normally if: The switch block is empty or contains only switch labels.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-switch-2 { A switch statement can complete normally if:
        The switch block is empty or contains only switch labels. } {
    
    empty_main T1420switch2 {
        switch (args.length) {}
        int i;
    }

} {PASS}
Test Case: 14.20-switch-3
A switch statement can complete normally if: The switch block is empty or contains only switch labels.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-switch-3 { A switch statement can complete normally if:
        The switch block is empty or contains only switch labels. } {
    
    empty_main T1420switch3 {
        switch (args.length) {
            case 0:
        }
        int i;
    }

} {PASS}
Test Case: 14.20-switch-4
A switch statement can complete normally if: There is at least one switch label after the last switch block statement group.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-switch-4 { A switch statement can complete normally if:
        There is at least one switch label after the last switch block statement group. } {
    
    empty_main T1420switch4 {
        switch (args.length) {
            case 0: return;
            case 1:
        }
        int i;
    }

} {PASS}
Test Case: 14.20-switch-5
A switch statement can complete normally if: The switch block does not contain a default label.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-switch-5 { A switch statement can complete normally if:
        The switch block does not contain a default label. } {
    
    empty_main T1420switch5 {
        switch (args.length) {
            case 0: return;
        }
        int i;
    }

} {PASS}
Test Case: 14.20-switch-6
A switch statement can complete normally if: There is a reachable break statement that exits the switch statement.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-switch-6 { A switch statement can complete normally if:
        There is a reachable break statement that exits the switch statement. } {
    
    empty_main T1420switch6 {
        switch (args.length) {
            default: return;
            case 0: break;
        }
        int i;
    }

} {PASS}
Test Case: 14.20-switch-7
A switch statement cannot complete normally if all five preceding conditions are not met

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-7 { A switch statement cannot complete normally if
        all five preceding conditions are not met } {
    
    empty_main T1420switch7 {
        switch (args.length) {
            default: return;
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-switch-8
A switch statement cannot complete normally if all five preceding conditions are not met

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-8 { A switch statement cannot complete normally if
        all five preceding conditions are not met } {
    
    empty_main T1420switch8 {
        switch (args.length) {
            default: return;
        }
        ;
    }

} {FAIL}
Test Case: 14.20-switch-9
A switch statement cannot complete normally if all five preceding conditions are not met

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-9 { A switch statement cannot complete normally if
        all five preceding conditions are not met } {
    
    empty_main T1420switch9 {
        switch (args.length) {
            default: return;
        }
        {}
    }

} {FAIL}
Test Case: 14.20-switch-10
A switch statement cannot complete normally if all five preceding conditions are not met

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-10 { A switch statement cannot complete normally if
        all five preceding conditions are not met } {
    
    empty_main T1420switch10 {
        switch (args.length) {
            default: return;
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-switch-11
A switchblock statement is reachable if it bears a switch label

Expected Result: PASS

Regression Test:

tcltest::test 14.20-switch-11 { A switchblock statement is reachable if it
        bears a switch label } {
    
    switch_labels T1420switch11 int {
        case 0: return;
        case 1: boolean b;
    }

} {PASS}
Test Case: 14.20-switch-12
A switchblock statement is reachable if a prior statement can complete normally

Expected Result: PASS

Regression Test:

tcltest::test 14.20-switch-12 { A switchblock statement is reachable if a prior
        statement can complete normally } {
    
    switch_labels T1420switch12 int {
        case 0:
            boolean b1;
            boolean b2;
    }

} {PASS}
Test Case: 14.20-switch-13
A switchblock statement is unreachable iff it bears no label and the prior statement cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-13 { A switchblock statement is unreachable iff it
        bears no label and the prior statement cannot complete normally } {
    
    switch_labels T1420switch13 int {
        case 0: 
            return;
            int i;
    }

} {FAIL}
Test Case: 14.20-switch-14
A switchblock statement is unreachable iff it bears no label and the prior statement cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-14 { A switchblock statement is unreachable iff it
        bears no label and the prior statement cannot complete normally } {
    
    switch_labels T1420switch14 int {
        case 0: 
            return;
            ;
    }

} {FAIL}
Test Case: 14.20-switch-15
A switchblock statement is unreachable iff it bears no label and the prior statement cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-15 { A switchblock statement is unreachable iff it
        bears no label and the prior statement cannot complete normally } {
    
    switch_labels T1420switch15 int {
        case 0: 
            return;
            {}
    }

} {FAIL}
Test Case: 14.20-switch-16
A switchblock statement is unreachable iff it bears no label and the prior statement cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-16 { A switchblock statement is unreachable iff it
        bears no label and the prior statement cannot complete normally } {
    
    switch_labels T1420switch16 int {
        case 0: 
            return;
            { int x=3; }
    }

} {FAIL}
Test Case: 14.20-switch-17
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-17 { The break is interrupted by the try-finally } {
    
    empty_main T1420switch17 {
        switch (args.length) {
            default:
            try {
                break;
            } finally {
                return;
            }
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-switch-18
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-18 { The break is interrupted by the try-finally } {
    
    empty_main T1420switch18 {
        switch (args.length) {
            default:
            try {
                break;
            } finally {
                return;
            }
        }
        ;
    }

} {FAIL}
Test Case: 14.20-switch-19
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-19 { The break is interrupted by the try-finally } {
    
    empty_main T1420switch19 {
        switch (args.length) {
            default:
            try {
                break;
            } finally {
                return;
            }
        }
        {}
    }

} {FAIL}
Test Case: 14.20-switch-20
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-20 { The break is interrupted by the try-finally } {
    
    empty_main T1420switch20 {
        switch (args.length) {
            default:
            try {
                break;
            } finally {
                return;
            }
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-switch-21
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-21 { The break is interrupted by the try-finally } {
    
    empty_main T1420switch21 {
        switch (args.length) {
            default:
            try {
                throw new Exception();
            } catch (Exception e) {
                break;
            } finally {
                return;
            }
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-switch-22
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-22 { The break is interrupted by the try-finally } {
    
    empty_main T1420switch22 {
        switch (args.length) {
            default:
            try {
                throw new Exception();
            } catch (Exception e) {
                break;
            } finally {
                return;
            }
        }
        ;
    }

} {FAIL}
Test Case: 14.20-switch-23
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-23 { The break is interrupted by the try-finally } {
    
    empty_main T1420switch23 {
        switch (args.length) {
            default:
            try {
                throw new Exception();
            } catch (Exception e) {
                break;
            } finally {
                return;
            }
        }
        {}
    }

} {FAIL}
Test Case: 14.20-switch-24
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-switch-24 { The break is interrupted by the try-finally } {
    
    empty_main T1420switch24 {
        switch (args.length) {
            default:
            try {
                throw new Exception();
            } catch (Exception e) {
                break;
            } finally {
                return;
            }
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-while-1
A while statement can complete normally if: The condition expression is not a constant expression with value true

Expected Result: PASS

Regression Test:

tcltest::test 14.20-while-1 { A while statement can complete normally if:
        The condition expression is not a constant expression with value true } {
    
    empty_main T1420while1 {
        boolean b = true;
        while (b);
        int j;
    }

} {PASS}
Test Case: 14.20-while-2
A while statement can complete normally if: There is a reachable break statement that exits the while statement.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-while-2 { A while statement can complete normally if:
        There is a reachable break statement that exits the while statement. } {
    
    empty_main T1420while2 {
        while (true) break;
        int i;
    }

} {PASS}
Test Case: 14.20-while-3
A while statement cannot complete normally iff there is no break and the condition is constant true

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-3 { A while statement cannot complete normally iff
        there is no break and the condition is constant true } {
    
    empty_main T1420while3 {
        while (true);
        int i;
    }

} {FAIL}
Test Case: 14.20-while-4
A while statement cannot complete normally iff there is no break and the condition is constant true

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-4 { A while statement cannot complete normally iff
        there is no break and the condition is constant true } {
    
    empty_main T1420while4 {
        while (true);
        ;
    }

} {FAIL}
Test Case: 14.20-while-5
A while statement cannot complete normally iff there is no break and the condition is constant true

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-5 { A while statement cannot complete normally iff
        there is no break and the condition is constant true } {
    
    empty_main T1420while5 {
        while (true);
        {}
    }

} {FAIL}
Test Case: 14.20-while-6
A while statement cannot complete normally iff there is no break and the condition is constant true

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-6 { A while statement cannot complete normally iff
        there is no break and the condition is constant true } {
    
    empty_main T1420while6 {
        while (true);
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-while-7
The contained statement of a while is unreachable iff the condition is constant false

Expected Result: PASS

Regression Test:

tcltest::test 14.20-while-7 { The contained statement of a while is unreachable
        iff the condition is constant false } {
    
    empty_main T1420while7 {
        boolean b = false;
        while (b) b = false;
        int i;
    }

} {PASS}
Test Case: 14.20-while-8
The contained statement of a while is unreachable iff the condition is constant false

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-8 { The contained statement of a while is unreachable
        iff the condition is constant false } {
    
    empty_main T1420while8 {
        int i;
        while (false) i = 1;
    }

} {FAIL}
Test Case: 14.20-while-9
The contained statement of a while is unreachable iff the condition is constant false

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-9 { The contained statement of a while is unreachable
        iff the condition is constant false } {
    
    empty_main T1420while9 {
        while (false);
    }

} {FAIL}
Test Case: 14.20-while-10
The contained statement of a while is unreachable iff the condition is constant false

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-10 { The contained statement of a while is unreachable
        iff the condition is constant false } {
    
    empty_main T1420while10 {
        while (false) {}
    }

} {FAIL}
Test Case: 14.20-while-11
The contained statement of a while is unreachable iff the condition is constant false

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-11 { The contained statement of a while is unreachable
        iff the condition is constant false } {
    
    empty_main T1420while11 {
        while (false) { int x=3; }
    }

} {FAIL}
Test Case: 14.20-while-12
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-12 { The break is interrupted by the try-finally } {
    
    empty_main T1420while12 {
        while (true) {
            try {
                break;
            } finally {
                return;
            }
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-while-13
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-13 { The break is interrupted by the try-finally } {
    
    empty_main T1420while13 {
        while (true) {
            try {
                break;
            } finally {
                return;
            }
        }
        ;
    }

} {FAIL}
Test Case: 14.20-while-14
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-14 { The break is interrupted by the try-finally } {
    
    empty_main T1420while14 {
        while (true) {
            try {
                break;
            } finally {
                return;
            }
        }
        {}
    }

} {FAIL}
Test Case: 14.20-while-15
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-15 { The break is interrupted by the try-finally } {
    
    empty_main T1420while15 {
        while (true) {
            try {
                break;
            } finally {
                return;
            }
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-while-16
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-16 { The break is interrupted by the try-finally } {
    
    empty_main T1420while16 {
        while (true) {
            try {
                throw new Exception();
            } catch (Exception e) {
                break;
            } finally {
                return;
            }
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-while-17
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-17 { The break is interrupted by the try-finally } {
    
    empty_main T1420while17 {
        while (true) {
            try {
                throw new Exception();
            } catch (Exception e) {
                break;
            } finally {
                return;
            }
        }
        ;
    }

} {FAIL}
Test Case: 14.20-while-18
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-18 { The break is interrupted by the try-finally } {
    
    empty_main T1420while18 {
        while (true) {
            try {
                throw new Exception();
            } catch (Exception e) {
                break;
            } finally {
                return;
            }
        }
        {}
    }

} {FAIL}
Test Case: 14.20-while-19
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-while-19 { The break is interrupted by the try-finally } {
    
    empty_main T1420while19 {
        while (true) {
            try {
                throw new Exception();
            } catch (Exception e) {
                break;
            } finally {
                return;
            }
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-do-1
A do statement can complete normally if: The contained statement can complete normally and the condition is not constant true

Expected Result: PASS

Regression Test:

tcltest::test 14.20-do-1 { A do statement can complete normally if:
        The contained statement can complete normally and the condition is not constant true } {
    
    empty_main T1420do1 {
        boolean b = true;
        do {} while (b);
        int i;
    }

} {PASS}
Test Case: 14.20-do-2
A do statement can complete normally if: The do statement contains a reachable unlabeled continue statement for the do, with condition not constant true

Expected Result: PASS

Regression Test:

tcltest::test 14.20-do-2 { A do statement can complete normally if:
        The do statement contains a reachable unlabeled continue statement
        for the do, with condition not constant true } {
    
    empty_main T1420do2 {
        boolean b = true;
        do continue; while (b);
        int i;
    }

} {PASS}
Test Case: 14.20-do-3
A do statement can complete normally if: The do statement contains a reachable labeled continue statement for the do, with condition not constant true

Expected Result: PASS

Regression Test:

tcltest::test 14.20-do-3 { A do statement can complete normally if:
        The do statement contains a reachable labeled continue statement
        for the do, with condition not constant true } {
    
    empty_main T1420do3 {
        boolean b = true;
        a: do continue a; while (b);
        int i;
    }

} {PASS}
Test Case: 14.20-do-4
A do statement can complete normally if: There is a reachable break statement that exits the do statement.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-do-4 { A do statement can complete normally if:
        There is a reachable break statement that exits the do statement. } {
    
    empty_main T1420do4 {
        do break; while (true);
        int i;
    }

} {PASS}
Test Case: 14.20-do-5
A do statement cannot complete normally iff all four preceding conditions are not met

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-5 { A do statement cannot complete normally iff
        all four preceding conditions are not met } {
    
    empty_main T1420do5 {
        int i;
        do i = 1;
        while (true);
        int j;
    }

} {FAIL}
Test Case: 14.20-do-6
A do statement cannot complete normally iff all four preceding conditions are not met

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-6 { A do statement cannot complete normally iff
        all four preceding conditions are not met } {
    
    empty_main T1420do6 {
        int i;
        do i = 1;
        while (true);
        ;
    }

} {FAIL}
Test Case: 14.20-do-7
A do statement cannot complete normally iff all four preceding conditions are not met

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-7 { A do statement cannot complete normally iff
        all four preceding conditions are not met } {
    
    empty_main T1420do7 {
        int i;
        do i = 1;
        while (true);
        {}
    }

} {FAIL}
Test Case: 14.20-do-8
A do statement cannot complete normally iff all four preceding conditions are not met

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-8 { A do statement cannot complete normally iff
        all four preceding conditions are not met } {
    
    empty_main T1420do8 {
        int i;
        do i = 1;
        while (true);
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-do-9
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-9 { The break is interrupted by the try-finally } {
    
    empty_main T1420do9 {
        do try {
            break;
        } finally {
            return;
        } while (true);
        int i;
    }

} {FAIL}
Test Case: 14.20-do-10
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-10 { The break is interrupted by the try-finally } {
    
    empty_main T1420do10 {
        do try {
            break;
        } finally {
            return;
        } while (true);
        ;
    }

} {FAIL}
Test Case: 14.20-do-11
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-11 { The break is interrupted by the try-finally } {
    
    empty_main T1420do11 {
        do try {
            break;
        } finally {
            return;
        } while (true);
        {}
    }

} {FAIL}
Test Case: 14.20-do-12
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-12 { The break is interrupted by the try-finally } {
    
    empty_main T1420do12 {
        do try {
            break;
        } finally {
            return;
        } while (true);
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-do-13
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-13 { The break is interrupted by the try-finally } {
    
    empty_main T1420do13 {
        do try {
            throw new Exception();
        } catch (Exception e) {
            break;
        } finally {
            return;
        } while (true);
        int i;
    }

} {FAIL}
Test Case: 14.20-do-14
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-14 { The break is interrupted by the try-finally } {
    
    empty_main T1420do14 {
        do try {
            throw new Exception();
        } catch (Exception e) {
            break;
        } finally {
            return;
        } while (true);
        ;
    }

} {FAIL}
Test Case: 14.20-do-15
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-15 { The break is interrupted by the try-finally } {
    
    empty_main T1420do15 {
        do try {
            throw new Exception();
        } catch (Exception e) {
            break;
        } finally {
            return;
        } while (true);
        {}
    }

} {FAIL}
Test Case: 14.20-do-16
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-16 { The break is interrupted by the try-finally } {
    
    empty_main T1420do16 {
        do try {
            throw new Exception();
        } catch (Exception e) {
            break;
        } finally {
            return;
        } while (true);
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-do-17
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-17 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do17 {
        do try {
            continue;
        } finally {
            return;
        } while (false);
        int i;
    }

} {FAIL}
Test Case: 14.20-do-18
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-18 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do18 {
        do try {
            continue;
        } finally {
            return;
        } while (false);
        ;
    }

} {FAIL}
Test Case: 14.20-do-19
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-19 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do19 {
        do try {
            continue;
        } finally {
            return;
        } while (false);
        {}
    }

} {FAIL}
Test Case: 14.20-do-20
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-20 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do20 {
        do try {
            continue;
        } finally {
            return;
        } while (false);
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-do-21
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-21 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do21 {
        do try {
            throw new Exception();
        } catch (Exception e) {
            continue;
        } finally {
            return;
        } while (false);
        int i;
    }

} {FAIL}
Test Case: 14.20-do-22
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-22 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do22 {
        do try {
            throw new Exception();
        } catch (Exception e) {
            continue;
        } finally {
            return;
        } while (false);
        ;
    }

} {FAIL}
Test Case: 14.20-do-23
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-23 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do23 {
        do try {
            throw new Exception();
        } catch (Exception e) {
            continue;
        } finally {
            return;
        } while (false);
        {}
    }

} {FAIL}
Test Case: 14.20-do-24
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-24 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do24 {
        do try {
            throw new Exception();
        } catch (Exception e) {
            continue;
        } finally {
            return;
        } while (false);
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-do-25
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-25 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do25 {
        a: do try {
            continue a;
        } finally {
            return;
        } while (false);
        int i;
    }

} {FAIL}
Test Case: 14.20-do-26
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-26 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do26 {
        a: do try {
            continue a;
        } finally {
            return;
        } while (false);
        ;
    }

} {FAIL}
Test Case: 14.20-do-27
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-27 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do27 {
        a: do try {
            continue a;
        } finally {
            return;
        } while (false);
        {}
    }

} {FAIL}
Test Case: 14.20-do-28
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-28 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do28 {
        a: do try {
            continue a;
        } finally {
            return;
        } while (false);
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-do-29
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-29 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do29 {
        a: do try {
            throw new Exception();
        } catch (Exception e) {
            continue a;
        } finally {
            return;
        } while (false);
        int i;
    }

} {FAIL}
Test Case: 14.20-do-30
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-30 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do30 {
        a: do try {
            throw new Exception();
        } catch (Exception e) {
            continue a;
        } finally {
            return;
        } while (false);
        ;
    }

} {FAIL}
Test Case: 14.20-do-31
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-31 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do31 {
        a: do try {
            throw new Exception();
        } catch (Exception e) {
            continue a;
        } finally {
            return;
        } while (false);
        {}
    }

} {FAIL}
Test Case: 14.20-do-32
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-32 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do32 {
        a: do try {
            throw new Exception();
        } catch (Exception e) {
            continue a;
        } finally {
            return;
        } while (false);
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-do-33
The continue is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-do-33 { The continue is interrupted by the try-finally } {
    
    empty_main T1420do33 {
        a: do {
            try {
                throw new Exception();
            } catch (Exception e) {
                continue a;
            } finally {
                return;
            }
        } while (false);
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-do-34
A do statement can complete normally if: The do statement contains a reachable labeled continue statement for the do, with condition not constant true

Expected Result: PASS

Regression Test:

tcltest::test 14.20-do-34 { A do statement can complete normally if:
        The do statement contains a reachable labeled continue statement
        for the do, with condition not constant true } {
    
    empty_main T1420do34 {
	a: do try {
	    throw new Exception();
	} catch (Exception e) {
	} finally {
	    continue a;
	} while (false);
	a: do try {
	} finally {
	    continue a;
	} while (false);
        int i = 1;
    }

} {PASS}
Test Case: 14.20-for-1
A for statement can complete normally if: The condition statement exists and is non-constant

Expected Result: PASS

Regression Test:

tcltest::test 14.20-for-1 { A for statement can complete normally if:
        The condition statement exists and is non-constant } {
    
    empty_main T1420for1 {
        boolean b = true;
        for ( ; b; );
        int i;
    }

} {PASS}
Test Case: 14.20-for-2
A for statement can complete normally if: There is a reachable break statement that exits the for statement.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-for-2 { A for statement can complete normally if:
        There is a reachable break statement that exits the for statement. } {
    
    empty_main T1420for2 {
        for ( ; ; ) break;
        int i;
    }

} {PASS}
Test Case: 14.20-for-3
A for statement cannot complete normally if there is no condition or the condition is constant true, and there is no break

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-3 { A for statement cannot complete normally if there
        is no condition or the condition is constant true, and there is no break } {
    
    empty_main T1420for3 {
        for ( ; ; );
        int i;
    }

} {FAIL}
Test Case: 14.20-for-4
A for statement cannot complete normally if there is no condition or the condition is constant true, and there is no break

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-4 { A for statement cannot complete normally if there
        is no condition or the condition is constant true, and there is no break } {
    
    empty_main T1420for4 {
        for ( ; ; );
        ;
    }

} {FAIL}
Test Case: 14.20-for-5
A for statement cannot complete normally if there is no condition or the condition is constant true, and there is no break

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-5 { A for statement cannot complete normally if there
        is no condition or the condition is constant true, and there is no break } {
    
    empty_main T1420for5 {
        for ( ; ; );
        {}
    }

} {FAIL}
Test Case: 14.20-for-6
A for statement cannot complete normally if there is no condition or the condition is constant true, and there is no break

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-6 { A for statement cannot complete normally if there
        is no condition or the condition is constant true, and there is no break } {
    
    empty_main T1420for6 {
        for ( ; ; );
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-for-7
A for statement cannot complete normally if there is no condition or the condition is constant true, and there is no break

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-7 { A for statement cannot complete normally if there
        is no condition or the condition is constant true, and there is no break } {
    
    empty_main T1420for7 {
        for ( ; true; );
        int i;
    }

} {FAIL}
Test Case: 14.20-for-8
A for statement cannot complete normally if there is no condition or the condition is constant true, and there is no break

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-8 { A for statement cannot complete normally if there
        is no condition or the condition is constant true, and there is no break } {
    
    empty_main T1420for8 {
        for ( ; true; );
        ;
    }

} {FAIL}
Test Case: 14.20-for-9
A for statement cannot complete normally if there is no condition or the condition is constant true, and there is no break

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-9 { A for statement cannot complete normally if there
        is no condition or the condition is constant true, and there is no break } {
    
    empty_main T1420for9 {
        for ( ; true; );
        {}
    }

} {FAIL}
Test Case: 14.20-for-10
A for statement cannot complete normally if there is no condition or the condition is constant true, and there is no break

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-10 { A for statement cannot complete normally if there
        is no condition or the condition is constant true, and there is no break } {
    
    empty_main T1420for10 {
        for ( ; true; );
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-for-11
A for statement cannot have a constant false condition

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-11 { A for statement cannot have a constant false condition } {
    
    empty_main T1420for11 {
        int i;
        for( ; false; ) i = 1;
    }

} {FAIL}
Test Case: 14.20-for-12
A for statement cannot have a constant false condition

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-12 { A for statement cannot have a constant false condition } {
    
    empty_main T1420for12 {
        for ( ; false; );
    }

} {FAIL}
Test Case: 14.20-for-13
A for statement cannot have a constant false condition

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-13 { A for statement cannot have a constant false condition } {
    
    empty_main T1420for13 {
        for ( ; false; ) {}
    }

} {FAIL}
Test Case: 14.20-for-14
A for statement cannot have a constant false condition

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-14 { A for statement cannot have a constant false condition } {
    
    empty_main T1420for14 {
        for ( ; false; ) { int x=3; }
    }

} {FAIL}
Test Case: 14.20-for-15
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-15 { The break is interrupted by the try-finally } {
    
    empty_main T1420for15 {
        for ( ; ; )
            try {
                break;
            } finally {
                return;
            }
        int i;
    }

} {FAIL}
Test Case: 14.20-for-16
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-16 { The break is interrupted by the try-finally } {
    
    empty_main T1420for16 {
        for ( ; ; )
            try {
                break;
            } finally {
                return;
            }
        ;
    }

} {FAIL}
Test Case: 14.20-for-17
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-17 { The break is interrupted by the try-finally } {
    
    empty_main T1420for17 {
        for ( ; ; )
            try {
                break;
            } finally {
                return;
            }
        {}
    }

} {FAIL}
Test Case: 14.20-for-18
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-18 { The break is interrupted by the try-finally } {
    
    empty_main T1420for18 {
        for ( ; ; )
            try {
                break;
            } finally {
                return;
            }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-for-19
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-19 { The break is interrupted by the try-finally } {
    
    empty_main T1420for19 {
        for ( ; ; )
            try {
                throw new Exception();
            } catch (Exception e) {
                break;
            } finally {
                return;
            }
        int i;
    }

} {FAIL}
Test Case: 14.20-for-20
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-20 { The break is interrupted by the try-finally } {
    
    empty_main T1420for20 {
        for ( ; ; )
            try {
                throw new Exception();
            } catch (Exception e) {
                break;
            } finally {
                return;
            }
        ;
    }

} {FAIL}
Test Case: 14.20-for-21
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-21 { The break is interrupted by the try-finally } {
    
    empty_main T1420for21 {
        for ( ; ; )
            try {
                throw new Exception();
            } catch (Exception e) {
                break;
            } finally {
                return;
            }
        {}
    }

} {FAIL}
Test Case: 14.20-for-22
The break is interrupted by the try-finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-for-22 { The break is interrupted by the try-finally } {
    
    empty_main T1420for22 {
        for ( ; ; )
            try {
                throw new Exception();
            } catch (Exception e) {
                break;
            } finally {
                return;
            }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-abrupt-1
break cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-1 { break cannot complete normally } {
    
    empty_main T1420abrupt1 {
        while (true) {
            break;
            int i;
        }
    }

} {FAIL}
Test Case: 14.20-abrupt-2
break cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-2 { break cannot complete normally } {
    
    empty_main T1420abrupt2 {
        while (true) {
            break;
            ;
        }
    }

} {FAIL}
Test Case: 14.20-abrupt-3
break cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-3 { break cannot complete normally } {
    
    empty_main T1420abrupt3 {
        while (true) {
            break;
            {}
        }
    }

} {FAIL}
Test Case: 14.20-abrupt-4
break cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-4 { break cannot complete normally } {
    
    empty_main T1420abrupt4 {
        while (true) {
            break;
            { int x=3; }
        }
    }

} {FAIL}
Test Case: 14.20-abrupt-5
continue cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-5 { continue cannot complete normally } {
    
    empty_main T1420abrupt5 {
        while (true) {
            continue;
            int i;
        }
    }

} {FAIL}
Test Case: 14.20-abrupt-6
continue cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-6 { continue cannot complete normally } {
    
    empty_main T1420abrupt6 {
        while (true) {
            continue;
            ;
        }
    }

} {FAIL}
Test Case: 14.20-abrupt-7
continue cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-7 { continue cannot complete normally } {
    
    empty_main T1420abrupt7 {
        while (true) {
            continue;
            {}
        }
    }

} {FAIL}
Test Case: 14.20-abrupt-8
continue cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-8 { continue cannot complete normally } {
    
    empty_main T1420abrupt8 {
        while (true) {
            continue;
            { int x=3; }
        }
    }

} {FAIL}
Test Case: 14.20-abrupt-9
return cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-9 { return cannot complete normally } {
    
    empty_main T1420abrupt9 {
        return;
        int i;
    }

} {FAIL}
Test Case: 14.20-abrupt-10
return cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-10 { return cannot complete normally } {
    
    empty_main T1420abrupt10 {
        return;
        ;
    }

} {FAIL}
Test Case: 14.20-abrupt-11
return cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-11 { return cannot complete normally } {
    
    empty_main T1420abrupt11 {
        return;
        {}
    }

} {FAIL}
Test Case: 14.20-abrupt-12
return cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-12 { return cannot complete normally } {
    
    empty_main T1420abrupt12 {
        return;
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-abrupt-13
throw cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-13 { throw cannot complete normally } {
    
    empty_main T1420abrupt13 {
        throw new RuntimeException();
        int i;
    }

} {FAIL}
Test Case: 14.20-abrupt-14
throw cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-14 { throw cannot complete normally } {
    
    empty_main T1420abrupt14 {
        throw new RuntimeException();
        ;
    }

} {FAIL}
Test Case: 14.20-abrupt-15
throw cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-15 { throw cannot complete normally } {
    
    empty_main T1420abrupt15 {
        throw new RuntimeException();
        {}
    }

} {FAIL}
Test Case: 14.20-abrupt-16
throw cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-abrupt-16 { throw cannot complete normally } {
    
    empty_main T1420abrupt16 {
        throw new RuntimeException();
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-synchronized-1
synchronized completes normally iff the contained block does as well

Expected Result: PASS

Regression Test:

tcltest::test 14.20-synchronized-1 { synchronized completes normally iff the
        contained block does as well } {
    
    empty_main T1420synch1 {
        synchronized (args) {}
        int i;
    }

} {PASS}
Test Case: 14.20-synchronized-2
synchronized completes normally iff the contained block does as well

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-synchronized-2 { synchronized completes normally iff the
        contained block does as well } {
    
    empty_main T1420synch2 {
        synchronized (args) {
            return;
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-synchronized-3
synchronized completes normally iff the contained block does as well

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-synchronized-3 { synchronized completes normally iff the
        contained block does as well } {
    
    empty_main T1420synch3 {
        synchronized (args) {
            return;
        }
        ;
    }

} {FAIL}
Test Case: 14.20-synchronized-4
synchronized completes normally iff the contained block does as well

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-synchronized-4 { synchronized completes normally iff the
        contained block does as well } {
    
    empty_main T1420synch4 {
        synchronized (args) {
            return;
        }
        {}
    }

} {FAIL}
Test Case: 14.20-synchronized-5
synchronized completes normally iff the contained block does as well

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-synchronized-5 { synchronized completes normally iff the
        contained block does as well } {
    
    empty_main T1420synch5 {
        synchronized (args) {
            return;
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-try-1
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-try-1 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try1 {
        try {
            new Object();
        } catch (RuntimeException e) {
            return;
        }
        int i;
    }

} {PASS}
Test Case: 14.20-try-2
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-2 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try2 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-try-3
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-3 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try3 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        }
        ;
    }

} {FAIL}
Test Case: 14.20-try-4
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-4 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try4 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        }
        {}
    }

} {FAIL}
Test Case: 14.20-try-5
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-5 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try5 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-try-6
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-try-6 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try6 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } catch (Throwable t) {
        }
        int i;
    }

} {PASS}
Test Case: 14.20-try-7
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-try-7 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try7 {
        try {
            new Object();
        } catch (RuntimeException e) {
            return;
        } finally {
        }
        int i;
    }

} {PASS}
Test Case: 14.20-try-8
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-8 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try8 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } finally {
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-try-9
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-9 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try9 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } finally {
        }
        ;
    }

} {FAIL}
Test Case: 14.20-try-10
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-10 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try10 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } finally {
        }
        {}
    }

} {FAIL}
Test Case: 14.20-try-11
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-11 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try11 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } finally {
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-try-12
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-try-12 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try12 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } catch (Throwable t) {
        } finally {
        }
        int i;
    }

} {PASS}
Test Case: 14.20-try-13
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-13 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try13 {
        try {
            new Object();
        } catch (Exception e) {
            return;
        } finally {
            return;
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-try-14
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-14 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try14 {
        try {
            new Object();
        } catch (Exception e) {
            return;
        } finally {
            return;
        }
        ;
    }

} {FAIL}
Test Case: 14.20-try-15
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-15 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try15 {
        try {
            new Object();
        } catch (Exception e) {
            return;
        } finally {
            return;
        }
        {}
    }

} {FAIL}
Test Case: 14.20-try-16
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-16 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try16 {
        try {
            new Object();
        } catch (Exception e) {
            return;
        } finally {
            return;
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-try-17
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-17 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try17 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } finally {
            return;
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-try-18
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-18 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try18 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } finally {
            return;
        }
        ;
    }

} {FAIL}
Test Case: 14.20-try-19
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-19 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try19 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } finally {
            return;
        }
        {}
    }

} {FAIL}
Test Case: 14.20-try-20
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-20 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try20 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } finally {
            return;
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-try-21
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-21 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try21 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } catch (Throwable t) {
        } finally {
            return;
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-try-22
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-22 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try22 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } catch (Throwable t) {
        } finally {
            return;
        }
        ;
    }

} {FAIL}
Test Case: 14.20-try-23
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-23 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try23 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } catch (Throwable t) {
        } finally {
            return;
        }
        {}
    }

} {FAIL}
Test Case: 14.20-try-24
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-24 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try24 {
        try {
            throw new Exception();
        } catch (Exception e) {
            return;
        } catch (Throwable t) {
        } finally {
            return;
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-try-25
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-try-25 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try25 {
        try {
            new Object();
        } finally {
        }
        int i;
    }

} {PASS}
Test Case: 14.20-try-26
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-26 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try26 {
        try {
            throw new RuntimeException();
        } finally {
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-try-27
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-27 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try27 {
        try {
            throw new RuntimeException();
        } finally {
        }
        ;
    }

} {FAIL}
Test Case: 14.20-try-28
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-28 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try28 {
        try {
            throw new RuntimeException();
        } finally {
        }
        {}
    }

} {FAIL}
Test Case: 14.20-try-29
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-29 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try29 {
        try {
            throw new RuntimeException();
        } finally {
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-try-30
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-30 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try30 {
        try {
            new Object();
        } finally {
            return;
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-try-31
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-31 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try31 {
        try {
            new Object();
        } finally {
            return;
        }
        ;
    }

} {FAIL}
Test Case: 14.20-try-32
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-32 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try32 {
        try {
            new Object();
        } finally {
            return;
        }
        {}
    }

} {FAIL}
Test Case: 14.20-try-33
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-33 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try33 {
        try {
            new Object();
        } finally {
            return;
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-try-34
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-34 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try34 {
        try {
            throw new Exception();
        } finally {
            return;
        }
        int i;
    }

} {FAIL}
Test Case: 14.20-try-35
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-35 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try35 {
        try {
            throw new Exception();
        } finally {
            return;
        }
        ;
    }

} {FAIL}
Test Case: 14.20-try-36
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-36 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try36 {
        try {
            throw new Exception();
        } finally {
            return;
        }
        {}
    }

} {FAIL}
Test Case: 14.20-try-37
A try statement can complete normally iff both: The try block can complete normally or any catch block can complete normally. The finally block, if present, can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-try-37 { A try statement can complete normally iff both:
        The try block can complete normally or any catch block can complete normally.
        The finally block, if present, can complete normally. } {
    
    empty_main T1420try37 {
        try {
            throw new Exception();
        } finally {
            return;
        }
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-catch-1
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-1 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch1 {
        try { // empty block cannot throw exception
        } catch (Throwable t) {
            // but Throwable is superclass of asynchronous exceptions
        }
    }

} {PASS}
Test Case: 14.20-catch-2
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-2 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch2 {
        try {
            int i = 0; // throws no exceptions
            i /= i; // can only throw ArithmeticException
        } catch (ClassCastException e) {
            // but ClassCastException is unchecked
        }
    }

} {PASS}
Test Case: 14.20-catch-3
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-3 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch3 {
        try {
            throw new Exception();
        } catch (Exception e) {
        }
    }

} {PASS}
Test Case: 14.20-catch-4
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-catch-4 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch4 {
        try {
            throw new Exception();
        } catch (Throwable t) {
        } catch (Exception e) {
        }
    }

} {FAIL}
Test Case: 14.20-catch-5
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-5 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch5 {
        try {
            throw new Exception();
        } catch (Exception e) {
        } catch (Throwable t) {
            // possible Error creating new Exception
        }
    }

} {PASS}
Test Case: 14.20-catch-6
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-6 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch6 {
        try {
            new Object();
        } catch (RuntimeException e) {
        } catch (Error err) {
        }
    }

} {PASS}
Test Case: 14.20-catch-7
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: OK

Regression Test:

tcltest::test 14.20-catch-7 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    ok_pass_or_warn [compile [saveas T1420catch7.java {
class T1420catch7 {
    void foo() {
        try {
            new Object();
        } catch (Exception e) {
        } catch (Throwable t) {
        }
    }
}
    }]]

} {OK}
Test Case: 14.20-catch-8
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-catch-8 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch8 {
        try {
            throw new Exception();
        } catch (Exception e) {
        } catch (Exception e1) {
        }
    }

} {FAIL}
Test Case: 14.20-catch-9
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-9 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch9 {
        int i, j=0;
        try {
            i = 1/j;
        } catch (ArithmeticException ae) {
        }
    }

} {PASS}
Test Case: 14.20-catch-10
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-10 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch10 {
        int i, j=0;
        try {
            i = 1/j;
        } catch (ArithmeticException ae) {
        } catch (RuntimeException re) {
            // the only possible exception, ae, has already been caught,
            // but this is unchecked
        }
    }

} {PASS}
Test Case: 14.20-catch-11
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-11 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_class T1420catch11 {
        void choke() throws Exception {
            throw new ClassNotFoundException();
        }
        void foo() throws Exception {
            try {
                choke();
            } catch (ClassNotFoundException e) {
                // reachable, as choke() can throw any subclass
            }
        }
    }

} {PASS}
Test Case: 14.20-catch-12
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-12 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_class T1420catch12 {
        void foo() throws Exception {
            try {
                throw new Exception();
            } catch (ClassNotFoundException e) {
                // reachable, although the class instance creation cannot
                // create a subclass of Exception
            }
        }
    }

} {PASS}
Test Case: 14.20-catch-13
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-13 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch13 {
        try {
            return; // throws nothing
        } catch (RuntimeException e) {
            // but this is unchecked
        }
    }

} {PASS}
Test Case: 14.20-catch-14
The throw is interrupted by the inner finally

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-14 { The throw is interrupted by the inner finally } {
    
    empty_main T1420catch14 {
        Exception e = new Exception(); // create here to make test work
        try {
            try {
                throw e;
            } finally {
                return; // discards Exception e
            }
        } catch (Exception e1) {
            // but this is unchecked
        }
    }

} {PASS}
Test Case: 14.20-catch-15
The throw is interrupted by the inner finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-catch-15 { The throw is interrupted by the inner finally } {
    
    empty_main T1420catch15 {
        try {
            try {
                throw new ClassNotFoundException();
            } finally {
                return; // discards ClassNotFoundException
            }
        } catch (ClassNotFoundException e) {
            // this is unreachable
        }
    }

} {FAIL}
Test Case: 14.20-catch-16
The throw is interrupted by the inner finally

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-16 { The throw is interrupted by the inner finally } {
    
    empty_main T1420catch16 {
        Exception e = new Exception(); // create here to make test work
        try {
            try {
                throw e;
            } catch (Exception e1) {
                throw e1;
            } finally {
                return; // discards Exception e1
            }
        } catch (Exception e2) {
            // but Exception is superclass of asynchronous exceptions
        }
    }

} {PASS}
Test Case: 14.20-catch-17
The throw is interrupted by the inner finally

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-catch-17 { The throw is interrupted by the inner finally } {
    
    empty_main T1420catch17 {
        try {
            try {
                throw new ClassNotFoundException();
            } catch (ClassNotFoundException e) {
                throw e;
            } finally {
                return; // discards ClassNotFoundException
            }
        } catch (ClassNotFoundException e1) {
            // this is unreachable
        }
    }

} {FAIL}
Test Case: 14.20-catch-18
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-18 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch18 {
        try {
            try {
                throw new Exception();
            } catch (Throwable t) {
                // traps all exceptions
            }
        } catch (Exception e) {
            // but this is unchecked
        }
    }

} {PASS}
Test Case: 14.20-catch-19
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-19 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_class T1420catch19 {
        class MyException extends ClassNotFoundException {}
        void foo() throws Exception {
            ClassNotFoundException c = new MyException();
            try {
                throw c;
            } catch (MyException e) {
                // reachable, as variable reference can contain subclass
            }
        }
    }

} {PASS}
Test Case: 14.20-catch-20
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-20 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch20 {
        class MyException extends ArithmeticException {}
        try {
            int i = 0;
            i /= i; // throws only ArithmeticException, not MyException
        } catch (MyException e) {
            // but this is unchecked
        }
    }

} {PASS}
Test Case: 14.20-catch-21
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-21 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch21 {
        final Exception e = new ClassNotFoundException();
        try {
            throw e;
        } catch (ClassNotFoundException c) {
            // this one will be called
        } catch (Exception ex) {
            // this one is reachable, but will never be executed,
            // since analysis does not evaluate variable contents
        }
    }

} {PASS}
Test Case: 14.20-catch-22
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-22 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch22 {
        class MyException extends ClassNotFoundException {}
        try {
            throw new MyException();
        } catch (MyException m) {
        } catch (ClassNotFoundException e) {
            // this one is reachable, but will never be executed,
            // as the only exception in the try block has already been caught
        }
    }

} {PASS}
Test Case: 14.20-catch-23
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-catch-23 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch23 {
        try {
            new Object();
        } catch (RuntimeException r) {
        } catch (Error er) {
        } catch (Exception e) {
            // this one is reachable, but will never be executed,
            // as the try block can only throw RuntimeException or
            // Error, which have already been caught
        }
    }

} {PASS}
Test Case: 14.20-catch-24
A catch block C is reachable iff both: Some reachable expression or throw statement throws assignable exception. No earlier catch block covers type C or superclass.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-catch-24 { A catch block C is reachable iff both:
        Some reachable expression or throw statement throws assignable exception.
        No earlier catch block covers type C or superclass. } {
    
    empty_main T1420catch24 {
        try {
            new Object();
        } catch (RuntimeException e) {
        } catch (NullPointerException n) {
            // although this is unchecked, it is a subclass of
            // a prior clause
        }
    }

} {FAIL}
Test Case: 14.20-if-1
if-then can complete normally iff it is reachable

Expected Result: PASS

Regression Test:

tcltest::test 14.20-if-1 { if-then can complete normally iff it is reachable } {
    
    empty_main T1420if1 {
        if (true)
            return;
        int i;
    }

} {PASS}
Test Case: 14.20-if-2
then-statement of if-then is reachable

Expected Result: PASS

Regression Test:

tcltest::test 14.20-if-2 { then-statement of if-then is reachable } {
    
    empty_main T1420if2 {
        int i;
        if (false)
           i = 1;
    }

} {PASS}
Test Case: 14.20-if-3
if-then-else can complete normally iff then-statement or else-statement can complete normally.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-if-3 { if-then-else can complete normally iff
        then-statement or else-statement can complete normally. } {
    
    empty_main T1420if3 {
        if (true)
            return;
        else
            ;
        int i;
    }

} {PASS}
Test Case: 14.20-if-4
if-then-else can complete normally iff then-statement or else-statement can complete normally.

Expected Result: PASS

Regression Test:

tcltest::test 14.20-if-4 { if-then-else can complete normally iff
        then-statement or else-statement can complete normally. } {
    
    empty_main T1420if4 {
        if (false)
            ;
        else
            return;
        int i;
    }

} {PASS}
Test Case: 14.20-if-5
if-then-else can complete normally iff then-statement or else-statement can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-if-5 { if-then-else can complete normally iff
        then-statement or else-statement can complete normally. } {
    
    empty_main T1420if5 {
        if (true)
            return;
        else
            return;
        int i;
    }

} {FAIL}
Test Case: 14.20-if-6
if-then-else can complete normally iff then-statement or else-statement can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-if-6 { if-then-else can complete normally iff
        then-statement or else-statement can complete normally. } {
    
    empty_main T1420if6 {
        if (true)
            return;
        else
            return;
        ;
    }

} {FAIL}
Test Case: 14.20-if-7
if-then-else can complete normally iff then-statement or else-statement can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-if-7 { if-then-else can complete normally iff
        then-statement or else-statement can complete normally. } {
    
    empty_main T1420if7 {
        if (true)
            return;
        else
            return;
        {}
    }

} {FAIL}
Test Case: 14.20-if-8
if-then-else can complete normally iff then-statement or else-statement can complete normally.

Expected Result: FAIL

Regression Test:

tcltest::test 14.20-if-8 { if-then-else can complete normally iff
        then-statement or else-statement can complete normally. } {
    
    empty_main T1420if8 {
        if (true)
            return;
        else
            return;
        { int x=3; }
    }

} {FAIL}
Test Case: 14.20-for-update-1
A statement in the for update is reachable, even when it is not executed (this is underspecified in the JLS)

Expected Result: PASS

Regression Test:

tcltest::test 14.20-for-update-1 { A statement in the for update is reachable,
        even when it is not executed (this is underspecified in the JLS) } {
    
    empty_main T1420fu1 {
        for (int i = 0; ; i++) break;
    }

} {PASS}

15.8.2

Directory : tests/jls/expressions/primary-expressions/class-literals


Test Case: 15.8.2-type-1
The class literal may be for any type

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-type-1 { The class literal may be for any type } {
    
    empty_main T1582t1 {
        Class c = Object.class;
    }

} {PASS}
Test Case: 15.8.2-type-2
The class literal may be for any type

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-type-2 { The class literal may be for any type } {
    
    empty_main T1582t2 {
        Class c = T1582t2.class;
    }

} {PASS}
Test Case: 15.8.2-type-3
The class literal may be for any type

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-type-3 { The class literal may be for any type } {
    
    empty_main T1582t3 {
        Class c = Runnable.class;
    }

} {PASS}
Test Case: 15.8.2-type-4
The class literal may be for any type

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-type-4 { The class literal may be for any type } {
    
    empty_main T1582t4 {
        Class c = void.class;
    }

} {PASS}
Test Case: 15.8.2-type-5
The class literal may be for any type

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-type-5 { The class literal may be for any type } {
    
    empty_main T1582t5 {
        Class c = int.class;
    }

} {PASS}
Test Case: 15.8.2-type-6
The class literal may be for any type

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-type-6 { The class literal may be for any type } {
    
    empty_main T1582t6 {
        Class c = int[].class;
    }

} {PASS}
Test Case: 15.8.2-type-7
The class literal may be for any type

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-type-7 { The class literal may be for any type } {
    
    empty_main T1582t7 {
        Class c = Object[].class;
    }

} {PASS}
Test Case: 15.8.2-type-8
The class literal may be for any type

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-type-8 { The class literal may be for any type } {
    
    empty_main T1582t8 {
        Class c = Runnable[][][][][][].class;
    }

} {PASS}
Test Case: 15.8.2-type-9
The class literal must be a known type

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-type-9 { The class literal must be a known type } {
    
    empty_main T1582t9 {
        Class c = UnknownType.class;
    }

} {FAIL}
Test Case: 15.8.2-type-10
The class literal must be a valid type

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-type-10 { The class literal must be a valid type } {
    
    # Note that a has a syntax error. b should not compile - jikes bug 3319.
    compile [saveas T1582t10a.java "class T1582t10a \{\}\}"]  [saveas T1582t10b.java {
class T1582t10b {
    Class c = T1582t10a.class;
}
    }]

} {FAIL}
Test Case: 15.8.2-type-11
The class literal must be an accessible type

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-type-11 { The class literal must be an accessible type } {
    
    compile [saveas T1582t11a.java {
class T1582t11a {
    private class Inner {}
}
class T1582t11b {
    Class c = T1582t11a.Inner.class;
}
    }]

} {FAIL}
Test Case: 15.8.2-type-12
The class literal must be an accessible type

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-type-12 { The class literal must be an accessible type } {
    
    compile [saveas T1582t12a.java {
class T1582t12a {
    private class Inner {}
}
class T1582t12b extends T1582t12a {
    Class c = T1582t12a.Inner.class;
}
    }]

} {FAIL}
Test Case: 15.8.2-type-13
The class literal must be an accessible type

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-type-13 { The class literal must be an accessible type } {
    
    compile [saveas p1/T1582t13a.java {
package p1;
class T1582t13a {}
    }] [saveas T1582t13b.java {
class T1582t13b {
    Class c = p1.T1582t13a.class;
}
    }]

} {FAIL}
Test Case: 15.8.2-type-14
The class literal must be an accessible type

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-type-14 { The class literal must be an accessible type } {
    
    compile [saveas p1/T1582t14a.java {
package p1;
class T1582t14a {}
    }] [saveas T1582t14b.java {
class T1582t14b {
    Class c = p1.T1582t14a[].class;
}
    }]

} {FAIL}
Test Case: 15.8.2-primary-1
The class literal serves as a primary

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-primary-1 { The class literal serves as a primary } {
    
    empty_main T1582p1 {
        Object.class.getName();
    }

} {PASS}
Test Case: 15.8.2-primary-2
The class literal serves as a primary

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-primary-2 { The class literal serves as a primary } {
    
    empty_main T1582p2 {
	try {
	    Object.class.forName("java.lang.Object");
	} catch (Exception e) {
	}
    }

} {PASS}
Test Case: 15.8.2-syntax-1
The class literal does not work on expressions

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-syntax-1 { The class literal does not work on
        expressions } {
    
    empty_class T1582s1 {
        Class c = this.class;
    }

} {FAIL}
Test Case: 15.8.2-syntax-2
The class literal does not work on expressions

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-syntax-2 { The class literal does not work on
        expressions } {
    
    empty_class T1582s2 {
        Class c = (Object).class;
    }

} {FAIL}
Test Case: 15.8.2-syntax-3
The class literal does not work on expressions

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-syntax-3 { The class literal does not work on
        expressions } {
    
    empty_class T1582s3 {
        Class c = 1.class;
    }

} {FAIL}
Test Case: 15.8.2-syntax-4
The class literal does not work on expressions

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-syntax-4 { The class literal does not work on
        expressions } {
    
    empty_class T1582s4 {
        Class c = "".class;
    }

} {FAIL}
Test Case: 15.8.2-syntax-5
The class literal does not work on expressions

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-syntax-5 { The class literal does not work on
        expressions } {
    
    empty_class T1582s5 {
        int foo;
        Class c = foo.class;
    }

} {FAIL}
Test Case: 15.8.2-syntax-6
The class literal does not work on expressions

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-syntax-6 { The class literal does not work on
        expressions } {
    
    empty_class T1582s6 {
        int foo;
        Class c = null.class;
    }

} {FAIL}
Test Case: 15.8.2-syntax-7
The type in the class literal is not obscured

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-syntax-7 { The type in the class literal is not
        obscured } {
    
    empty_class T1582s7 {
        int T1582s7; // obscure the class name from normal expressions
        Class c = T1582s7.class;
    }

} {PASS}
Test Case: 15.8.2-syntax-8
The class literal does not work on void[]

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.2-syntax-8 { The class literal does not work on void[] } {
    
    empty_class T1582s8 {
	Class c = void[].class;
    }

} {FAIL}
Test Case: 15.8.2-synthetic-1
Since the compiler must generate code to compile the class literal, this tests that the synthetic class$() method does not cause problems - jikes bug 2924

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-synthetic-1 { Since the compiler must generate code to
        compile the class literal, this tests that the synthetic class$() method
        does not cause problems - jikes bug 2924 } {
    
    empty_class T1582synth1b {
	static final Object B_CONST = T1582synth1b.class;
    }
    compile [saveas T1582synth1c.java {
class T1582synth1c extends T1582synth1b {
    static final Object C_CONST = T1582synth1c.class;
}
    }]
    empty_class T1582synth1a {
	Object one = T1582synth1b.B_CONST;
	Object two = T1582synth1c.C_CONST;
    }

} {PASS}
Test Case: 15.8.2-synthetic-2
The compiler should synthesize byte.class and friends as Byte.TYPE and friends, rather than using Class.forName in the class$() method - jikes bug 3053

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-synthetic-2 { The compiler should synthesize byte.class
        and friends as Byte.TYPE and friends, rather than using Class.forName
        in the class$() method - jikes bug 3053 } {
    
    compile [saveas T1582synth2.java {
class T1582synth2 {
    Class c = byte.class;
}
    }] [saveas java/lang/Byte.java {
package java.lang;
public final class Byte extends Number implements Comparable
{
    public static final byte MIN_VALUE = -128;
    public static final byte MAX_VALUE = 127;
    // This may be recursive, but it works for the purpose of the test
    public static final Class TYPE = byte.class;
    public Byte(byte value) {}
    public Byte(String s) {}
    public static native String toString(byte b);
    public static native byte parseByte(String s);
    public static native byte parseByte(String s, int radix);
    public static native Byte valueOf(String s, int radix);
    public static native Byte valueOf(String s);
    public static native Byte decode(String s);
    public native byte byteValue();
    public native short shortValue();
    public native int intValue();
    public native long longValue();
    public native float floatValue();
    public native double doubleValue();
    public native String toString();
    public native int hashCode();
    public native boolean equals(Object obj);
    public native int compareTo(Byte b);
    public native int compareTo(Object o);
}
    }] [saveas java/dummy.java "package java; class dummy{}"]

} {PASS}
Test Case: 15.8.2-synthetic-3
Test synthesis of class literal variables across inner classes without enclosing instance

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-synthetic-3 { Test synthesis of class literal variables
        across inner classes without enclosing instance } {
    
    empty_main T1582s3 {
        class Local {
            Local(Object o) {}
            void m() {
                Class c = Boolean.class;
            }
        }
        new Local(new Object() {
            Class c = Byte.class;
        });
    }

} {PASS}
Test Case: 15.8.2-synthetic-4
Test synthesis of class literal variables in an interface field

Expected Result: PASS

Regression Test:

tcltest::test 15.8.2-synthetic-4 { Test synthesis of class literal variables
        in an interface field } {
    
    compile [saveas T1582s4a.java {
class T1582s4a {
    Class c = T1582s4b.BUG;
}
    }] [saveas T1582s4b.java {
interface T1582s4b {
    Class BUG = Inner.class;
    class Inner {}
}
    }]

} {PASS}

15.8.4

Directory : tests/jls/expressions/primary-expressions/qualified-this


Test Case: 15.8.4-static-1
Qualified this may not appear in static context

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.4-static-1 { Qualified this may not appear in static
        context } {
    
    empty_class T1584s1 {
        static int i = 1;
        static int j = T1584s1.this.i;
    }

} {FAIL}
Test Case: 15.8.4-static-2
Qualified this must name an enclosing class, which does not exist in a static context

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.4-static-2 { Qualified this must name an enclosing class,
        which does not exist in a static context } {
    
    empty_class T1584s2 {
        static int i = 1;
        static class Nested {
            int j = T1584s2.this.i;
        }
    }

} {FAIL}
Test Case: 15.8.4-name-1
Qualified this must name an enclosing class, or the class itself

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.4-name-1 { Qualified this must name an enclosing class, or
        the class itself } {
    
    empty_class T1584n1 {
        class Sub1 {
            int i;
        }
        class Sub2 extends Sub1 {
            int j = Sub1.this.i;
        }
    }

} {FAIL}
Test Case: 15.8.4-name-2
Qualified this must name an enclosing class, or the class itself

Expected Result: PASS

Regression Test:

tcltest::test 15.8.4-name-2 { Qualified this must name an enclosing class, or
        the class itself } {
    
    empty_class T1584n2 {
        int i;
        class Sub {
            int j = T1584n2.this.i;
        }
    }

} {PASS}
Test Case: 15.8.4-name-3
Qualified this must name an enclosing class, or the class itself

Expected Result: PASS

Regression Test:

tcltest::test 15.8.4-name-3 { Qualified this must name an enclosing class, or
        the class itself } {
    
    empty_class T1584n3 {
        int i;
        int j = T1584n3.this.i;
    }

} {PASS}
Test Case: 15.8.4-syntax-1
The type in the qualified this is not obscured

Expected Result: PASS

Regression Test:

tcltest::test 15.8.4-syntax-1 { The type in the qualified this is not
        obscured } {
    
    empty_class T1584syn1 {
        int T1584syn1; // obscure the class name from normal expressions
        String s = T1584syn1.this.toString();
    }

} {PASS}
Test Case: 15.8.4-syntax-2
The type in qualified this may not be a primitive type

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.4-syntax-2 { The type in qualified this may not be a
        primitive type } {
    
    empty_class T1584syn2 {
        Object o = int.this.toString();
    }

} {FAIL}
Test Case: 15.8.4-syntax-3
The type in qualified this may not be an array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.4-syntax-3 { The type in qualified this may not be an
        array type } {
    
    empty_class T1584syn3 {
        Object o = int[].this.toString();
    }

} {FAIL}
Test Case: 15.8.4-syntax-4
The type in qualified this may not be an array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.4-syntax-4 { The type in qualified this may not be an
        array type } {
    
    empty_class T1584syn4 {
        Object o = T1584syn4[].this.toString();
    }

} {FAIL}
Test Case: 15.8.4-syntax-5
The type in qualified this may not be null

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.4-syntax-5 { The type in qualified this may not be null } {
    
    empty_class T1584syn5 {
        Object o = null.this.toString();
    }

} {FAIL}
Test Case: 15.8.4-syntax-6
The type in qualified this may not be void

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.4-syntax-6 { The type in qualified this may not be void } {
    
    empty_class T1584syn6 {
        Object o = void.this.toString();
    }

} {FAIL}

15.8.5

Directory : tests/jls/expressions/primary-expressions/parenthesized-expressions


Test Case: 15.8.5-statement-1
Parenthesized expression must contain expression, not statement

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-statement-1 { Parenthesized expression must contain
        expression, not statement } {
    
    empty_main T1585s1 {
        (int i);
    }

} {FAIL}
Test Case: 15.8.5-statement-2
Parenthesized expression must contain expression, not statement

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-statement-2 { Parenthesized expression must contain
        expression, not statement } {
    
    empty_main T1585s2 {
        int[] i = ({});
    }

} {FAIL}
Test Case: 15.8.5-statement-3
Parenthesized expression must contain expression, not statement

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-statement-3 { Parenthesized expression must contain
        expression, not statement } {
    
    empty_main T1585s3 {
        (class Inner{})
    }

} {FAIL}
Test Case: 15.8.5-statement-4
Parenthesized expression must contain expression, not statement

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-statement-4 { Parenthesized expression must contain
        expression, not statement } {
    
    empty_main T1585s4 {
        (;)
    }

} {FAIL}
Test Case: 15.8.5-statement-5
Parenthesized expression must contain expression, not statement

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-statement-5 { Parenthesized expression must contain
        expression, not statement } {
    
    empty_main T1585s5 {
        int i;
        (label: i = 1);
    }

} {FAIL}
Test Case: 15.8.5-statement-6
Parenthesized expression is not a statement

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-statement-6 { Parenthesized expression is not a statement } {
    
    empty_class T1585s6 {
        void foo() {}
        void bar() {
            (foo());
        }
    }

} {FAIL}
Test Case: 15.8.5-statement-7
Parenthesized expression is not a statement

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-statement-7 { Parenthesized expression is not a statement } {
    
    empty_main T1585s7 {
        int i;
        (i = 1);
    }

} {FAIL}
Test Case: 15.8.5-primary-expression-1
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-primary-expression-1 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585p31 {
        int i = (1);
        boolean b = (false);
        char c = ('1');
        Object o = (null);
        String s = ("");
    }

} {PASS}
Test Case: 15.8.5-primary-expression-2
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-primary-expression-2 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585p32 {
        Class c1 = (int.class),
              c2 = (int[].class),
              c3 = (Object.class),
              c4 = (Object[].class);
    }

} {PASS}
Test Case: 15.8.5-primary-expression-3
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-primary-expression-3 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585p33 {
        Class c = (void.class);
    }

} {PASS}
Test Case: 15.8.5-primary-expression-4
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-primary-expression-4 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585p34 {
        Class c1 = (int).class;
    }

} {FAIL}
Test Case: 15.8.5-primary-expression-5
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-primary-expression-5 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585p35 {
        Class c = (void).class;
    }

} {FAIL}
Test Case: 15.8.5-primary-expression-6
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-primary-expression-6 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585p36 {
        Class c1 = int.(class);
    }

} {FAIL}
Test Case: 15.8.5-primary-expression-7
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-primary-expression-7 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585p37 {
        Class c = void.(class);
    }

} {FAIL}
Test Case: 15.8.5-this-expression-1
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-this-expression-1 { Parenthesized expression must
        contain expression } {
    
    empty_class T1585te1 {
        int i;
        void foo() {
            (this).i = 1;
        }
    }

} {PASS}
Test Case: 15.8.5-this-expression-2
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-this-expression-2 { Parenthesized expression must
        contain expression } {
    
    empty_class T1585te2 {
        int i;
        class Inner {
            Inner() {
                (T1585te2.this).i = 1;
            }
        }
    }

} {PASS}
Test Case: 15.8.5-this-expression-3
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-this-expression-3 { Parenthesized expression must
        contain expression } {
    
    empty_class T1585te3 {
        int i;
        class Inner {
            Inner() {
                (T1585te3).this.i = 1;
            }
        }
    }

} {FAIL}
Test Case: 15.8.5-this-expression-4
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-this-expression-4 { Parenthesized expression must
        contain expression } {
    
    empty_class T1585te4 {
        int i;
        class Inner {
            Inner() {
                T1585te4.(this).i = 1;
            }
        }
    }

} {FAIL}
Test Case: 15.8.5-creation-expression-1
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-creation-expression-1 { Parenthesized expression must
        contain expression } {
    
    empty_class T1585ce1 {
        int i;
        void foo() {
            (new T1585ce1()).i = 1;
        }
    }

} {PASS}
Test Case: 15.8.5-creation-expression-2
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-creation-expression-2 { Parenthesized expression must
        contain expression } {
    
    empty_class T1585ce2 {
        void foo() {
            (new T1585ce2() {
                int i;
            }).i = 1;
        }
    }

} {PASS}
Test Case: 15.8.5-creation-expression-3
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-creation-expression-3 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585ce3 {
        int[] i = (new int[1]);
        Object[] o = (new Object[1]);
    }

} {PASS}
Test Case: 15.8.5-creation-expression-4
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-creation-expression-4 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585ce4 {
        int[] i = (new int[] {1});
        Object[] o = (new Object[] {new Object()});
    }

} {PASS}
Test Case: 15.8.5-creation-expression-5
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-creation-expression-5 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585ce5 {
        int[] i = new (int[1]);
    }

} {FAIL}
Test Case: 15.8.5-creation-expression-6
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-creation-expression-6 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585ce6 {
        int[] i = new (int[] {1});
    }

} {FAIL}
Test Case: 15.8.5-creation-expression-7
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-creation-expression-7 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585ce7 {
        int[] i = new int[] ({1});
    }

} {FAIL}
Test Case: 15.8.5-creation-expression-8
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-creation-expression-8 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585ce8 {
        int[][] i = new int[][] { ({}) };
    }

} {FAIL}
Test Case: 15.8.5-field-expression-1
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-field-expression-1 { Parenthesized expression must
        contain expression } {
    
    empty_class T1585fe1 {
        int i;
        T1585fe1 t;
        void foo() {
            int j = (t.i);
        }
    }

} {PASS}
Test Case: 15.8.5-field-expression-2
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-field-expression-2 { Parenthesized expression must
        contain expression } {
    
    empty_class T1585fe2 {
        int i;
        T1585fe2 t;
        void foo() {
            t.(i) = 1;
        }
    }

} {FAIL}
Test Case: 15.8.5-field-expression-3
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-field-expression-3 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585fe3.java {
class T1585fe3 {
    int i;
    T1585fe3 t;
}
class Sub extends T1585fe3 {
    void foo() {
        (super.t).i = 1;
    }
}
    }]

} {PASS}
Test Case: 15.8.5-field-expression-4
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-field-expression-4 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585fe4.java {
class T1585fe4 {
    int i;
    T1585fe4 t;
}
class Sub extends T1585fe4 {
    void foo() {
        (super).t.i = 1;
    }
}
    }]

} {FAIL}
Test Case: 15.8.5-field-expression-5
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-field-expression-5 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585fe5.java {
class T1585fe5 {
    int i;
    T1585fe5 t;
}
class Sub extends T1585fe5 {
    void foo() {
        super.(t).i = 1;
    }
}
    }]

} {FAIL}
Test Case: 15.8.5-field-expression-6
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-field-expression-6 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585fe6.java {
class T1585fe6 {
    int i;
    T1585fe6 t;
}
class Sub extends T1585fe6 {
    class Inner {
        void foo() {
            (Sub.super.t).i = 1;
        }
    }
}
    }]

} {PASS}
Test Case: 15.8.5-field-expression-7
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-field-expression-7 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585fe7.java {
class T1585fe7 {
    int i;
    T1585fe7 t;
}
class Sub extends T1585fe7 {
    class Inner {
        void foo() {
            (Sub).super.t.i = 1;
        }
    }
}
    }]

} {FAIL}
Test Case: 15.8.5-field-expression-8
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-field-expression-8 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585fe8.java {
class T1585fe8 {
    int i;
    T1585fe8 t;
}
class Sub extends T1585fe8 {
    class Inner {
        void foo() {
            Sub.(super).t.i = 1;
        }
    }
}
    }]

} {FAIL}
Test Case: 15.8.5-field-expression-9
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-field-expression-9 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585fe9.java {
class T1585fe9 {
    int i;
    T1585fe9 t;
}
class Sub extends T1585fe9 {
    class Inner {
        void foo() {
            Sub.super.(t).i = 1;
        }
    }
}
    }]

} {FAIL}
Test Case: 15.8.5-field-expression-10
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-field-expression-10 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585fe10.java {
class T1585fe10 {
    int i;
    T1585fe10 t;
}
class Sub extends T1585fe10 {
    class Inner {
        void foo() {
            (Sub.super).t.i = 1;
        }
    }
}
    }]

} {FAIL}
Test Case: 15.8.5-field-expression-11
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-field-expression-11 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585fe11.java {
class T1585fe11 {
    int i;
    T1585fe11 t;
}
class Sub extends T1585fe11 {
    class Inner {
        void foo() {
            Sub.(super.t).i = 1;
        }
    }
}
    }]

} {FAIL}
Test Case: 15.8.5-method-expression-1
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-method-expression-1 { Parenthesized expression must
        contain expression } {
    
    empty_class T1585me1 {
        int bar() { return 1; }
        int i = (bar());
    }

} {PASS}
Test Case: 15.8.5-method-expression-2
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-method-expression-2 { Parenthesized expression must
        contain expression } {
    
    empty_class T1585me2 {
        int bar() { return 1; }
        int i = (bar)();
    }

} {FAIL}
Test Case: 15.8.5-method-expression-3
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-method-expression-3 { Parenthesized expression must
        contain expression } {
    
    empty_class T1585me3 {
        int bar() { return 1; }
        T1585me3 t;
        int i = (t.bar());
    }

} {PASS}
Test Case: 15.8.5-method-expression-4
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-method-expression-4 { Parenthesized expression must
        contain expression } {
    
    empty_class T1585me4 {
        int bar() { return 1; }
        T1585me4 t;
        int i = t.(bar());
    }

} {FAIL}
Test Case: 15.8.5-method-expression-5
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-method-expression-5 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585me5.java {
class T1585me5 {
    int bar() { return 1; }
}
class Sub extends T1585me5 {
    int i = (super.bar());
}
    }]

} {PASS}
Test Case: 15.8.5-method-expression-6
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-method-expression-6 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585me6.java {
class T1585me6 {
    int bar() { return 1; }
}
class Sub extends T1585me6 {
    int i = (super).bar();
}
    }]

} {FAIL}
Test Case: 15.8.5-method-expression-7
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-method-expression-7 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585me7.java {
class T1585me7 {
    int bar() { return 1; }
}
class Sub extends T1585me7 {
    int i = super.(bar());
}
    }]

} {FAIL}
Test Case: 15.8.5-method-expression-8
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-method-expression-8 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585me8.java {
class T1585me8 {
    int bar() { return 1; }
}
class Sub extends T1585me8 {
    class Inner {
        Inner() {
            int i = (Sub.super.bar());
        }
    }
}
    }]

} {PASS}
Test Case: 15.8.5-method-expression-9
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-method-expression-9 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585me9.java {
class T1585me9 {
    int bar() { return 1; }
}
class Sub extends T1585me9 {
    class Inner {
        Inner() {
            int i = (Sub).super.bar();
        }
    }
}
    }]

} {FAIL}
Test Case: 15.8.5-method-expression-10
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-method-expression-10 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585me10.java {
class T1585me10 {
    int bar() { return 1; }
}
class Sub extends T1585me10 {
    class Inner {
        Inner() {
            int i = Sub.(super).bar();
        }
    }
}
    }]

} {FAIL}
Test Case: 15.8.5-method-expression11
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-method-expression11 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585me11.java {
class T1585me11 {
    int bar() { return 1; }
}
class Sub extends T1585me11 {
    class Inner {
        Inner() {
            int i = Sub.super.(bar());
        }
    }
}
    }]

} {FAIL}
Test Case: 15.8.5-method-expression-12
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-method-expression-12 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585me12.java {
class T1585me12 {
    int bar() { return 1; }
}
class Sub extends T1585me12 {
    class Inner {
        Inner() {
            int i = (Sub.super).bar();
        }
    }
}
    }]

} {FAIL}
Test Case: 15.8.5-method-expression-13
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-method-expression-13 { Parenthesized expression must
        contain expression } {
    
    compile [saveas T1585me13.java {
class T1585me13 {
    int bar() { return 1; }
}
class Sub extends T1585me13 {
    class Inner {
        Inner() {
            int i = Sub.(super.bar());
        }
    }
}
    }]

} {FAIL}
Test Case: 15.8.5-array-expression-1
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-array-expression-1 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585ae1 {
        int[] ia = {1};
        int i = (ia[0]);
    }

} {PASS}
Test Case: 15.8.5-array-expression-2
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-array-expression-2 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585ae2 {
        int[] ia = {1};
        int i = (ia)[0];
    }

} {PASS}
Test Case: 15.8.5-array-expression-3
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-array-expression-3 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585ae3 {
        int[] ia = {1};
        int i = ((ia)[0]);
    }

} {PASS}
Test Case: 15.8.5-array-expression-4
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-array-expression-4 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585ae4 {
        int[] ia = {1};
        int i = ia([0]);
    }

} {FAIL}
Test Case: 15.8.5-variable-1
Parenthesized expression may now represent a variable

Expected Result: OK

Regression Test:

tcltest::test 15.8.5-variable-1 { Parenthesized expression may now
        represent a variable } {
    
    ok_pass_or_warn [empty_class T1585v1 {
        static int i1 = 1, j1 = (i1)++;
        int i2 = 1, j2 = (i2)++;
        private static int i3 = 1;
        private int i4 = 1;
        class Inner {
            Inner() {
                int j3 = (i3)++;
                int j4 = (i4)++;
            }
        }
        void foo() {
            int i5 = 1, j5 = (i5)++;
            int[] i6 = {1};
            int j6 = (i6[0])++;
        }
    }]

} {OK}
Test Case: 15.8.5-variable-2
Parenthesized expression may now represent a variable

Expected Result: OK

Regression Test:

tcltest::test 15.8.5-variable-2 { Parenthesized expression may now
        represent a variable } {
    
    ok_pass_or_warn [empty_class T1585v2 {
        static int i1 = 1, j1 = (i1)--;
        int i2 = 1, j2 = (i2)--;
        private static int i3 = 1;
        private int i4 = 1;
        class Inner {
            Inner() {
                int j3 = (i3)--;
                int j4 = (i4)--;
            }
        }
        void foo() {
            int i5 = 1, j5 = (i5)--;
            int[] i6 = {1};
            int j6 = (i6[0])--;
        }
    }]

} {OK}
Test Case: 15.8.5-variable-3
Parenthesized expression may now represent a variable

Expected Result: OK

Regression Test:

tcltest::test 15.8.5-variable-3 { Parenthesized expression may now
        represent a variable } {
    
    ok_pass_or_warn [empty_class T1585v3 {
        static int i1 = 1, j1 = ++(i1);
        int i2 = 1, j2 = ++(i2);
        private static int i3 = 1;
        private int i4 = 1;
        class Inner {
            Inner() {
                int j3 = ++(i3);
                int j4 = ++(i4);
            }
        }
        void foo() {
            int i5 = 1, j5 = ++(i5);
            int[] i6 = {1};
            int j6 = ++(i6[0]);
        }
    }]

} {OK}
Test Case: 15.8.5-variable-4
Parenthesized expression may now represent a variable

Expected Result: OK

Regression Test:

tcltest::test 15.8.5-variable-4 { Parenthesized expression may now
        represent a variable } {
    
    ok_pass_or_warn [empty_class T1585v4 {
        static int i1 = 1, j1 = --(i1);
        int i2 = 1, j2 = --(i2);
        private static int i3 = 1;
        private int i4 = 1;
        class Inner {
            Inner() {
                int j3 = --(i3);
                int j4 = --(i4);
            }
        }
        void foo() {
            int i5 = 1, j5 = --(i5);
            int[] i6 = {1};
            int j6 = --(i6[0]);
        }
    }]

} {OK}
Test Case: 15.8.5-variable-5
Parenthesized expression may now represent variable in assignment

Expected Result: OK

Regression Test:

tcltest::test 15.8.5-variable-5 { Parenthesized expression may now represent
        variable in assignment } {
    
    ok_pass_or_warn [empty_main T1585v5 {
        int i = 0;
        (i) = 1;
    }]

} {OK}
Test Case: 15.8.5-variable-6
Parenthesized expression may now represent variable in assignment

Expected Result: OK

Regression Test:

tcltest::test 15.8.5-variable-6 { Parenthesized expression may now represent
        variable in assignment } {
    
    ok_pass_or_warn [empty_main T1585v6 {
        int[] i = {0};
        (i[0]) = 1;
    }]

} {OK}
Test Case: 15.8.5-variable-7
Parenthesized expression may now represent variable in assignment

Expected Result: OK

Regression Test:

tcltest::test 15.8.5-variable-7 { Parenthesized expression may now represent
        variable in assignment } {
    
    ok_pass_or_warn [empty_main T1585v7 {
        int i = 0;
        (i) += 1;
    }]

} {OK}
Test Case: 15.8.5-variable-8
Parenthesized expression may now represent variable in assignment

Expected Result: OK

Regression Test:

tcltest::test 15.8.5-variable-8 { Parenthesized expression may now represent
        variable in assignment } {
    
    ok_pass_or_warn [empty_main T1585v8 {
        int[] i = {0};
        (i[0]) += 1;
    }]

} {OK}
Test Case: 15.8.5-cast-1
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-cast-1 { Parenthesized expression must contain expression } {
    
    empty_main T1585c1 {
        int i = ((int) 1L);
    }

} {PASS}
Test Case: 15.8.5-cast-2
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-cast-2 { Parenthesized expression must contain expression } {
    
    empty_main T1585c2 {
        int i = (int) (1L);
    }

} {PASS}
Test Case: 15.8.5-cast-3
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-cast-3 { Parenthesized expression must contain expression } {
    
    empty_main T1585c3 {
        int i = ((int)) 1L;
    }

} {FAIL}
Test Case: 15.8.5-instanceof-1
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-instanceof-1 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585i1 {
        boolean b = (new T1585i1() instanceof Object);
    }

} {PASS}
Test Case: 15.8.5-instanceof-2
Parenthesized expression must contain expression

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-instanceof-2 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585i2 {
        boolean b = (new T1585i2()) instanceof Object;
    }

} {PASS}
Test Case: 15.8.5-instanceof-3
Parenthesized expression must contain expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.8.5-instanceof-3 { Parenthesized expression must
        contain expression } {
    
    empty_main T1585i3 {
        boolean b = new T1585i3() instanceof (Object);
    }

} {FAIL}
Test Case: 15.8.5-precedence-1
Parenthesized expression has highest precedence

Expected Result: PASS

Regression Test:

tcltest::test 15.8.5-precedence-1 { Parenthesized expression has highest precedence } {
    
    constant_expression T1585p1 {1+2*3 == 7} {(1+2)*3 == 9} {1+(2*3) == 7}

} {PASS}

15.9

Directory : tests/jls/expressions/class-instance-creation


Test Case: 15.9-unqualified-1
a ClassInstanceCreationExpression that starts with the keyword new is known as an unqualified class instance creation expression

Expected Result: PASS

Regression Test:

tcltest::test 15.9-unqualified-1 { a
        ClassInstanceCreationExpression
        that starts with the keyword new
        is known as an unqualified class
        instance creation expression } {
    

    empty_class T159u1 {
        Object o = new T159u1();
    }

} {PASS}
Test Case: 15.9-unqualified-2
an unqualified class instance creation expression can create instances of a toplevel, member, local, or anonymous class

Expected Result: PASS

Regression Test:

tcltest::test 15.9-unqualified-2 { an
        unqualified class instance
        creation expression can create
        instances of a toplevel, member,
        local, or anonymous class } {
    

    empty_class T159u2 {
        class Inner {}
        static class Sinner {}
        void foo() {
            new T159u2(); // toplevel
            new Inner(); // member
            new Sinner(); // static member

            class Local {}
            new Local(); // local

            new T159u2() {}; // anonymous
        }
    }

} {PASS}

15.9.1

Directory : tests/jls/expressions/class-instance-creation/determining-the-class


Test Case: 15.9.1-unqualified-anonymous-1
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-1 { The ClassOrInterfaceType must
        be accessible } {
    
    empty_main T1591ua1 {
        new java.lang.Object(){};
        new T1591ua1(){};
    }

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-2
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-2 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591ua2_1.java {
package p1;
public class T1591ua2_1 {}
    }] [saveas p2/T1591ua2_2.java {
package p2;
import p1.*;
class T1591ua2_2 extends p1.T1591ua2_1 {
    Object o1 = new p1.T1591ua2_1(){};
    Object o2 = new T1591ua2_1(){};
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-3
The ClassOrInterfaceType must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-3 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591ua3_1.java {
package p1;
class T1591ua3_1 {}
    }] [saveas p2/T1591ua3_2.java {
package p2;
import p1.*;
class T1591ua3_2 extends p1.T1591ua3_1 {
    Object o1 = new p1.T1591ua3_1(){};
    Object o2 = new T1591ua3_1(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-anonymous-4
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-4 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591ua4_1.java {
package p1;
public class T1591ua4_1 {
    public class Inner{}
}
    }] [saveas p2/T1591ua4_2.java {
package p2;
import p1.*;
class T1591ua4_2 extends p1.T1591ua4_1 {
    Object o1 = new p1.T1591ua4_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-5
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-5 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591ua5_1.java {
package p1;
public class T1591ua5_1 {
    protected class Inner{}
}
    }] [saveas p2/T1591ua5_2.java {
package p2;
import p1.*;
class T1591ua5_2 extends p1.T1591ua5_1 {
    Object o1 = new p1.T1591ua5_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-6
The ClassOrInterfaceType must be accessible, the inner class is has package access so it is not accessible from another package

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-6 { The ClassOrInterfaceType must
        be accessible, the inner class is has package access so it
        is not accessible from another package } {
    
    compile [saveas p1/T1591ua6_1.java {
package p1;
public class T1591ua6_1 {
    class Inner{}
}
    }] [saveas p2/T1591ua6_2.java {
package p2;
import p1.*;
class T1591ua6_2 extends p1.T1591ua6_1 {
    Object o1 = new p1.T1591ua6_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-anonymous-7
The ClassOrInterfaceType must be accessible, this inner class is private

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-7 { The ClassOrInterfaceType must
        be accessible, this inner class is private } {
    
    compile [saveas p1/T1591ua7_1.java {
package p1;
public class T1591ua7_1 {
    private class Inner{}
}
    }] [saveas p2/T1591ua7_2.java {
package p2;
import p1.*;
class T1591ua7_2 extends p1.T1591ua7_1 {
    Object o1 = new p1.T1591ua7_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-anonymous-8
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-8 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas T1591ua8_1.java {
class T1591ua8_1 {
    protected class Inner{}
}
class T1591ua8_2 extends T1591ua8_1 {
    Object o1 = new T1591ua8_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-9
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-9 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas T1591ua9_1.java {
class T1591ua9_1 {
    class Inner{}
}
class T1591ua9_2 extends T1591ua9_1 {
    Object o1 = new T1591ua9_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-10
The ClassOrInterfaceType must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-10 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas T1591ua10_1.java {
class T1591ua10_1 {
    private class Inner{}
}
class T1591ua10_2 extends T1591ua10_1 {
    Object o1 = new T1591ua10_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-anonymous-11
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-11 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas T1591ua11.java {
interface I1591ua11 {}
class T1591ua11 {
    Object o1 = new java.lang.Cloneable(){};
    Object o2 = new I1591ua11(){};
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-12
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-12 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591ua12_1.java {
package p1;
public interface T1591ua12_1 {}
    }] [saveas p2/T1591ua12_2.java {
package p2;
import p1.*;
class T1591ua12_2 implements p1.T1591ua12_1 {
    Object o1 = new p1.T1591ua12_1(){};
    Object o2 = new T1591ua12_1(){};
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-13
The ClassOrInterfaceType must be accessible, this interface has package access

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-13 { The ClassOrInterfaceType must
        be accessible, this interface has package access } {
    
    compile [saveas p1/T1591ua13_1.java {
package p1;
interface T1591ua13_1 {}
    }] [saveas p2/T1591ua13_2.java {
package p2;
import p1.*;
class T1591ua13_2 implements p1.T1591ua13_1 {
    Object o1 = new p1.T1591ua13_1(){};
    Object o2 = new T1591ua13_1(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-anonymous-14
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-14 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591ua14_1.java {
package p1;
public class T1591ua14_1 {
    public interface Inner{}
}
    }] [saveas p2/T1591ua14_2.java {
package p2;
import p1.*;
class T1591ua14_2 extends p1.T1591ua14_1 {
    Object o1 = new p1.T1591ua14_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-15
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-15 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591ua15_1.java {
package p1;
public class T1591ua15_1 {
    protected interface Inner{}
}
    }] [saveas p2/T1591ua15_2.java {
package p2;
import p1.*;
class T1591ua15_2 extends p1.T1591ua15_1 {
    Object o1 = new p1.T1591ua15_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-16
The ClassOrInterfaceType must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-16 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591ua16_1.java {
package p1;
public class T1591ua16_1 {
    interface Inner{}
}
    }] [saveas p2/T1591ua16_2.java {
package p2;
import p1.*;
class T1591ua16_2 extends p1.T1591ua16_1 {
    Object o1 = new p1.T1591ua16_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-anonymous-17
The ClassOrInterfaceType must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-17 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591ua17_1.java {
package p1;
public class T1591ua17_1 {
    private interface Inner{}
}
    }] [saveas p2/T1591ua17_2.java {
package p2;
import p1.*;
class T1591ua17_2 extends p1.T1591ua17_1 {
    Object o1 = new p1.T1591ua17_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-anonymous-18
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-18 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas T1591ua18_1.java {
class T1591ua18_1 {
    protected interface Inner{}
}
class T1591ua18_2 extends T1591ua18_1 {
    Object o1 = new T1591ua18_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-19
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-19 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas T1591ua19_1.java {
class T1591ua19_1 {
    interface Inner{}
}
class T1591ua19_2 extends T1591ua19_1 {
    Object o1 = new T1591ua19_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-20
The ClassOrInterfaceType must be accessible, this inner class has private access

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-20 { The ClassOrInterfaceType must
        be accessible, this inner class has private access } {
    
    compile [saveas T1591ua20_1.java {
class T1591ua20_1 {
    private interface Inner{}
}
class T1591ua20_2 extends T1591ua20_1 {
    Object o1 = new T1591ua20_1.Inner(){};
    Object o2 = new Inner(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-anonymous-21
Anonymous classes cannot extend final class

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-21 { Anonymous classes cannot
        extend final class } {
    
    empty_class T1591ua21 {
        final class Inner{}
        Object o1 = new T1591ua21.Inner(){};
        Object o2 = new Inner(){};
    }

} {FAIL}
Test Case: 15.9.1-unqualified-anonymous-22
Anonymous classes may extend abstract class

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-22 { Anonymous classes may
        extend abstract class } {
    
    empty_class T1591ua22 {
        abstract class Inner{}
        Object o1 = new T1591ua22.Inner(){};
        Object o2 = new Inner(){};
    }

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-23
The name may not be ambiguous, in this case Inner is ambiguous even though one is an inner class and cannot be constructed without an enclosing instance

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-23 { The name may not be ambiguous,
        in this case Inner is ambiguous even though one is an inner class and
        cannot be constructed without an enclosing instance } {
    
    compile [saveas T1591ua23_1.java {
class T1591ua23_1 {
    class Inner{}
}
interface T1591ua23_2 {
    class Inner{}
}
class T1591ua23_3 extends T1591ua23_1 implements T1591ua23_2 {
    static Object o = new T1591ua23_3.Inner(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-anonymous-24
The name may not be ambiguous, accessibility means that only one Inner is inherited

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-24 { The name may not be ambiguous,
        accessibility means that only one Inner is inherited } {
    
    compile [saveas p1/T1591ua24_1.java {
package p1;
public class T1591ua24_1 {
    static class Inner{}
}
    }] [saveas p2/T1591ua24_2.java {
package p2;
import p1.*;
interface T1591ua24_2 {
    class Inner{}
}
class T1591ua24_3 extends T1591ua24_1 implements T1591ua24_2 {
    static Object o = new T1591ua24_3.Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-25
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-25 { The ClassOrInterfaceType must
        be accessible } {
    
    empty_class T1591ua25 {
	private class One {}
	class Two {
	    Two() {
		new One() {};
	    }
	}
    }

} {PASS}
Test Case: 15.9.1-unqualified-anonymous-26
The ClassOrInterfaceType must exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-26 { The ClassOrInterfaceType must
        exist } {
    
    empty_class T1591ua26 {
	Object o = new UnknownType() {};
    }

} {FAIL}
Test Case: 15.9.1-unqualified-anonymous-27
The ClassOrInterfaceType must exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-anonymous-27 { The ClassOrInterfaceType must
        exist } {
    
    empty_class T1591ua27 {
	void m(final int i) {
	    new UnknownType() {
		int j = i;
	    };
	}
    }

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-1
The simple name must be an accessible inner class of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-1 { The simple name must be an
        accessible inner class of the qualifier } {
    
    empty_class T1591qa1 {
        class Inner{}
        Object o = new T1591qa1().new Inner(){};
    }

} {PASS}
Test Case: 15.9.1-qualified-anonymous-2
Anonymous classes cannot extend final class

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-2 { Anonymous classes cannot
        extend final class } {
    
    empty_class T1591qa2 {
        final class Inner{}
        Object o = new T1591qa2().new Inner(){};
    }

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-3
Anonymous classes may extend abstract class

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-3 { Anonymous classes may
        extend abstract class } {
    
    empty_class T1591qa3 {
        abstract class Inner{}
        Object o = new T1591qa3().new Inner(){};
    }

} {PASS}
Test Case: 15.9.1-qualified-anonymous-4
The simple name must be an accessible inner class of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-4 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas p1/T1591qa4_1.java {
package p1;
public class T1591qa4_1 {
    public class Inner{}
}
    }] [saveas p2/T1591qa4_2.java {
package p2;
import p1.*;
class T1591qa4_2 extends p1.T1591qa4_1 {
    Object o = new p1.T1591qa4_1().new Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-qualified-anonymous-5
The simple name must be an accessible inner class of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-5 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas p1/T1591qa5_1.java {
package p1;
public class T1591qa5_1 {
    protected class Inner{}
}
    }] [saveas p2/T1591qa5_2.java {
package p2;
import p1.*;
class T1591qa5_2 extends p1.T1591qa5_1 {
    Object o = new p1.T1591qa5_1().new Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-qualified-anonymous-6
The simple name must be an accessible inner class of the qualifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-6 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas p1/T1591qa6_1.java {
package p1;
public class T1591qa6_1 {
    class Inner{}
}
    }] [saveas p2/T1591qa6_2.java {
package p2;
import p1.*;
class T1591qa6_2 extends p1.T1591qa6_1 {
    Object o = new p1.T1591qa6_1().new Inner(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-7
The simple name must be an accessible inner class of the qualifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-7 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas p1/T1591qa7_1.java {
package p1;
public class T1591qa7_1 {
    private class Inner{}
}
    }] [saveas p2/T1591qa7_2.java {
package p2;
import p1.*;
class T1591qa7_2 extends p1.T1591qa7_1 {
    Object o = new p1.T1591qa7_1().new Inner(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-8
The simple name must be an accessible inner class of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-8 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas T1591qa8_1.java {
class T1591qa8_1 {
    protected class Inner{}
}
class T1591qa8_2 extends T1591qa8_1 {
    Object o = new T1591qa8_1().new Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-qualified-anonymous-9
The simple name must be an accessible inner class of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-9 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas T1591qa9_1.java {
class T1591qa9_1 {
    class Inner{}
}
class T1591qa9_2 extends T1591qa9_1 {
    Object o = new T1591qa9_1().new Inner(){};
}
    }]

} {PASS}
Test Case: 15.9.1-qualified-anonymous-10
The simple name must be an accessible inner class of the qualifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-10 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas T1591qa10_1.java {
class T1591qa10_1 {
    private class Inner{}
}
class T1591qa10_2 extends T1591qa10_1 {
    Object o = new T1591qa10_1().new Inner(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-11
The qualified name must be simple

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-11 { The qualified name must be simple } {
    
    empty_class T1591qa11 {
        class Inner{}
        Object o = new T1591qa11().new T1591qa11.Inner(){};
    }

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-12
The qualified name must be an inner class

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-12 { The qualified name must be an
        inner class } {
    
    empty_class T1591qa12 {
        static class Inner{}
        Object o = new T1591qa12().new Inner(){};
    }

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-13
The qualified name must be an inner class

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-13 { The qualified name must be an
        inner class } {
    
    empty_class T1591qa13 {
        interface Inner{}
        Object o = new T1591qa13().new Inner(){};
    }

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-14
The qualified name must be an inner class

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-14 { The qualified name must be an
        inner class } {
    
    empty_class T1591qa14 {
        Object o = new T1591qa14().new Object(){};
    }

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-15
The anonymous class extends the inner class of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-15 { The anonymous class extends
        the inner class of the type of the qualifier } {
    
    empty_class T1591qa15 {
        class Inner{}
        Object o = new T1591qa15(){}.new Inner(){};
    }

} {PASS}
Test Case: 15.9.1-qualified-anonymous-16
The anonymous class extends the inner class of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-16 { The anonymous class extends
        the inner class of the type of the qualifier } {
    
    empty_class T1591qa16 {
        Object o = new T1591qa16(){
            class Inner{}
        }.new Inner(){};
    }

} {PASS}
Test Case: 15.9.1-qualified-anonymous-17
The anonymous class extends the inner class of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-17 { The anonymous class extends
        the inner class of the type of the qualifier } {
    
    empty_class T1591qa17 {
        class Inner {
            static final int foo = 1;
        }
        Object o = new T1591qa17(){
            class Inner {
                static final int foo = 2;
            }
        }.new Inner(){
            {
                switch (1) {
                    case 0:
                    case ((foo == 2) ? 1 : 0):
                }
            }
        };
    }

} {PASS}
Test Case: 15.9.1-qualified-anonymous-18
The name may not be ambiguous, even though only one is an inner class since member classes of interfaces are static and do not have enclosing instance

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-18 { The name may not be ambiguous,
        even though only one is an inner class since member classes of
        interfaces are static and do not have enclosing instance } {
    
    compile [saveas T1591qa18_1.java {
class T1591qa18_1 {
    class Inner{}
}
interface T1591qa18_2 {
    class Inner{}
}
class T1591qa18_3 extends T1591qa18_1 implements T1591qa18_2 {
    Object o = new T1591qa18_3().new Inner(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-19
The qualifier must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-19 { The qualifier must be a reference } {
    
    empty_class T1591qa19 {
        class Inner{}
        int foo() { return 1; }
        Object o = foo().new Inner(){};
    }

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-20
The qualifier must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-20 { The qualifier must be a reference } {
    
    empty_class T1591qa20 {
        class Inner{}
        Object o = null.new Inner(){};
    }

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-21
The qualifier must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-21 { The qualifier must be a reference } {
    
    empty_class T1591qa21 {
        class Inner{}
        Object o = System.out.println().new Inner(){};
    }

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-22
The qualified name must be an inner class of the qualifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-22 { The qualified name must be an
        inner class of the qualifier } {
    
    compile [saveas T1591qa22_1.java {
class T1591qa22_1 {}
class T1591qa22_2 extends T1591qa22_1 {
    class Inner{}
    Object o = ((T1591qa22_1)new T1591qa22_2()).new Inner(){};
}
    }]

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-23
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-23 { The ClassOrInterfaceType must
        be accessible } {
    
    empty_class T1591qa23 {
	private class One {}
	class Two {
	    Two() {
		T1591qa23.this.new One() {};
	    }
	}
    }

} {PASS}
Test Case: 15.9.1-qualified-anonymous-24
The qualifier must be a primary, not a typename

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-24 { The qualifier must be a primary,
        not a typename } {
    
    empty_class T1591qa24 {
	static class A {}
	{ T1591qa24.new A() {}; }
    }

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-25
The qualifier must be a primary, not a typename

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-25 { The qualifier must be a primary,
        not a typename } {
    
    empty_class T1591qa25 {
	class A {}
	{
	    T1591qa25 t = this;
	    t.new A() {}; // this is legal in spite of the chapter 15 grammar
	}
    }

} {PASS}
Test Case: 15.9.1-qualified-anonymous-26
The identifier must not be ambiguous, but it must also name a non-static type

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-26 { The identifier must not be
        ambiguous, but it must also name a non-static type } {
    
    compile [saveas p1/T1591qa26c.java {
package p1;
class T1591qa26a {
    class C {}
}
interface T1591qa26b {
    class C {}
}
public class T1591qa26c extends T1591qa26a implements T1591qa26b {}
    }] [saveas T1591qa26d.java {
class T1591qa26d {
    // This resolves to b.C, since a.C is inaccessible. However, b.C is static
    { new p1.T1591qa26c().new C() {}; }
}
    }]

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-27
The identifier is a typename

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-27 { The identifier is a typename } {
    
    empty_class T1591qa27 {
	class A {}
	int A;
	int A() { return 0; }
	{ new T1591qa27().new A() {}; }
    }

} {PASS}
Test Case: 15.9.1-qualified-anonymous-28
The ClassOrInterfaceType must exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-28 { The ClassOrInterfaceType must
        exist } {
    
    empty_class T1591qa28 {
	Object o = "".new UnknownType() {};
    }

} {FAIL}
Test Case: 15.9.1-qualified-anonymous-29
The ClassOrInterfaceType must exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-anonymous-29 { The ClassOrInterfaceType must
        exist } {
    
    empty_class T1591qa29 {
	void m(final int i) {
	    "".new UnknownType() {
		int j = i;
	    };
	}
    }

} {FAIL}
Test Case: 15.9.1-unqualified-concrete-1
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-1 { The ClassOrInterfaceType must
        be accessible } {
    
    empty_main T1591uc1 {
        new java.lang.Object();
        new T1591uc1();
    }

} {PASS}
Test Case: 15.9.1-unqualified-concrete-2
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-2 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591uc2_1.java {
package p1;
public class T1591uc2_1 {}
    }] [saveas p2/T1591uc2_2.java {
package p2;
import p1.*;
class T1591uc2_2 extends p1.T1591uc2_1 {
    Object o1 = new p1.T1591uc2_1();
    Object o2 = new T1591uc2_1();
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-concrete-3
The ClassOrInterfaceType must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-3 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591uc3_1.java {
package p1;
class T1591uc3_1 {}
    }] [saveas p2/T1591uc3_2.java {
package p2;
import p1.*;
class T1591uc3_2 extends p1.T1591uc3_1 {
    Object o1 = new p1.T1591uc3_1();
    Object o2 = new T1591uc3_1();
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-concrete-4
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-4 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591uc4_1.java {
package p1;
public class T1591uc4_1 {
    public class Inner{}
}
    }] [saveas p2/T1591uc4_2.java {
package p2;
import p1.*;
class T1591uc4_2 extends p1.T1591uc4_1 {
    Object o1 = new p1.T1591uc4_1.Inner();
    Object o2 = new Inner();
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-concrete-5
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-5 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591uc5_1.java {
package p1;
public class T1591uc5_1 {
    protected class Inner{
        public Inner(){}
    }
}
    }] [saveas p2/T1591uc5_2.java {
package p2;
import p1.*;
class T1591uc5_2 extends p1.T1591uc5_1 {
    Object o1 = new p1.T1591uc5_1.Inner();
    Object o2 = new Inner();
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-concrete-6
The ClassOrInterfaceType must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-6 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591uc6_1.java {
package p1;
public class T1591uc6_1 {
    class Inner{}
}
    }] [saveas p2/T1591uc6_2.java {
package p2;
import p1.*;
class T1591uc6_2 extends p1.T1591uc6_1 {
    Object o1 = new p1.T1591uc6_1.Inner();
    Object o2 = new Inner();
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-concrete-7
The ClassOrInterfaceType must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-7 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas p1/T1591uc7_1.java {
package p1;
public class T1591uc7_1 {
    private class Inner{}
}
    }] [saveas p2/T1591uc7_2.java {
package p2;
import p1.*;
class T1591uc7_2 extends p1.T1591uc7_1 {
    Object o1 = new p1.T1591uc7_1.Inner();
    Object o2 = new Inner();
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-concrete-8
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-8 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas T1591uc8_1.java {
class T1591uc8_1 {
    protected class Inner{}
}
class T1591uc8_2 extends T1591uc8_1 {
    Object o1 = new T1591uc8_1.Inner();
    Object o2 = new Inner();
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-concrete-9
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-9 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas T1591uc9_1.java {
class T1591uc9_1 {
    class Inner{}
}
class T1591uc9_2 extends T1591uc9_1 {
    Object o1 = new T1591uc9_1.Inner();
    Object o2 = new Inner();
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-concrete-10
The ClassOrInterfaceType must be accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-10 { The ClassOrInterfaceType must
        be accessible } {
    
    compile [saveas T1591uc10_1.java {
class T1591uc10_1 {
    private class Inner{}
}
class T1591uc10_2 extends T1591uc10_1 {
    Object o1 = new T1591uc10_1.Inner();
    Object o2 = new Inner();
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-concrete-11
Interface instances cannot be created

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-11 { Interface instances cannot be
        created } {
    
    compile [saveas T1591uc11.java {
interface I1591uc11 {}
class T1591uc11 {
    Object o = new I1591uc11();
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-concrete-12
Concrete classes may be final

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-12 { Concrete classes may be final } {
    
    empty_class T1591uc12 {
        final class Inner{}
        Object o1 = new T1591uc12.Inner();
        Object o2 = new Inner();
    }

} {PASS}
Test Case: 15.9.1-unqualified-concrete-13
Concrete classes may not be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-13 { Concrete classes may not be
        abstract } {
    
    empty_class T1591uc13 {
        abstract class Inner{}
        Object o1 = new T1591uc13.Inner();
        Object o2 = new Inner();
    }

} {FAIL}
Test Case: 15.9.1-unqualified-concrete-14
The name may not be ambiguous, Inner is ambiguous, even though one is an inner class and cannot be constructed without an enclosing instance

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-14 { The name may not be ambiguous,
        Inner is ambiguous, even though one is an inner class and
        cannot be constructed without an enclosing instance } {
    
    compile [saveas T1591uc14_1.java {
class T1591uc14_1 {
    class Inner{}
}
interface T1591uc14_2 {
    class Inner{}
}
class T1591uc14_3 extends T1591uc14_1 implements T1591uc14_2 {
    static Object o = new T1591uc14_3.Inner();
}
    }]

} {FAIL}
Test Case: 15.9.1-unqualified-concrete-15
The name may not be ambiguous, accessibility means that only one Inner is inherited

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-15 { The name may not be ambiguous,
        accessibility means that only one Inner is inherited } {
    
    compile [saveas p1/T1591uc15_1.java {
package p1;
public class T1591uc15_1 {
    static class Inner{}
}
    }] [saveas p2/T1591uc15_2.java {
package p2;
import p1.*;
interface T1591uc15_2 {
    class Inner{}
}
class T1591uc15_3 extends T1591uc15_1 implements T1591uc15_2 {
    static Object o = new T1591uc15_3.Inner();
}
    }]

} {PASS}
Test Case: 15.9.1-unqualified-concrete-16
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-16 { The ClassOrInterfaceType must
        be accessible } {
    
    empty_class T1591uc16 {
	private class One {}
	class Two {
	    Two() {
		new One();
	    }
	}
    }

} {PASS}
Test Case: 15.9.1-unqualified-concrete-17
The ClassOrInterfaceType must exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-unqualified-concrete-17 { The ClassOrInterfaceType must
        exist } {
    
    empty_class T1591uc17 {
	Object o = new UnknownType();
    }

} {FAIL}
Test Case: 15.9.1-qualified-concrete-1
The simple name must be an accessible inner class of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-concrete-1 { The simple name must be an
        accessible inner class of the qualifier } {
    
    empty_class T1591qc1 {
        class Inner{}
        Object o = new T1591qc1().new Inner();
    }

} {PASS}
Test Case: 15.9.1-qualified-concrete-2
Concrete classes may be final

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-concrete-2 { Concrete classes may be final } {
    
    empty_class T1591qc2 {
        final class Inner{}
        Object o = new T1591qc2().new Inner();
    }

} {PASS}
Test Case: 15.9.1-qualified-concrete-3
Concrete classes may not be abstract

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-3 { Concrete classes may not be
        abstract } {
    
    empty_class T1591qc3 {
        abstract class Inner{}
        Object o = new T1591qc3().new Inner();
    }

} {FAIL}
Test Case: 15.9.1-qualified-concrete-4
The simple name must be an accessible inner class of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-concrete-4 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas p1/T1591qc4_1.java {
package p1;
public class T1591qc4_1 {
    public class Inner{}
}
    }] [saveas p2/T1591qc4_2.java {
package p2;
import p1.*;
class T1591qc4_2 extends p1.T1591qc4_1 {
    Object o = new p1.T1591qc4_1().new Inner();
}
    }]

} {PASS}
Test Case: 15.9.1-qualified-concrete-5
The simple name must be an accessible inner class of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-concrete-5 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas p1/T1591qc5_1.java {
package p1;
public class T1591qc5_1 {
    protected class Inner{
        public Inner(){}
    }
}
    }] [saveas p2/T1591qc5_2.java {
package p2;
import p1.*;
class T1591qc5_2 extends p1.T1591qc5_1 {
    Object o = new p1.T1591qc5_1().new Inner();
}
    }]

} {PASS}
Test Case: 15.9.1-qualified-concrete-6
The simple name must be an accessible inner class of the qualifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-6 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas p1/T1591qc6_1.java {
package p1;
public class T1591qc6_1 {
    class Inner{}
}
    }] [saveas p2/T1591qc6_2.java {
package p2;
import p1.*;
class T1591qc6_2 extends p1.T1591qc6_1 {
    Object o = new p1.T1591qc6_1().new Inner();
}
    }]

} {FAIL}
Test Case: 15.9.1-qualified-concrete-7
The simple name must be an accessible inner class of the qualifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-7 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas p1/T1591qc7_1.java {
package p1;
public class T1591qc7_1 {
    private class Inner{}
}
    }] [saveas p2/T1591qc7_2.java {
package p2;
import p1.*;
class T1591qc7_2 extends p1.T1591qc7_1 {
    Object o = new p1.T1591qc7_1().new Inner();
}
    }]

} {FAIL}
Test Case: 15.9.1-qualified-concrete-8
The simple name must be an accessible inner class of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-concrete-8 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas T1591qc8_1.java {
class T1591qc8_1 {
    protected class Inner{}
}
class T1591qc8_2 extends T1591qc8_1 {
    Object o = new T1591qc8_1().new Inner();
}
    }]

} {PASS}
Test Case: 15.9.1-qualified-concrete-9
The simple name must be an accessible inner class of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-concrete-9 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas T1591qc9_1.java {
class T1591qc9_1 {
    class Inner{}
}
class T1591qc9_2 extends T1591qc9_1 {
    Object o = new T1591qc9_1().new Inner();
}
    }]

} {PASS}
Test Case: 15.9.1-qualified-concrete-10
The simple name must be an accessible inner class of the qualifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-10 { The simple name must be an
        accessible inner class of the qualifier } {
    
    compile [saveas T1591qc10_1.java {
class T1591qc10_1 {
    private class Inner{}
}
class T1591qc10_2 extends T1591qc10_1 {
    Object o = new T1591qc10_1().new Inner();
}
    }]

} {FAIL}
Test Case: 15.9.1-qualified-concrete-11
The qualified name must be simple

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-11 { The qualified name must be simple } {
    
    empty_class T1591qc11 {
        class Inner{}
        Object o = new T1591qc11().new T1591qc11.Inner();
    }

} {FAIL}
Test Case: 15.9.1-qualified-concrete-12
The qualified name must be an inner class

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-12 { The qualified name must be an
        inner class } {
    
    empty_class T1591qc12 {
        static class Inner{}
        Object o = new T1591qc12().new Inner();
    }

} {FAIL}
Test Case: 15.9.1-qualified-concrete-13
The qualified name must be an inner class

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-13 { The qualified name must be an
        inner class } {
    
    empty_class T1591qc13 {
        interface Inner{}
        Object o = new T1591qc13().new Inner();
    }

} {FAIL}
Test Case: 15.9.1-qualified-concrete-14
The qualified name must be an inner class

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-14 { The qualified name must be an
        inner class } {
    
    empty_class T1591qc14 {
        Object o = new T1591qc14().new Object();
    }

} {FAIL}
Test Case: 15.9.1-qualified-concrete-15
The concrete class extends the inner class of the type of the qualifier

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-concrete-15 { The concrete class extends
        the inner class of the type of the qualifier } {
    
    empty_class T1591qc15 {
        Object o = new T1591qc15(){
            class Inner{}
        }.new Inner();
    }

} {PASS}
Test Case: 15.9.1-qualified-concrete-16
The name may not be ambiguous, Inner is ambiguous, even though only one is an inner class member classes of interfaces are static, and do not have enclosing instance

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-16 { The name may not be ambiguous,
         Inner is ambiguous, even though only one is an inner class member
         classes of interfaces are static, and do not have enclosing instance } {
    
    compile [saveas T1591qc16_1.java {
class T1591qc16_1 {
    class Inner{}
}
interface T1591qc16_2 {
    class Inner{}
}
class T1591qc16_3 extends T1591qc16_1 implements T1591qc16_2 {
    Object o = new T1591qc16_3().new Inner();
}
    }]

} {FAIL}
Test Case: 15.9.1-qualified-concrete-17
The qualifier must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-17 { The qualifier must be a reference } {
    
    empty_class T1591qc17 {
        class Inner{}
        int foo() { return 1; }
        Object o = foo().new Inner();
    }

} {FAIL}
Test Case: 15.9.1-qualified-concrete-18
The qualifier must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-18 { The qualifier must be a reference } {
    
    empty_class T1591qc18 {
        class Inner{}
        Object o = null.new Inner();
    }

} {FAIL}
Test Case: 15.9.1-qualified-concrete-19
The qualifier must be a reference

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-19 { The qualifier must be a reference } {
    
    empty_class T1591qc19 {
        class Inner{}
        Object o = System.out.println().new Inner();
    }

} {FAIL}
Test Case: 15.9.1-qualified-concrete-20
The qualified name must be an inner class of the qualifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-20 { The qualified name must be an
        inner class of the qualifier } {
    
    compile [saveas T1591qa20_1.java {
class T1591qa20_1 {}
class T1591qa20_2 extends T1591qa20_1 {
    class Inner{}
    Object o = ((T1591qa20_1)new T1591qa20_2()).new Inner();
}
    }]

} {FAIL}
Test Case: 15.9.1-qualified-concrete-21
The ClassOrInterfaceType must be accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-concrete-21 { The ClassOrInterfaceType must
        be accessible } {
    
    empty_class T1591qc21 {
	private class One {}
	class Two {
	    Two() {
		T1591qc21.this.new One();
	    }
	}
    }

} {PASS}
Test Case: 15.9.1-qualified-concrete-22
The qualifier must be a primary, not a typename

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-22 { The qualifier must be a primary,
        not a typename } {
    
    empty_class T1591qc22 {
	static class A {}
	{ T1591qc22.new A(); }
    }

} {FAIL}
Test Case: 15.9.1-qualified-concrete-23
The qualifier must be a primary, not a typename

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-concrete-23 { The qualifier must be a primary,
        not a typename } {
    
    empty_class T1591qc23 {
	class A {}
	{
	    T1591qc23 t = this;
	    t.new A(); // this is legal in spite of the chapter 15 grammar
	}
    }

} {PASS}
Test Case: 15.9.1-qualified-concrete-24
The identifier must not be ambiguous, but it must also name a non-static type

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-24 { The identifier must not be
        ambiguous, but it must also name a non-static type } {
    
    compile [saveas p1/T1591qc24c.java {
package p1;
class T1591qc24a {
    class C {}
}
interface T1591qc24b {
    class C {}
}
public class T1591qc24c extends T1591qc24a implements T1591qc24b {}
    }] [saveas T1591qc24d.java {
class T1591qc24d {
    // This resolves to b.C, since a.C is inaccessible. However, b.C is static
    { new p1.T1591qc24c().new C(); }
}
    }]

} {FAIL}
Test Case: 15.9.1-qualified-concrete-25
The identifier is a typename

Expected Result: PASS

Regression Test:

tcltest::test 15.9.1-qualified-concrete-25 { The identifier is a typename } {
    
    empty_class T1591qc25 {
	class A {}
	int A;
	int A() { return 0; }
	{ new T1591qc25().new A(); }
    }

} {PASS}
Test Case: 15.9.1-qualified-concrete-26
The ClassOrInterfaceType must exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.1-qualified-concrete-26 { The ClassOrInterfaceType must
        exist } {
    
    empty_class T1591qc26 {
	Object o = "".new UnknownType();
    }

} {FAIL}

15.9.2

Directory : tests/jls/expressions/class-instance-creation/determining-enclosing-instances


Test Case: 15.9.2-inner-member-1
if C is an inner member, and the creation expression is unqualified, the enclosing instance is the innermost enclosing instance of the correct type at the point of creation

Expected Result: PASS

Regression Test:

tcltest::test 15.9.2-inner-member-1 { if C is an inner member, and the
        creation expression is unqualified, the enclosing instance is the
        innermost enclosing instance of the correct type at the point
        of creation } {
    
    compile [saveas T1592im1.java {
interface T1592im1 {
    class O {
        class C {} 
	O() {
            new C();
        }
    }
}
    }]

} {PASS}

15.9.3

Directory : tests/jls/expressions/class-instance-creation/choosing-the-constructor


Test Case: 15.9.3-anonymous-1
If the anonymous class extends an inner class, the parameters may need to include the enclosing instance for the superclass

Expected Result: PASS

Regression Test:

tcltest::test 15.9.3-anonymous-1 { If the anonymous class extends an inner
        class, the parameters may need to include the enclosing instance for
        the superclass } {
    
    empty_class T1593a1 {
	class A {}
	Object o = new A() {}; // needs enclosing instance
    }

} {PASS}
Test Case: 15.9.3-anonymous-2
If the anonymous class extends an inner class, the parameters may need to include the enclosing instance for the superclass

Expected Result: PASS

Regression Test:

tcltest::test 15.9.3-anonymous-2 { If the anonymous class extends an inner
        class, the parameters may need to include the enclosing instance for
        the superclass } {
    
    empty_class T1593a2 {
	static class A {}
	Object o = new A() {}; // does not need enclosing instance
    }

} {PASS}
Test Case: 15.9.3-anonymous-3
If the anonymous class extends an inner class, the parameters may need to include the enclosing instance for the superclass

Expected Result: PASS

Regression Test:

tcltest::test 15.9.3-anonymous-3 { If the anonymous class extends an inner
        class, the parameters may need to include the enclosing instance for
        the superclass } {
    
    empty_class T1593a3 {
	static {
	    class A {}
	    Object o = new A() {}; // does not need enclosing instance
	}
    }

} {PASS}
Test Case: 15.9.3-choosing-1
A unique most-specific accessible constructor must exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.3-choosing-1 { A unique most-specific accessible constructor
        must exist } {
    
    empty_class T1593c1 {
	Object o = new Object(1); // Object(int) does not exist
    }

} {FAIL}
Test Case: 15.9.3-choosing-2
A unique most-specific accessible constructor must exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.3-choosing-2 { A unique most-specific accessible constructor
        must exist } {
    
    compile [saveas T1593c2a.java {
class T1593c2a {
    private T1593c2a() {}
}
class T1593c2b {
    Object o = new T1593c2a(); // not accessible
}
    }]

} {FAIL}
Test Case: 15.9.3-choosing-3
A unique most-specific accessible constructor must exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.3-choosing-3 { A unique most-specific accessible constructor
        must exist } {
    
    empty_class T1593c3 {
        T1593c3(int i, byte b) {}
        T1593c3(byte b, int i) {}
        byte b;
        Object o = new T1593c3(b, b);
    }

} {FAIL}
Test Case: 15.9.3-choosing-4
A unique most-specific accessible constructor must exist

Expected Result: PASS

Regression Test:

tcltest::test 15.9.3-choosing-4 { A unique most-specific accessible constructor
        must exist } {
    
    compile [saveas T1593c4a.java {
class T1593c4a {
    private T1593c4a(int i, byte b) {}
    T1593c4a(byte b, int i) {}
}
class T1593c4b {
    byte b;
    Object o = new T1593c4a(b, b) {};
}
    }]

} {PASS}
Test Case: 15.9.3-choosing-5
A unique most-specific accessible constructor must exist

Expected Result: PASS

Regression Test:

tcltest::test 15.9.3-choosing-5 { A unique most-specific accessible constructor
        must exist } {
    
    empty_class T1593c5 {
        private T1593c5() {}
        Object o = new T1593c5();
    }

} {PASS}
Test Case: 15.9.3-choosing-6
A unique most-specific accessible constructor must exist

Expected Result: PASS

Regression Test:

tcltest::test 15.9.3-choosing-6 { A unique most-specific accessible constructor
        must exist } {
    
    compile [saveas p1/T1593c6a.java {
package p1;
public class T1593c6a {
    protected T1593c6a(String s) {}
    public T1593c6a(Integer i) {}
}
    }] [saveas T1593c6b.java {
class T1593c6b {
    Object o = new p1.T1593c6a(null); // only T1593c6a(Integer) is accessible
}
    }]

} {PASS}
Test Case: 15.9.3-choosing-7
A unique most-specific accessible constructor must exist

Expected Result: PASS

Regression Test:

tcltest::test 15.9.3-choosing-7 { A unique most-specific accessible constructor
        must exist } {
    
    empty_class T1593c7 {
	A a = new A();
	static class A {
	    private A() {}
	    // compiler creates A(T1593c7$1 dummy) { this(); }
	    A(String s) {}
	}
	// no ambiguity between real A(String), synthetic A(dummy)
	{ new A(null); }
    }

} {PASS}
Test Case: 15.9.3-choosing-8
A unique most-specific accessible constructor must exist

Expected Result: PASS

Regression Test:

tcltest::test 15.9.3-choosing-8 { A unique most-specific accessible constructor
        must exist } {
    
    compile [saveas T1593c8a.java {
class T1593c8a {
    A a = new A();
    static class A {
	private A() {}
	// compiler creates A(T1593c8a$1 dummy) { this(); }
	A(String s) {}
    }
}
    }]
    delete T1593c8a.java
    compile -classpath . [saveas T1593c8b.java {
class T1593c8b {
    // no ambiguity between real A(String), synthetic A(dummy)
    { new T1593c8a.A(null); }
}
    }]

} {PASS}

15.9.5.1

Directory : tests/jls/expressions/class-instance-creation/anonymous-class-declarations/anonymous-constructors


Test Case: 15.9.5.1-implicit-1
An anonymous class cannot have an explicit constructor

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.5.1-implicit-1 { An anonymous class cannot have an
        explicit constructor } {
    
    empty_main T15951i1 {
        new Object() {
            Object() {}
        };
    }

} {FAIL}
Test Case: 15.9.5.1-superconstructor-1
An anonymous class is invalid if the superconstructor does not exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.5.1-superconstructor-1 { An anonymous class is invalid if
        the superconstructor does not exist } {
    
    empty_main T15951s1 {
        new Object(1) {};
    }

} {FAIL}
Test Case: 15.9.5.1-superconstructor-2
An anonymous class is invalid if the superconstructor is not accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.5.1-superconstructor-2 { An anonymous class is invalid if
        the superconstructor is not accessible } {
    
    compile [saveas T15951s2.java {
class T15951s2 {
    private T15951s2() {}
}
class Other2 {
    Object o = new T15951s2() {};
}
    }]

} {FAIL}
Test Case: 15.9.5.1-superconstructor-3
An anonymous class is invalid if the superconstructor is ambiguous

Expected Result: FAIL

Regression Test:

tcltest::test 15.9.5.1-superconstructor-3 { An anonymous class is invalid if
        the superconstructor is ambiguous } {
    
    empty_class T15951s3 {
        T15951s3(int i, byte b) {}
        T15951s3(byte b, int i) {}
        byte b;
        Object o = new T15951s3(b, b) {};
    }

} {FAIL}
Test Case: 15.9.5.1-superconstructor-4
Accessibility disambiguates the superconstructor of an anonymous class

Expected Result: PASS

Regression Test:

tcltest::test 15.9.5.1-superconstructor-4 { Accessibility disambiguates
        the superconstructor of an anonymous class } {
    
    compile [saveas T15951s4.java {
class T15951s4 {
    private T15951s4(int i, byte b) {}
    T15951s4(byte b, int i) {}
}
class Other4 {
    byte b;
    Object o = new T15951s4(b, b) {};
}
    }]

} {PASS}
Test Case: 15.9.5.1-superconstructor-5
An anonymous class may access a private superconstructor within the same enclosing class

Expected Result: PASS

Regression Test:

tcltest::test 15.9.5.1-superconstructor-5 { An anonymous class may access
        a private superconstructor within the same enclosing class } {
    
    empty_class T15951s5 {
        private T15951s5() {}
        Object o = new T15951s5() {};
    }

} {PASS}
Test Case: 15.9.5.1-superconstructor-6
An anonymous class may access the protected constructor of a class from another package

Expected Result: PASS

Regression Test:

tcltest::test 15.9.5.1-superconstructor-6 { An anonymous class may access
        the protected constructor of a class from another package } {
    
    saveas p1/T15951s6_1.java {
package p1;
public class T15951s6_1 {
    protected T15951s6_1() {}
}
    }
    saveas p2/T15951s6_2.java {
package p2;
import p1.T15951s6_1;
class T15951s6_2 {
    Object o = new T15951s6_1() {};
}
    }
    compile p1/T15951s6_1.java p2/T15951s6_2.java

} {PASS}
Test Case: 15.9.5.1-superconstructor-7
An anonymous class may refer to an inaccessible type mentioned as a superconstructor parameter

Expected Result: PASS

Regression Test:

tcltest::test 15.9.5.1-superconstructor-7 { An anonymous class may refer to
        an inaccessible type mentioned as a superconstructor parameter } {
    
    compile [saveas p1/T15951s7_2.java {
package p1;
class T15951s7_1 {}
public class T15951s7_2 {
    public static T15951s7_1 get() { return new T15951s7_1(); }
    public static class Inner extends T15951s7_1 {}
    public T15951s7_2(T15951s7_1 s) {}
}
    }] [saveas T15951s7_3.java {
import p1.T15951s7_2;
class T15951s7_3 {
    {
	new T15951s7_2(null);
	new T15951s7_2(null) {};
	new T15951s7_2(T15951s7_2.get());
	new T15951s7_2(T15951s7_2.get()) {};
	new T15951s7_2(new T15951s7_2.Inner());
	new T15951s7_2(new T15951s7_2.Inner()) {};
	new T15951s7_2(new T15951s7_2.Inner() {});
	new T15951s7_2(new T15951s7_2.Inner() {}) {};
    }
}
    }]

} {PASS}
Test Case: 15.9.5.1-superconstructor-8
A unique most-specific accessible constructor must exist

Expected Result: PASS

Regression Test:

tcltest::test 15.9.5.1-superconstructor-8 { A unique most-specific accessible
        constructor must exist } {
    
    empty_class T15951s8 {
	A a = new A();
	static class A {
	    private A() {}
	    // compiler creates A(T15951s8$1 dummy) { this(); }
	    A(String s) {}
	}
	// no ambiguity between real A(String), synthetic A(dummy)
	{ new A(null) {}; }
    }

} {PASS}
Test Case: 15.9.5.1-superconstructor-9
A unique most-specific accessible constructor must exist

Expected Result: PASS

Regression Test:

tcltest::test 15.9.5.1-superconstructor-9 { A unique most-specific accessible
        constructor must exist } {
    
    compile [saveas T15951s9a.java {
class T15951s9a {
    A a = new A();
    static class A {
	private A() {}
	// compiler creates A(T15951s9a$1 dummy) { this(); }
	A(String s) {}
    }
}
    }]
    delete T15951s9a.java
    compile -classpath . [saveas T15951s9b.java {
class T15951s9b {
    // no ambiguity between real A(String), synthetic A(dummy)
    { new T15951s9a.A(null); }
}
    }]

} {PASS}
Test Case: 15.9.5.1-exception-1
An anonymous class constructor legally throws whatever exception the superconstructor does

Expected Result: PASS

Regression Test:

tcltest::test 15.9.5.1-exception-1 { An anonymous class constructor legally
        throws whatever exception the superconstructor does } {
    
    empty_class T15951e1 {
        T15951e1() throws InterruptedException {}
        void foo() {
            try {
                new T15951e1() {};
            } catch (InterruptedException e) {
            }
        }
    }

} {PASS}
Test Case: 15.9.5.1-exception-2
An anonymous class constructor legally throws whatever exception the superconstructor does

Expected Result: PASS

Regression Test:

tcltest::test 15.9.5.1-exception-2 { An anonymous class constructor legally
        throws whatever exception the superconstructor does } {
    
    empty_class T15951e2 {
        T15951e2() throws RuntimeException, Error {}
        void foo() {
            try {
                new T15951e2() {};
            } catch (RuntimeException re) {
            } catch (Error e) {
            }
        }
    }

} {PASS}
Test Case: 15.9.5.1-exception-3
An anonymous class constructor legally throws whatever exception an instance initializer throws

Expected Result: PASS

Regression Test:

tcltest::test 15.9.5.1-exception-3 { An anonymous class constructor legally
        throws whatever exception an instance initializer throws } {
    
    empty_main T15951e3 {
        try {
            new Object() {
                int i = foo();
                int foo() throws InterruptedException { return 0; }
            };
        } catch (InterruptedException e) {
        }
    }

} {PASS}
Test Case: 15.9.5.1-exception-4
An anonymous class constructor legally throws whatever exception an instance initializer throws

Expected Result: PASS

Regression Test:

tcltest::test 15.9.5.1-exception-4 { An anonymous class constructor legally
        throws whatever exception an instance initializer throws } {
    
    empty_main T15951e4 {
        try {
            new Object() {
                {
                    if (true) // initializer must be able to complete normally
                        throw new InterruptedException();
                }
            };
        } catch (InterruptedException e) {
        }
    }

} {PASS}

15.10

Directory : tests/jls/expressions/array-creation-expressions


Test Case: 15.10-initializer-syntax-1
array initializer may be empty

Expected Result: PASS

Regression Test:

tcltest::test 15.10-initializer-syntax-1 { array initializer may be empty } {
    
    empty_main T1510is1 {
        int[] ia = new int[] {};
    }

} {PASS}
Test Case: 15.10-initializer-syntax-2
array initializer may contain initializers

Expected Result: PASS

Regression Test:

tcltest::test 15.10-initializer-syntax-2 { array initializer may contain
        initializers } {
    
    empty_main T1510is2 {
        int[] ia = new int[] { 1 };
    }

} {PASS}
Test Case: 15.10-initializer-syntax-3
array initializer may contain initializers

Expected Result: PASS

Regression Test:

tcltest::test 15.10-initializer-syntax-3 { array initializer may contain
        initializers } {
    
    empty_main T1510is3 {
        int[] ia = new int[] { 1, 2 };
    }

} {PASS}
Test Case: 15.10-initializer-syntax-4
array initializer may contain concluding comma

Expected Result: PASS

Regression Test:

tcltest::test 15.10-initializer-syntax-4 { array initializer may contain
        concluding comma } {
    
    empty_main T1510is4 {
        int[] ia = new int[] { , };
    }

} {PASS}
Test Case: 15.10-initializer-syntax-5
array initializer may contain concluding comma

Expected Result: PASS

Regression Test:

tcltest::test 15.10-initializer-syntax-5 { array initializer may contain
        concluding comma } {
    
    empty_main T1510is5 {
        int[] ia = new int[] { 1, };
    }

} {PASS}
Test Case: 15.10-initializer-syntax-6
array initializers may nest

Expected Result: PASS

Regression Test:

tcltest::test 15.10-initializer-syntax-6 { array initializers may nest } {
    
    empty_main T1510is6 {
        int[][] iaa = new int[][] { {1}, {2} };
    }

} {PASS}
Test Case: 15.10-initializer-syntax-7
array bounds determined automatically when initialized

Expected Result: FAIL

Regression Test:

tcltest::test 15.10-initializer-syntax-7 { array bounds determined
        automatically when initialized } {
    
    empty_main T1510is7 {
	Object o = new int[1] {0};
    }

} {FAIL}
Test Case: 15.10-initializer-type-1
expressions in array initializer must be assignment compatible with array type

Expected Result: PASS

Regression Test:

tcltest::test 15.10-initializer-type-1 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it1 {
        short s = 1;
        int[] ia = new int[] { s, '1' };
    }

} {PASS}
Test Case: 15.10-initializer-type-2
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.10-initializer-type-2 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it2 {
        int[] ia = new int[] { 1L };
    }

} {FAIL}
Test Case: 15.10-initializer-type-3
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.10-initializer-type-3 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it3 {
        int[] ia = new int[] { new Object() };
    }

} {FAIL}
Test Case: 15.10-initializer-type-4
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.10-initializer-type-4 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it4 {
        int[] ia = new int[] { null };
    }

} {FAIL}
Test Case: 15.10-initializer-type-5
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.10-initializer-type-5 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it5 {
        int[] ia = new int[] { System.out.println() };
    }

} {FAIL}
Test Case: 15.10-initializer-type-6
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.10-initializer-type-6 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it6 {
        Object[] oa = new Object[] { 1 };
    }

} {FAIL}
Test Case: 15.10-initializer-type-7
expressions in array initializer must be assignment compatible with array type

Expected Result: PASS

Regression Test:

tcltest::test 15.10-initializer-type-7 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it7 {
        Object[] oa = new Object[] { new Object() };
    }

} {PASS}
Test Case: 15.10-initializer-type-8
expressions in array initializer must be assignment compatible with array type

Expected Result: PASS

Regression Test:

tcltest::test 15.10-initializer-type-8 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it8 {
        Object[] oa = new Object[] { null };
    }

} {PASS}
Test Case: 15.10-initializer-type-9
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.10-initializer-type-9 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it9 {
        Object[] oa = new Object[] { System.out.println() };
    }

} {FAIL}
Test Case: 15.10-initializer-type-10
expressions in array initializer must be assignment compatible with array type

Expected Result: PASS

Regression Test:

tcltest::test 15.10-initializer-type-10 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it10 {
        int[][] iaa = new int[][] { {1} };
    }

} {PASS}
Test Case: 15.10-initializer-type-11
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.10-initializer-type-11 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it11 {
        int[][] iaa = new int[][] { 1 };
    }

} {FAIL}
Test Case: 15.10-initializer-type-12
expressions in array initializer must be assignment compatible with array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.10-initializer-type-12 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it12 {
        int[][] iaa = new int[][] { { {1} } };
    }

} {FAIL}
Test Case: 15.10-initializer-type-13
expressions in array initializer must be assignment compatible with array type

Expected Result: PASS

Regression Test:

tcltest::test 15.10-initializer-type-13 { expressions in array initializer
        must be assignment compatible with array type } {
    
    empty_main T1510it13 {
        int[][] iaa = new int[][] { {1, 2}, null };
    }

} {PASS}
Test Case: 15.10-uninitialized-1
At least one dimension must be specified

Expected Result: FAIL

Regression Test:

tcltest::test 15.10-uninitialized-1 { At least one dimension must be
        specified } {
    
    empty_main T1510u1 {
	Object o = new int[][];
    }

} {FAIL}
Test Case: 15.10-uninitialized-2
Some dimensions may to be specified

Expected Result: PASS

Regression Test:

tcltest::test 15.10-uninitialized-2 { Some dimensions may to be specified } {
    
    empty_main T1510u2 {
	Object o = new int[1][];
    }

} {PASS}
Test Case: 15.10-uninitialized-3
All dimensions may to be specified

Expected Result: PASS

Regression Test:

tcltest::test 15.10-uninitialized-3 { All dimensions may to be specified } {
    
    empty_main T1510u3 {
	Object o = new int[1][2];
    }

} {PASS}
Test Case: 15.10-uninitialized-4
Trailing dimensions may be specified only when leading ones are

Expected Result: FAIL

Regression Test:

tcltest::test 15.10-uninitialized-4 { Trailing dimensions may be specified
        only when leading ones are } {
    
    empty_main T1510u4 {
	Object o = new int[][2];
    }

} {FAIL}
Test Case: 15.10-uninitialized-5
negative constant dimensions are stupid, but legal

Expected Result: OK

Regression Test:

tcltest::test 15.10-uninitialized-5 { negative constant dimensions are
        stupid, but legal } {
    
    ok_pass_or_warn [empty_main T1510u5 {
	Object o = new int[-1];
    }]

} {OK}

15.11.1

Directory : tests/jls/expressions/field-access-expressions/using-a-primary


Test Case: 15.11.1-invalid-1
Member types are not fields

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.1-invalid-1 { Member types are not fields } {
    
    empty_class T15111i1 {
        static class A {
            static class B {
                static int i = 1;
            }
        }
        int j = new A().B.i;
    }

} {FAIL}
Test Case: 15.11.1-ambiguous-1
Accessing ambiguous fields is an error

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.1-ambiguous-1 { Accessing ambiguous fields is an error } {
    
    compile [saveas T15111a1a.java {
interface T15111a1a {
    int i = 1;
}
class T15111a1b {
    int i = 2;
}
class T15111a1c extends T15111a1b implements T15111a1a {
    static int j = new T15111a1c().i;
}
}]

} {FAIL}
Test Case: 15.11.1-ambiguous-2
There is no ambiguity if one field is not accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.11.1-ambiguous-2 { There is no ambiguity if one field
        is not accessible } {
    
    compile [saveas p1/T15111a2a.java {
package p1;
public class T15111a2a {
    int i = 1;
}
}] [saveas T15111a2b.java {
interface T15111a2b {
    int i = 2;
}
class T15111a2c extends p1.T15111a2a implements T15111a2b {
    static int j = new T15111a2c().i; // only b.i is accessible
}
}]

} {PASS}
Test Case: 15.11.1-ambiguous-3
There is no ambiguity if one field is not accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.11.1-ambiguous-3 { There is no ambiguity if one field
        is not accessible } {
    
    compile [saveas p1/T15111a3a.java {
package p1;
public class T15111a3a {
    protected int i = 1;
}
}] [saveas T15111a3b.java {
interface T15111a3b {
    int i = 2;
}
class T15111a3c extends p1.T15111a3a implements T15111a3b {}
class T15111a3d extends T15111a3c {
    // Even though d inherits two versions of i, the protected a.i
    // is only accessible if the qualifying expression is type d or lower
    static int j = new T15111a3c().i; // only b.i is accessible
}
}]

} {PASS}
Test Case: 15.11.1-ambiguous-4
There is no ambiguity if one field is not accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.1-ambiguous-4 { There is no ambiguity if one field
        is not accessible } {
    
    compile [saveas p1/T15111a4a.java {
package p1;
public class T15111a4a {
    protected int i = 1;
}
}] [saveas T15111a4b.java {
interface T15111a4b {
    int i = 2;
}
class T15111a4c extends p1.T15111a4a implements T15111a4b {}
class T15111a4d extends T15111a4c {
    // Even though d inherits two versions of i, the protected a.i
    // is only accessible if the qualifying expression is type d or lower
    static int j = new T15111a4d().i; // both a.i and b.i are accessible
}
}]

} {FAIL}
Test Case: 15.11.1-explicit-constructor-1
Cannot access instance fields from this class within an explicit constructor

Expected Result: PASS

Regression Test:

tcltest::test 15.11.1-explicit-constructor-1 { Cannot access instance fields
        from this class within an explicit constructor } {
    
    empty_class T15111ec1 {
	int i;
	T15111ec1(int i) {}
	class Sub extends T15111ec1 {
	    Sub() {
		// using the enclosing i, not the inherited i, is legal
		super(T15111ec1.this.i);
	    }
	}
    }

} {PASS}
Test Case: 15.11.1-explicit-constructor-2
Cannot access instance fields from this class within an explicit constructor

Expected Result: PASS

Regression Test:

tcltest::test 15.11.1-explicit-constructor-2 { Cannot access instance fields
        from this class within an explicit constructor } {
    
    empty_class T15111ec2 {
	int i;
	class Inner {
	    Inner(int i) {}
	    Inner() {
		// explicit mention of the only version of i
		this(T15111ec2.this.i);
	    }
	}
    }

} {PASS}
Test Case: 15.11.1-explicit-constructor-3
Cannot access instance fields from this class within an explicit constructor

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.1-explicit-constructor-3 { Cannot access instance fields
        from this class within an explicit constructor } {
    
    empty_class T15111ec3 {
	int i;
	T15111ec3(int i) {}
	class Sub extends T15111ec3 {
	    Sub() {
		// using the inherited i is illegal
		super(this.i);
	    }
	}
    }

} {FAIL}

15.11.2

Directory : tests/jls/expressions/field-access-expressions/accessing-superclass-members-using-super


Test Case: 15.11.2-syntax-1
The type in the qualified super is not obscured

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-syntax-1 { The type in the qualified super is not
        obscured } {
    
    compile [saveas T15112s1a.java {
class T15112s1a {
    int i;
}
class T15112s1b extends T15112s1a {
    int T15112s1b; // obscure the class name from normal expressions
    int j = T15112s1b.super.i;
}
    }]

} {PASS}
Test Case: 15.11.2-syntax-2
The type in qualified super may not be a primitive type

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-syntax-2 { The type in qualified super may not be a
        primitive type } {
    
    compile [saveas T15112s2a.java {
class T15112s2a {
    int i;
}
class T15112s2b extends T15112s2a {
    Object o = int.super.i;
}
    }]

} {FAIL}
Test Case: 15.11.2-syntax-3
The type in qualified super may not be an array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-syntax-3 { The type in qualified super may not be an
        array type } {
    
    compile [saveas T15112s3a.java {
class T15112s3a {
    int i;
}
class T15112s3b extends T15112s3a {
    Object o = int[].super.i;
}
    }]

} {FAIL}
Test Case: 15.11.2-syntax-4
The type in qualified super may not be an array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-syntax-4 { The type in qualified super may not be an
        array type } {
    
    compile [saveas T15112s4a.java {
class T15112s4a {
    int i;
}
class T15112s4b extends T15112s4a {
    Object o = T15112s4a[].super.i;
}
    }]

} {FAIL}
Test Case: 15.11.2-syntax-5
The type in qualified super may not be null

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-syntax-5 { The type in qualified super may not be
        null } {
    
    compile [saveas T15112s5a.java {
class T15112s5a {
    int i;
}
class T15112s5b extends T15112s5a {
    Object o = null.super.i;
}
    }]

} {FAIL}
Test Case: 15.11.2-syntax-6
The type in qualified super may not be void

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-syntax-6 { The type in qualified super may not be
        void } {
    
    compile [saveas T15112s6a.java {
class T15112s6a {
    int i;
}
class T15112s6b extends T15112s6a {
    Object o = void.super.i;
}
    }]

} {FAIL}
Test Case: 15.11.2-syntax-7
The type in qualified super may not be a literal

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-syntax-7 { The type in qualified super may not be a
        literal } {
    
    compile [saveas T15112s7a.java {
class T15112s7a {
    int i;
}
class T15112s7b extends T15112s7a {
    Object o = 1 .super.i;
}
    }]

} {FAIL}
Test Case: 15.11.2-syntax-8
The type in qualified super may not be a literal

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-syntax-8 { The type in qualified super may not be a
        literal } {
    
    compile [saveas T15112s8a.java {
class T15112s8a {
    int i;
}
class T15112s8b extends T15112s8a {
    Object o = "1".super.i;
}
    }]

} {FAIL}
Test Case: 15.11.2-syntax-9
The type in qualified super must enclose the current type

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-syntax-9 { The type in qualified super must enclose the
        current type } {
    
    empty_class T15112s9 {
	static class A {
	    static int i;
	}
	class B extends A {}
	int j = B.super.i;
    }

} {FAIL}
Test Case: 15.11.2-syntax-10
The type in qualified super must enclose the current type

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-syntax-10 { The type in qualified super must enclose the
        current type } {
    
    empty_class T15112s10 {
	interface A {
	    int i = 1;
	}
	interface B extends A {
	    class C {
		int j = B.super.i; // B encloses C, but is not a class
	    }
	}
    }

} {FAIL}
Test Case: 15.11.2-explicit-constructor-1
Cannot access instance fields from this class within an explicit constructor

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-explicit-constructor-1 { Cannot access instance fields
        from this class within an explicit constructor } {
    
    empty_class T15112ec1 {
	int i;
	T15112ec1(int i) {}
	class Sub extends T15112ec1 {
	    Sub() {
		// calling superclass version of inherited i is wrong
		super(super.i);
	    }
	}
    }

} {FAIL}
Test Case: 15.11.2-explicit-constructor-2
Cannot access instance fields from this class within an explicit constructor

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-explicit-constructor-2 { Cannot access instance fields
        from this class within an explicit constructor } {
    
    empty_class T15112ec2 {
	class One {
	    int i;
	}
	class Two extends One {
	    class Inner {
		Inner(int i) {}
		Inner() {
		    // calling super field of enclosing class is legal
		    this(Two.super.i);
		}
	    }
	}
    }

} {PASS}
Test Case: 15.11.2-use-1
super.field must be in non-static context

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-use-1 { super.field must be in non-static context } {
    
    empty_class T15112u1 {
	static class A {
	    static int i;
	}
	static class B extends A {
	    static int j = super.i;
	}
    }

} {FAIL}
Test Case: 15.11.2-use-2
super.field must be in non-static context

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-use-2 { super.field must be in non-static context } {
    
    empty_class T15112u2 {
	static class A {
	    static int i;
	}
	static class B extends A {
	    static { super.i++; }
	}
    }

} {FAIL}
Test Case: 15.11.2-use-3
super.field must be in non-static context

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-use-3 { super.field must be in non-static context } {
    
    empty_class T15112u3 {
	static class A {
	    static int i;
	}
	static class B extends A {
	    static void m() { super.i++; }
	}
    }

} {FAIL}
Test Case: 15.11.2-use-4
super.field must be in non-static context

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-use-4 { super.field must be in non-static context } {
    
    empty_class T15112u4 {
	interface A {
	    int i = 1;
	}
	interface B extends A {
	    int j = super.i;
	}
    }

} {FAIL}
Test Case: 15.11.2-use-5
super.field must be in non-static context

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-use-5 { super.field must be in non-static context } {
    
    empty_class T15112u5 {
	static class A {
	    static int i;
	}
	static class B extends A {
	    static int j = B.super.i;
	}
    }

} {FAIL}
Test Case: 15.11.2-use-6
super.field must be in non-static context

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-use-6 { super.field must be in non-static context } {
    
    empty_class T15112u6 {
	static class A {
	    static int i;
	}
	static class B extends A {
	    static { B.super.i++; }
	}
    }

} {FAIL}
Test Case: 15.11.2-use-7
super.field must be in non-static context

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-use-7 { super.field must be in non-static context } {
    
    empty_class T15112u7 {
	static class A {
	    static int i;
	}
	static class B extends A {
	    static void m() { B.super.i++; }
	}
    }

} {FAIL}
Test Case: 15.11.2-use-8
super.field must be in non-static context

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-use-8 { super.field must be in non-static context } {
    
    empty_class T15112u8 {
	interface A {
	    int i = 1;
	}
	interface B extends A {
	    int j = B.super.i;
	}
    }

} {FAIL}
Test Case: 15.11.2-use-9
super.field must refer to a single accessible field in the superclass

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-use-9 { super.field must refer to a single accessible
        field in the superclass } {
    
    compile [saveas T15112u9a.java {
class T15112u9a {
    private int i;
}
class T15112u9b extends T15112u9a {
    int j = super.i;
}
    }]

} {FAIL}
Test Case: 15.11.2-use-10
super.field must refer to a single accessible field in the superclass

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-use-10 { super.field must refer to a single accessible
        field in the superclass } {
    
    empty_class T15112u10 {
	int i = super.no_such_field;
    }

} {FAIL}
Test Case: 15.11.2-use-11
super.field must refer to a single accessible field in the superclass

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-use-11 { super.field must refer to a single accessible
        field in the superclass } {
    
    empty_class T15112u11 {
	class A {
	    int i;
	}
	interface B {
	    Object i = null;
	}
	class C extends A implements B {
	    int j = super.i; // refers to A.i, not B.i
	}
    }

} {PASS}
Test Case: 15.11.2-use-12
super.field must refer to a single accessible field in the superclass

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-use-12 { super.field must refer to a single accessible
        field in the superclass } {
    
    empty_class T15112u12 {
	class A {
	    int i;
	}
	interface B {
	    Object i = null;
	}
	class C extends A implements B {}
	class D extends C {
	    int j = super.i; // ambiguous between A.i and B.i
	}
    }

} {FAIL}
Test Case: 15.11.2-meaning-1
super.field is (almost) ((S)this).field

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-meaning-1 { super.field is (almost) ((S)this).field } {
    
    empty_class T15112m1 {
	class A {
	    int i;
	}
	class B extends A {
	    Object i;
	    int j = super.i;
	    int k = ((A) this).i;
	}
    }

} {PASS}
Test Case: 15.11.2-meaning-2
super.field is (almost) ((S)this).field

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-meaning-2 { super.field is (almost) ((S)this).field } {
    
    compile [saveas p1/T15112m2a.java {
package p1;
public class T15112m2a {
    protected int i;
}
    }] [saveas T15112m2b.java {
class T15112m2b extends p1.T15112m2a {
    Object i;
    int j = super.i;
}
    }]

} {PASS}
Test Case: 15.11.2-meaning-3
super.field is (almost) ((S)this).field

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-meaning-3 { super.field is (almost) ((S)this).field } {
    
    compile [saveas p1/T15112m3a.java {
package p1;
public class T15112m3a {
    protected int i;
}
    }] [saveas T15112m3b.java {
class T15112m3b extends p1.T15112m3a {
    Object i;
    // oops, wrong qualifier for instance field access
    int j = ((p1.T15112m3a) this).i;
}
    }]

} {FAIL}
Test Case: 15.11.2-meaning-4
super.field is (almost) ((S)this).field

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-meaning-4 { super.field is (almost) ((S)this).field } {
    
    compile [saveas p1/T15112m4a.java {
package p1;
public class T15112m4a {
    protected static int i;
}
    }] [saveas T15112m4b.java {
class T15112m4b extends p1.T15112m4a {
    Object i;
    int j = super.i;
    int k = ((p1.T15112m4a) this).i;
}
    }]

} {PASS}
Test Case: 15.11.2-meaning-5
super.field is (almost) ((S)this).field

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-meaning-5 { super.field is (almost) ((S)this).field } {
    
    compile [saveas p1/T15112m5c.java {
package p1;
class T15112m5a {
    protected int i;
}
interface T15112m5b {
    int i = 1;
}
public class T15112m5c extends T15112m5a implements T15112m5b {}
    }] [saveas T15112m5d.java {
class T15112m5d extends p1.T15112m5c {
    int j = super.i; // ambiguous between a.i and b.i
}
    }]

} {FAIL}
Test Case: 15.11.2-meaning-6
super.field is (almost) ((S)this).field

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-meaning-6 { super.field is (almost) ((S)this).field } {
    
    compile [saveas p1/T15112m6c.java {
package p1;
class T15112m6a {
    protected int i;
}
interface T15112m6b {
    int i = 1;
}
public class T15112m6c extends T15112m6a implements T15112m6b {}
    }] [saveas T15112m6d.java {
class T15112m6d extends p1.T15112m6c {
    int j = ((p1.T15112m6c) this).i; // a.i not accessible, so this is b.i
}
    }]

} {PASS}
Test Case: 15.11.2-meaning-7
super.field is (almost) ((S)this).field

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-meaning-7 { super.field is (almost) ((S)this).field } {
    
    empty_class T15112m7 {
	class A {
	    private int i;
	}
	class B extends A {
	    Object i;
	    int j = super.i;
	    int k = ((A) this).i;
	}
    }

} {PASS}
Test Case: 15.11.2-meaning-8
T.super.field is (almost) ((S)T.this).field

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-meaning-8 { T.super.field is (almost)
        ((S)T.this).field } {
    
    empty_class T15112m8 {
	class A {
	    int i;
	}
	class B extends A {
	    Object i;
	    int j = B.super.i;
	    int k = ((A) B.this).i;
	}
    }

} {PASS}
Test Case: 15.11.2-meaning-9
T.super.field is (almost) ((S)T.this).field

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-meaning-9 { T.super.field is (almost)
        ((S)T.this).field } {
    
    compile [saveas p1/T15112m9a.java {
package p1;
public class T15112m9a {
    protected int i;
}
    }] [saveas T15112m9b.java {
class T15112m9b extends p1.T15112m9a {
    Object i;
    int j = T15112m9b.super.i;
}
    }]

} {PASS}
Test Case: 15.11.2-meaning-10
T.super.field is (almost) ((S)T.this).field

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-meaning-10 { T.super.field is (almost)
        ((S)T.this).field } {
    
    compile [saveas p1/T15112m10a.java {
package p1;
public class T15112m10a {
    protected int i;
}
    }] [saveas T15112m10b.java {
class T15112m10b extends p1.T15112m10a {
    Object i;
    // oops, wrong qualifier for instance field access
    int j = ((p1.T15112m10a) T15112m10b.this).i;
}
    }]

} {FAIL}
Test Case: 15.11.2-meaning-11
T.super.field is (almost) ((S)T.this).field

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-meaning-11 { T.super.field is (almost)
        ((S)T.this).field } {
    
    compile [saveas p1/T15112m11a.java {
package p1;
public class T15112m11a {
    protected static int i;
}
    }] [saveas T15112m11b.java {
class T15112m11b extends p1.T15112m11a {
    Object i;
    int j = T15112m11b.super.i;
    int k = ((p1.T15112m11a) T15112m11b.this).i;
}
    }]

} {PASS}
Test Case: 15.11.2-meaning-12
T.super.field is (almost) ((S)T.this).field

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-meaning-12 { T.super.field is (almost)
        ((S)T.this).field } {
    
    compile [saveas p1/T15112m12c.java {
package p1;
class T15112m12a {
    protected int i;
}
interface T15112m12b {
    int i = 1;
}
public class T15112m12c extends T15112m12a implements T15112m12b {}
    }] [saveas T15112m12d.java {
class T15112m12d extends p1.T15112m12c {
    int j = T15112m12d.super.i; // ambiguous between a.i and b.i
}
    }]

} {FAIL}
Test Case: 15.11.2-meaning-13
T.super.field is (almost) ((S)T.this).field

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-meaning-13 { T.super.field is (almost)
        ((S)T.this).field } {
    
    compile [saveas p1/T15112m13c.java {
package p1;
class T15112m13a {
    protected int i;
}
interface T15112m13b {
    int i = 1;
}
public class T15112m13c extends T15112m13a implements T15112m13b {}
    }] [saveas T15112m13d.java {
class T15112m13d extends p1.T15112m13c {
    // a.i not accessible, so this is b.i
    int j = ((p1.T15112m13c) T15112m13d.this).i;
}
    }]

} {PASS}
Test Case: 15.11.2-meaning-14
T.super.field is (almost) ((S)T.this).field

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-meaning-14 { T.super.field is (almost)
        ((S)T.this).field } {
    
    empty_class T15112m14 {
	class A {
	    private int i;
	}
	class B extends A {
	    Object i;
	    int j = B.super.i;
	    int k = ((A) B.this).i;
	}
    }

} {PASS}
Test Case: 15.11.2-meaning-15
T.super.field is (almost) ((S)T.this).field

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-meaning-15 { T.super.field is (almost)
        ((S)T.this).field } {
    
    empty_class T15112m15 {
	static class A {
	    static int i;
	}
	static class B extends A {
	    static class Inner {
		int i = B.super.i;
	    }
	}
    }

} {FAIL}
Test Case: 15.11.2-meaning-16
T.super.field is (almost) ((S)T.this).field

Expected Result: FAIL

Regression Test:

tcltest::test 15.11.2-meaning-16 { T.super.field is (almost)
        ((S)T.this).field } {
    
    empty_class T15112m16 {
	static class A {
	    static int i;
	}
	static class B extends A {
	    static class Inner {
		int i = ((A) B.this).i;
	    }
	}
    }

} {FAIL}
Test Case: 15.11.2-meaning-17
T.super.field is (almost) ((S)T.this).field

Expected Result: PASS

Regression Test:

tcltest::test 15.11.2-meaning-17 { T.super.field is (almost)
        ((S)T.this).field } {
    
    empty_class T15112m17 {
	class A {
	    int i;
	}
	class S {
	    Object i;
	}
	class B extends A {
	    Object i;
	    class Inner extends S {
		Object i;
		int j = B.super.i;
		int k = ((A) B.this).i;
	    }
	}
    }

} {PASS}

15.12.1

Directory : tests/jls/expressions/method-invocation-expressions/determine-class-or-interface


Test Case: 15.12.1-syntax-1
The type in the qualified super is not obscured

Expected Result: PASS

Regression Test:

tcltest::test 15.12.1-syntax-1 { The type in the qualified super is not
        obscured } {
    
    empty_class T15121s1 {
        int T15121s1; // obscure the class name from normal expressions
        String s = T15121s1.super.toString();
    }

} {PASS}
Test Case: 15.12.1-syntax-2
The type in qualified super may not be a primitive type

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-syntax-2 { The type in qualified super may not be a
        primitive type } {
    
    empty_class T15121s2 {
        Object o = int.super.toString();
    }

} {FAIL}
Test Case: 15.12.1-syntax-3
The type in qualified super may not be an array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-syntax-3 { The type in qualified super may not be an
        array type } {
    
    empty_class T15121s3 {
        Object o = int[].super.toString();
    }

} {FAIL}
Test Case: 15.12.1-syntax-4
The type in qualified super may not be an array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-syntax-4 { The type in qualified super may not be an
        array type } {
    
    empty_class T15121s4 {
        Object o = T15121s4[].super.toString();
    }

} {FAIL}
Test Case: 15.12.1-syntax-5
The type in qualified super may not be null

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-syntax-5 { The type in qualified super may not be
        null } {
    
    empty_class T15121s5 {
        Object o = null.super.toString();
    }

} {FAIL}
Test Case: 15.12.1-syntax-6
The type in qualified super may not be void

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-syntax-6 { The type in qualified super may not be
        void } {
    
    empty_class T15121s6 {
        Object o = void.super.toString();
    }

} {FAIL}
Test Case: 15.12.1-syntax-7
The type in qualified super may not be a literal

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-syntax-7 { The type in qualified super may not be a
        literal } {
    
    compile [saveas T15121s7a.java {
class T15121s7a {
    int i;
}
class T15121s7b extends T15121s7a {
    Object o = 1 .super.toString();
}
    }]

} {FAIL}
Test Case: 15.12.1-syntax-8
The type in qualified super may not be a literal

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-syntax-8 { The type in qualified super may not be a
        literal } {
    
    compile [saveas T15121s8a.java {
class T15121s8a {
    int i;
}
class T15121s8b extends T15121s8a {
    Object o = "1".super.toString();
}
    }]

} {FAIL}
Test Case: 15.12.1-syntax-9
The type in qualified super must enclose the current type

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-syntax-9 { The type in qualified super must enclose the
        current type } {
    
    empty_class T15121s9 {
	static class A {
	    static int i() { return 1; }
	}
	class B extends A {}
	int j = B.super.i();
    }

} {FAIL}
Test Case: 15.12.1-syntax-10
The type in qualified super must enclose the current type

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-syntax-10 { The type in qualified super must enclose the
        current type } {
    
    empty_class T15121s10 {
	interface A {
	    int i();
	}
	interface B extends A {
	    class C {
		int j = B.super.i(); // B encloses C, but is not a class
	    }
	}
    }

} {FAIL}
Test Case: 15.12.1-type-1
The type to search for plain MethodName is the innermost enclosing type which contains a method by that name

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-type-1 { The type to search for plain MethodName is the
        innermost enclosing type which contains a method by that name } {
    
    empty_class T15121t1 {
	void m() {}
	class A {
	    void m(int i) {}
	    { m(); } // A is searched, not T15121t1; and A.m() does not exist
	}
    }

} {FAIL}
Test Case: 15.12.1-type-2
The type to search for plain MethodName is the innermost enclosing type which contains a method by that name

Expected Result: PASS

Regression Test:

tcltest::test 15.12.1-type-2 { The type to search for plain MethodName is the
        innermost enclosing type which contains a method by that name } {
    
    empty_class T15121t2 {
	void m() {}
	class A {
	    void m(int i) {}
	    { m(1); } // A is searched, not T15121t1; and A.m(int) exists
	}
    }

} {PASS}
Test Case: 15.12.1-type-3
The type to search for TypeName.MethodName is TypeName, which must be a class

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-type-3 { The type to search for TypeName.MethodName is
        TypeName, which must be a class } {
    
    empty_class T15121t3 {
	static class A extends T15121t3 {
	    static void m() {}
	    { T15121t3.m(); }
	}
    }

} {FAIL}
Test Case: 15.12.1-type-4
The type to search for TypeName.MethodName is TypeName, which must be a class

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-type-4 { The type to search for TypeName.MethodName is
        TypeName, which must be a class } {
    
    empty_class T15121t4 {
	interface A {
	    void m();
	}
	{ A.m(); }
    }

} {FAIL}
Test Case: 15.12.1-type-5
The type to search for FieldName.MethodName is the compile-time type of FieldName

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-type-5 { The type to search for FieldName.MethodName is
        the compile-time type of FieldName } {
    
    empty_class T15121t5 {
	class A {
	    void m() {}
	}
	class B extends A {
	    void m(int i) {}
	}
	{
	    A a = new B();
	    a.m(1); // search for A.m(int) fails, even though a has runtime
                    // type B, and B.m(int) exists
	}
    }

} {FAIL}
Test Case: 15.12.1-type-6
The type to search for primary.MethodName is the compile-time type of primary

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-type-6 { The type to search for primary.MethodName is
        the compile-time type of primary } {
    
    empty_class T15121t6 {
	class A {
	    void m() {}
	}
	class B extends A {
	    void m(int i) {}
	}
	{
	    ((A)new B()).m(1); // search for A.m(int) fails, even though
                     // ((A)new B()) has runtime type B, and B.m(int) exists
	}
    }

} {FAIL}
Test Case: 15.12.1-type-7
The type to search for super.MethodName is the superclass, which must exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-type-7 { The type to search for super.MethodName is
        the superclass, which must exist } {
    
    empty_class T15121t7 {
	interface A {
	    int m();
	}
	interface B extends A {
	    int i = super.m(); // A is not a superclass, but a superinterface
	}
    }

} {FAIL}
Test Case: 15.12.1-type-8
The type to search for super.MethodName is the superclass, which must exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-type-8 { The type to search for super.MethodName is
        the superclass, which must exist } {
    
    empty_class T15121t8 {
	interface A {
	    String s = super.toString(); // interfaces do not extend Object
	}
    }

} {FAIL}
Test Case: 15.12.1-type-9
The type to search for super.MethodName is the superclass, which must exist

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-type-9 { The type to search for super.MethodName is
        the superclass, which must exist } {
    
    empty_class T15121t9 {
	class A {
	    void m() {}
	}
	class B extends A {
	    void m(int i) {}
	    { super.m(1); } // A.m(int) does not exist
	}
    }

} {FAIL}
Test Case: 15.12.1-type-10
The type to search for super.MethodName is the superclass, which must exist

Expected Result: PASS

Regression Test:

tcltest::test 15.12.1-type-10 { The type to search for super.MethodName is
        the superclass, which must exist } {
    
    empty_class T15121t10 {
	class A {
	    void m() {}
	}
	class B extends A {
	    { super.m(); }
	}
    }

} {PASS}
Test Case: 15.12.1-type-11
The type to search for ClassName.super.MethodName is the superclass of ClassName

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-type-11 { The type to search for
        ClassName.super.MethodName is the superclass of ClassName } {
    
    empty_class T15121t11 {
	interface A {
	    int m();
	}
	interface B extends A {
	    int i = B.super.m(); // A is not a superclass, but a superinterface
	}
    }

} {FAIL}
Test Case: 15.12.1-type-12
The type to search for ClassName.super.MethodName is the superclass of ClassName

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-type-12 { The type to search for
        ClassName.super.MethodName is the superclass of ClassName } {
    
    empty_class T15121t12 {
	interface A {
	    String s = A.super.toString(); // interfaces do not extend Object
	}
    }

} {FAIL}
Test Case: 15.12.1-type-13
The type to search for ClassName.super.MethodName is the superclass of ClassName

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.1-type-13 { The type to search for
        ClassName.super.MethodName is the superclass of ClassName } {
    
    empty_class T15121t13 {
	class A {
	    void m() {}
	}
	class B extends A {
	    void m(int i) {}
	    { B.super.m(1); } // A.m(int) does not exist
	}
    }

} {FAIL}
Test Case: 15.12.1-type-14
The type to search for ClassName.super.MethodName is the superclass of ClassName

Expected Result: PASS

Regression Test:

tcltest::test 15.12.1-type-14 { The type to search for
        ClassName.super.MethodName is the superclass of ClassName } {
    
    empty_class T15121t14 {
	class A {
	    void m() {}
	}
	class B extends A {
	    { B.super.m(); }
	}
    }

} {PASS}

15.12.2.1

Directory : tests/jls/expressions/method-invocation-expressions/determine-method-signature/applicable-and-accessible


Test Case: 15.12.2.1-jls-example-1
example code, should fail since two(int) is private

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.1-jls-example-1 { example code,
        should fail since two(int) is private } {
    
    compile [saveas T151221je1.java {
class Doubler {
    static int two() { return two(1); }
    private static int two(int i) { return 2*i; }
}
class Test extends Doubler {    
    public static long two(long j) {return j+j; }
    public static void main(String[] args) {
        System.out.println(two(3));
        System.out.println(Doubler.two(3)); // compile-time error
    }
}
    }]

} {FAIL}
Test Case: 15.12.2.1-jls-example-2
example code, The type of the literal 37 is int, and int cannot be converted to byte by method invocation conversion

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.1-jls-example-2 { example code,
         The type of the literal 37 is int, and int
         cannot be converted to byte by method invocation
         conversion } {
    
    compile [saveas T151221je2.java {
class ColoredPoint {
    int x, y;
    byte color;
    void setColor(byte color) { this.color = color; }
}
class Test {
    public static void main(String[] args) {
        ColoredPoint cp = new ColoredPoint();
        byte color = 37;
        cp.setColor(color);
        cp.setColor(37);  // compile-time error
    }
}
    }]

} {FAIL}
Test Case: 15.12.2.1-accessibility-constructor-1
A constructor must be applicable and accessible, in this case the constructor is private so it is not accessible even though it is applicable

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.1-accessibility-constructor-1 {
        A constructor must be applicable and accessible,
        in this case the constructor is private so it
        is not accessible even though it is applicable } {
    
    compile [saveas T151221ac1.java {
class T151221ac1 {
    public T151221ac1(String s) {}
    private T151221ac1(Integer i) {}
}
class T151221ac1_Test {
    Object o = new T151221ac1(null);
}
    }]

} {PASS}
Test Case: 15.12.2.1-accessibility-constructor-2
A private constructor is not accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.1-accessibility-constructor-2 {
        A private constructor is not accessible } {
    
    compile [saveas T151221ac2.java {
class T151221ac2 {
    public T151221ac2(String x, String y) {}
    private T151221ac2(String x, char[] y) {}
}
class T151221ac2_Test {
    Object o = new T151221ac2("hi", null);
}
    }]

} {PASS}
Test Case: 15.12.2.1-accessibility-method-1
A method must be applicable and accessible, in this case the method is private so it is not accessible even though it is applicable

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.1-accessibility-method-1 {
        A method must be applicable and accessible,
        in this case the method is private so it
        is not accessible even though it is applicable } {
    
    compile [saveas T151221am1.java {
class T151221am1 {
    public int foo(String s) { return 0; }
    private int foo(Integer i) { return 0; }
}
class T151221am1_Test {
    int i = new T151221am1().foo(null);
}
    }]

} {PASS}
Test Case: 15.12.2.1-accessibility-method-2
A method must be applicable and accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.1-accessibility-method-2 { A method must be applicable
        and accessible } {
    
    compile [saveas p1/T151221am2c.java {
package p1;
abstract class T151221am2a {
    abstract void m(); // note non-public accessibility
}
interface T151221am2b {
    void m() throws Exception;
}
public abstract class T151221am2c extends T151221am2a implements T151221am2b {
    // inherits 2 versions of m()
}
    }] [saveas T151221am2d.java {
abstract class T151221am2d extends p1.T151221am2c {
    // a concrete subclass of c will necessarily have an implementation of m
    // that does not throw, in order to implement a.m; but only b.m was
    // inherited here because of accessibility. Since b.m throws, this call
    // is illegal
    { m(); }
}
    }]

} {FAIL}
Test Case: 15.12.2.1-accessibility-method-3
A method must be applicable and accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.1-accessibility-method-3 { A method must be applicable
        and accessible } {
    
    compile [saveas p1/T151221am3c.java {
package p1;
abstract class T151221am3a {
    abstract void m(); // note non-public accessibility
}
interface T151221am3b {
    void m() throws Exception;
}
public abstract class T151221am3c extends T151221am3a implements T151221am3b {
    // inherits 2 versions of m()
}
    }] [saveas T151221am3d.java {
abstract class T151221am3d extends p1.T151221am3c {
    // a concrete subclass of c will necessarily have an implementation of m
    // that does not throw, in order to implement a.m; but only b.m was
    // inherited here because of accessibility. Since b.m throws, the catch
    // clause is reachable
    {
	try {
	    m();
	} catch (Exception e) {
	}
    }
}
    }]

} {PASS}
Test Case: 15.12.2.1-accessibility-method-4
A method must be applicable and accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.1-accessibility-method-4 { A method must be applicable
        and accessible } {
    
    compile [saveas p1/T151221am4c.java {
package p1;
abstract class T151221am4a {
    abstract void m(); // note non-public accessibility
}
interface T151221am4b {
    void m() throws Exception;
}
public abstract class T151221am4c extends T151221am4a implements T151221am4b {
    // inherits 2 versions of m()
}
    }] [saveas T151221am4d.java {
class T151221am4d {
    // a concrete subclass of c will necessarily have an implementation of m
    // that does not throw, in order to implement a.m; but since only b.m is
    // accessible here, and it throws, this call is illegal
    void m(p1.T151221am4c t) {
	t.m();
    }
}
    }]

} {FAIL}
Test Case: 15.12.2.1-accessibility-method-5
A method must be applicable and accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.1-accessibility-method-5 { A method must be applicable
        and accessible } {
    
    compile [saveas p1/T151221am5c.java {
package p1;
abstract class T151221am5a {
    abstract void m(); // note non-public accessibility
}
interface T151221am5b {
    void m() throws Exception;
}
public abstract class T151221am5c extends T151221am5a implements T151221am5b {
    // inherits 2 versions of m()
}
    }] [saveas T151221am5d.java {
class T151221am5d {
    // a concrete subclass of c will necessarily have an implementation of m
    // that does not throw, in order to implement a.m; but since only b.m is
    // accessible here, the catch clause is reachable
    void m(p1.T151221am5c t) {
	try {
	    t.m();
	} catch (Exception e) {
	}
    }
}
    }]

} {PASS}
Test Case: 15.12.2.1-accessibility-method-6
A method must be applicable and accessible

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.1-accessibility-method-6 { A method must be applicable
        and accessible } {
    
    compile [saveas p1/T151221am6a.java {
package p1;
public class T151221am6a {
    public static class E1 extends Exception {}
    public static class E2 extends Exception {}
    public static abstract class A {
	protected abstract void m() throws E1; // note non-public accessibility
    }
}
    }] [saveas T151221am6b.java {
class T151221am6b extends p1.T151221am6a {
    interface B {
	void m() throws E2;
    }
    static abstract class C extends A implements B {
	// c inherits two versions of m
    }
    static abstract class D extends C {
	// likewise, d inherits two versions of m, but protected accessibility
	// rules state that access to a.m is only possible when the qualifier
	// is d or below. When both methods are accessible, the method cannot
	// throw either exception; but alone, b.m may throw.
	{
	    m(); // merged throws clause
	    try {
		((C) this).m(); // only b.m accessible
	    } catch (E2 e) {
	    }
	}
    }
}
    }]

} {PASS}
Test Case: 15.12.2.1-accessibility-method-7
A method must be applicable and accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.1-accessibility-method-7 { A method must be applicable
        and accessible } {
    
    compile [saveas p1/T151221am7a.java {
package p1;
public class T151221am7a {
    public static class E1 extends Exception {}
    public static class E2 extends Exception {}
    public static abstract class A {
	protected abstract void m() throws E1; // note non-public accessibility
    }
}
    }] [saveas T151221am7b.java {
class T151221am7b extends p1.T151221am7a {
    interface B {
	void m() throws E2;
    }
    static abstract class C extends A implements B {
	// c inherits two versions of m
    }
    static abstract class D extends C {
	// likewise, d inherits two versions of m, but protected accessibility
	// rules state that access to a.m is only possible when the qualifier
	// is d or below. When both methods are accessible, the method cannot
	// throw either exception; but alone, b.m may throw.
	{
	    try {
		m(); // merged throws clause
	    } catch (E2 e) {
	    }
	}
    }
}
    }]

} {FAIL}
Test Case: 15.12.2.1-accessibility-method-8
A method must be applicable and accessible

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.1-accessibility-method-8 { A method must be applicable
        and accessible } {
    
    compile [saveas p1/T151221am8a.java {
package p1;
public class T151221am8a {
    public static class E1 extends Exception {}
    public static class E2 extends Exception {}
    public static abstract class A {
	protected abstract void m() throws E1; // note non-public accessibility
    }
}
    }] [saveas T151221am8b.java {
class T151221am8b extends p1.T151221am8a {
    interface B {
	void m() throws E2;
    }
    static abstract class C extends A implements B {
	// c inherits two versions of m
    }
    static abstract class D extends C {
	// likewise, d inherits two versions of m, but protected accessibility
	// rules state that access to a.m is only possible when the qualifier
	// is d or below. When both methods are accessible, the method cannot
	// throw either exception; but alone, b.m may throw.
	{
	    ((C) this).m(); // only b.m accessible
	}
    }
}
    }]

} {FAIL}

15.12.2.2

Directory : tests/jls/expressions/method-invocation-expressions/determine-method-signature/choose-most-specific


Test Case: 15.12.2.2-ambiguous-1
More than one maximally specific method is ambiguous, and illegal. Here, A.foo(String) and T151222a1.foo(Object) are both maximally specific, as the latter does not override the former.

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-1 { More than one maximally specific method
        is ambiguous, and illegal.  Here, A.foo(String) and
        T151222a1.foo(Object) are both maximally specific, as the latter
        does not override the former. } {
    
    compile [saveas T151222a1.java {
interface A {
    void foo(String s);
}
abstract class T151222a1 implements A {
    void foo(Object o) {}
    {
	foo("");
    }
}
    }]

} {FAIL}
Test Case: 15.12.2.2-ambiguous-2
More than one maximally specific method is ambiguous, and illegal. Here, A.foo(String) and B.foo(Object) are both maximally specific, as the latter does not override the former.

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-2 { More than one maximally specific method
        is ambiguous, and illegal.  Here, A.foo(String) and
        B.foo(Object) are both maximally specific, as the latter
        does not override the former. } {
    
    compile [saveas T151222a2.java {
interface A {
    void foo(String s);
}
interface B {
    void foo(Object o);
}
abstract class T151222a2 implements A, B {
    {
	foo("");
    }
}
    }]

} {FAIL}
Test Case: 15.12.2.2-ambiguous-3
More than one maximally specific method is ambiguous, and illegal. Here, A.foo(String) and T151222a3.foo(Object) are both maximally specific, as the latter does not override the former.

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-3 { More than one maximally specific method
        is ambiguous, and illegal.  Here, A.foo(String) and
        T151222a3.foo(Object) are both maximally specific, as the latter
        does not override the former. } {
    
    compile [saveas T151222a3.java {
class A {
    void foo(String s) {}
}
abstract class T151222a3 extends A {
    void foo(Object o) {}
    {
	foo("");
    }
}
    }]

} {FAIL}
Test Case: 15.12.2.2-ambiguous-4
When multiple maximally specific methods have the same signature, any non-abstract version is chosen

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.2-ambiguous-4 { When multiple maximally specific methods
        have the same signature, any non-abstract version is chosen } {
    
    compile [saveas T151222a4a.java {
class T151222a4a {
    public void m() {}
}
interface T151222a4b {
    void m();
}
class T151222a4c extends T151222a4a implements T151222a4b {
    { m(); }
}
    }]

} {PASS}
Test Case: 15.12.2.2-ambiguous-5
When multiple maximally specific methods have the same signature, and all are abstract, it is arbitrary which is chosen, although the throws clauses are merged

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.2-ambiguous-5 { When multiple maximally specific methods
        have the same signature, and all are abstract, it is arbitrary which
        is chosen, although the throws clauses are merged } {
    
    compile [saveas T151222a4a.java {
abstract class T151222a5a {
    public abstract void m();
}
interface T151222a5b {
    void m();
}
abstract class T151222a5c extends T151222a5a implements T151222a5b {
    { m(); }
}
    }]

} {PASS}
Test Case: 15.12.2.2-ambiguous-6
When multiple maximally specific methods have the same signature, and all are abstract, it is arbitrary which is chosen, although the throws clauses are merged

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.2-ambiguous-6 { When multiple maximally specific methods
        have the same signature, and all are abstract, it is arbitrary which
        is chosen, although the throws clauses are merged } {
    
    compile [saveas T151222a6a.java {
class E1 extends Exception {}
class E2 extends Exception {}
class E3 extends Exception {}
abstract class T151222a6a {
    public abstract void m() throws E1, E2;
}
interface T151222a6b {
    void m() throws E2, E3;
}
abstract class T151222a6c extends T151222a6a implements T151222a6b {
    {
        try {
            m(); // whether a.m() or b.m() is chosen, it cannot throw E1 or E3
        } catch (E2 e2) {
        }
    }
}
    }]

} {PASS}
Test Case: 15.12.2.2-ambiguous-7
Example where accessibility makes what would otherwise be ambiguous maximally specific methods with conflicting signatures have a single resolution

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.2-ambiguous-7 { Example where accessibility makes
        what would otherwise be ambiguous maximally specific methods with
        conflicting signatures have a single resolution } {
    
    compile [saveas p1/T151222a7a.java {
package p1;
public class T151222a7a {
    void m(Object o, String s) {}
}
    }] [saveas T151222a7b.java {
interface T151222a7b {
    void m(String s, Object o);
}
abstract class T151222a7c extends p1.T151222a7a implements T151222a7b {
    { m("", ""); } // only b.m(String, Object) is accessible
}
    }]

} {PASS}
Test Case: 15.12.2.2-ambiguous-8
Example where accessibility makes what would otherwise be ambiguous maximally specific methods with conflicting signatures have a single resolution

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.2-ambiguous-8 { Example where accessibility makes
        what would otherwise be ambiguous maximally specific methods with
        conflicting signatures have a single resolution } {
    
    compile [saveas p1/T151222a8a.java {
package p1;
public class T151222a8a {
    protected void m(Object o, String s) {}
}
    }] [saveas T151222a8b.java {
interface T151222a8b {
    void m(String s, Object o);
}
abstract class T151222a8c extends p1.T151222a8a implements T151222a8b {}
abstract class T151222a8d extends T151222a8c {
    // Even though d inherits two versions of m, the protected a.m
    // is only accessible if the qualifying expression is type d or lower
    void foo(T151222a8c c) {
        c.m("", "");
    } // only b.m(String, Object) is accessible
}
    }]

} {PASS}
Test Case: 15.12.2.2-ambiguous-9
Example where accessibility makes what would otherwise be ambiguous maximally specific methods with conflicting signatures have a single resolution

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-9 { Example where accessibility makes
        what would otherwise be ambiguous maximally specific methods with
        conflicting signatures have a single resolution } {
    
    compile [saveas p1/T151222a9a.java {
package p1;
public class T151222a9a {
    protected void m(Object o, String s) {}
}
    }] [saveas T151222a9b.java {
interface T151222a9b {
    void m(String s, Object o);
}
abstract class T151222a9c extends p1.T151222a9a implements T151222a9b {}
abstract class T151222a9d extends T151222a9c {
    // Even though d inherits two versions of m, the protected a.m
    // is only accessible if the qualifying expression is type d or lower
    void foo(T151222a9d d) {
        d.m("", "");
    } // both a.m(Object, String) and b.m(String, Object) are accessible
}
    }]

} {FAIL}
Test Case: 15.12.2.2-ambiguous-10
When multiple maximally specific methods have the same signature, and all are abstract, it is arbitrary which is chosen, although the throws clauses are merged

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-10 { When multiple maximally specific methods
        have the same signature, and all are abstract, it is arbitrary which
        is chosen, although the throws clauses are merged } {
    
    compile [saveas T151222a10a.java {
class E1 extends Exception {}
class E2 extends Exception {}
class E3 extends Exception {}
abstract class T151222a10a {
    public abstract void m() throws E1, E2;
}
interface T151222a10b {
    void m() throws E2, E3;
}
abstract class T151222a10c extends T151222a10a implements T151222a10b {
    {
        try {
            m(); // whether a.m() or b.m() is chosen, it cannot throw E1 or E3
	} catch (E1 e1) {
        } catch (E2 e2) {
        }
    }
}
    }]

} {FAIL}
Test Case: 15.12.2.2-ambiguous-11
When multiple maximally specific methods have the same signature, and all are abstract, it is arbitrary which is chosen, although the throws clauses are merged

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-11 { When multiple maximally specific methods
        have the same signature, and all are abstract, it is arbitrary which
        is chosen, although the throws clauses are merged } {
    
    compile [saveas T151222a11a.java {
class E1 extends Exception {}
class E2 extends Exception {}
class E3 extends Exception {}
abstract class T151222a11a {
    public abstract void m() throws E1, E2;
}
interface T151222a11b {
    void m() throws E2, E3;
}
abstract class T151222a11c extends T151222a11a implements T151222a11b {
    {
        try {
            m(); // whether a.m() or b.m() is chosen, it cannot throw E1 or E3
        } catch (E2 e2) {
        } catch (E3 e3) {
        }
    }
}
    }]

} {FAIL}
Test Case: 15.12.2.2-ambiguous-12
When multiple maximally specific methods have the same signature, and all are abstract, it is arbitrary which is chosen, although the throws clauses are merged

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.2-ambiguous-12 { When multiple maximally specific methods
        have the same signature, and all are abstract, it is arbitrary which
        is chosen, although the throws clauses are merged } {
    
    compile [saveas T151222a12a.java {
class E1 extends Exception {}
class E2 extends E1 {}
class E3 extends Exception {}
class E4 extends E3 {}
abstract class T151222a12a {
    public abstract void m() throws E1, E4;
}
interface T151222a12b {
    void m() throws E2, E3;
}
abstract class T151222a12c extends T151222a12a implements T151222a12b {
    {
        try {
            m();
	    // whether a.m() or b.m() is chosen, it cannot throw E1 or E3
	    // directly; but can throw something assignable to E1 or E3
        } catch (E2 e2) {
        } catch (E4 e4) {
        }
    }
}
    }]

} {PASS}
Test Case: 15.12.2.2-ambiguous-13
When multiple maximally specific methods have the same signature, and all are abstract, it is arbitrary which is chosen, although the throws clauses are merged

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.2-ambiguous-13 { When multiple maximally specific methods
        have the same signature, and all are abstract, it is arbitrary which
        is chosen, although the throws clauses are merged } {
    
    compile [saveas T151222a13a.java {
class E1 extends Exception {}
class E2 extends E1 {}
class E3 extends Exception {}
class E4 extends E3 {}
abstract class T151222a13a {
    public abstract void m() throws E1, E4;
}
interface T151222a13b {
    void m() throws E2, E3;
}
abstract class T151222a13c extends T151222a13a implements T151222a13b {
    {
        try {
            m();
	    // whether a.m() or b.m() is chosen, it cannot throw E1 or E3
	    // directly; but can throw something assignable to E1 or E3
        } catch (E1 e1) {
        } catch (E3 e3) {
        }
    }
}
    }]

} {PASS}
Test Case: 15.12.2.2-ambiguous-14
When multiple maximally specific methods have the same signature, and all are abstract, it is arbitrary which is chosen, although the throws clauses are merged

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.2-ambiguous-14 { When multiple maximally specific methods
        have the same signature, and all are abstract, it is arbitrary which
        is chosen, although the throws clauses are merged } {
    
    empty_class T151222a14 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	abstract class C1 {
	    abstract void m() throws E1; // note non-public accessibility
	}
	interface I {
	    void m() throws E2;
	}
	abstract class C2 extends C1 implements I {
	    { m(); }
	}
    }

} {PASS}
Test Case: 15.12.2.2-ambiguous-15
When multiple maximally specific methods have the same signature, and all are abstract, it is arbitrary which is chosen, although the throws clauses are merged

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-15 { When multiple maximally specific methods
        have the same signature, and all are abstract, it is arbitrary which
        is chosen, although the throws clauses are merged } {
    
    empty_class T151222a15 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	abstract class C1 {
	    abstract void m() throws E1; // note non-public accessibility
	}
	interface I {
	    void m() throws E2;
	}
	abstract class C2 extends C1 implements I {
	    {
		try {
		    m();
		} catch (E1) {
		}
	    }
	}
    }

} {FAIL}
Test Case: 15.12.2.2-ambiguous-16
When multiple maximally specific methods have the same signature, and all are abstract, it is arbitrary which is chosen, although the throws clauses are merged

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-16 { When multiple maximally specific methods
        have the same signature, and all are abstract, it is arbitrary which
        is chosen, although the throws clauses are merged } {
    
    empty_class T151222a16 {
	class E1 extends Exception {}
	class E2 extends Exception {}
	abstract class C1 {
	    abstract void m() throws E1; // note non-public accessibility
	}
	interface I {
	    void m() throws E2;
	}
	abstract class C2 extends C1 implements I {
	    {
		try {
		    m();
		} catch (E2 e) {
		}
	    }
	}
    }

} {FAIL}
Test Case: 15.12.2.2-ambiguous-17
More than one maximally specific method is ambiguous, and illegal. Here, T151222a17a.foo(int) and T151222a17b.foo(long) are both maximally specific, as the latter does not hide the former.

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-17 { More than one maximally specific method
        is ambiguous, and illegal.  Here, T151222a17a.foo(int) and
        T151222a17b.foo(long) are both maximally specific, as the latter
        does not hide the former. } {
    
    compile [saveas T151222a17a.java {
class T151222a17a {
    static void foo(int i) {}
}
class T151222a17b extends T151222a17a {
    static void foo(long l) {}
    { foo(0); }
}
    }]

} {FAIL}
Test Case: 15.12.2.2-ambiguous-18
Example where accessibility makes what would otherwise be ambiguous maximally specific methods with conflicting signatures have a single resolution

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-18 { Example where accessibility makes
        what would otherwise be ambiguous maximally specific methods with
        conflicting signatures have a single resolution } {
    
    compile [saveas p1/T151222a18a.java {
package p1;
public class T151222a18a {
    protected void m(Object o, String s) {}
}
    }] [saveas T151222a18b.java {
interface T151222a18b {
    void m(String s, Object o);
}
abstract class T151222a18c extends p1.T151222a18a implements T151222a18b {}
abstract class T151222a18d extends T151222a18c {
    // Even though d inherits two versions of m, the protected a.m
    // is only accessible if the qualifying expression is type d or lower
    void foo() {
        super.m("", "");
    } // both a.m(Object, String) and b.m(String, Object) are accessible
}
    }]

} {FAIL}
Test Case: 15.12.2.2-ambiguous-19
Example where accessibility makes what would otherwise be ambiguous maximally specific methods with conflicting signatures have a single resolution

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-19 { Example where accessibility makes
        what would otherwise be ambiguous maximally specific methods with
        conflicting signatures have a single resolution } {
    
    compile [saveas p1/T151222a19a.java {
package p1;
public class T151222a19a {
    protected void m(Object o, String s) {}
    public void m(String s, Object o) {}
}
    }] [saveas T151222a19b.java {
class T151222a19b extends p1.T151222a19a {
    // Even though b inherits two versions of m, the protected a.m
    // is only accessible if the qualifying expression is type b or lower
    void foo() {
        super.m("", "");
    } // both a.m(Object, String) and a.m(String, Object) are accessible
}
    }]

} {FAIL}
Test Case: 15.12.2.2-ambiguous-20
Example where accessibility makes what would otherwise be ambiguous maximally specific methods with conflicting signatures have a single resolution

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-20 { Example where accessibility makes
        what would otherwise be ambiguous maximally specific methods with
        conflicting signatures have a single resolution } {
    
    compile [saveas p1/T151222a20a.java {
package p1;
public class T151222a20a {
    protected void m(Object o, String s) {}
    public void m(String s, Object o) {}
}
    }] [saveas T151222a20b.java {
class T151222a20b extends p1.T151222a20a {
    // Even though b inherits two versions of m, the protected a.m
    // is only accessible if the qualifying expression is type b or lower
    void foo(T151222a20b t) {
        t.m("", "");
    } // both a.m(Object, String) and a.m(String, Object) are accessible
}
    }]

} {FAIL}
Test Case: 15.12.2.2-ambiguous-21
Example where accessibility makes what would otherwise be ambiguous maximally specific methods with conflicting signatures have a single resolution

Expected Result: PASS

Regression Test:

tcltest::test 15.12.2.2-ambiguous-21 { Example where accessibility makes
        what would otherwise be ambiguous maximally specific methods with
        conflicting signatures have a single resolution } {
    
    compile [saveas p1/T151222a21a.java {
package p1;
public class T151222a21a {
    protected void m(Object o, String s) {}
    public void m(String s, Object o) {}
}
    }] [saveas T151222a21b.java {
class T151222a21b extends p1.T151222a21a {
    // Even though b inherits two versions of m, the protected a.m
    // is only accessible if the qualifying expression is type b or lower
    void foo(p1.T151222a21a t) {
        t.m("", "");
    } // only a.m(String, Object) is accessible
}
    }]

} {PASS}
Test Case: 15.12.2.2-ambiguous-22
Example where accessibility makes what would otherwise be ambiguous maximally specific methods with conflicting signatures have a single resolution

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-22 { Example where accessibility makes
        what would otherwise be ambiguous maximally specific methods with
        conflicting signatures have a single resolution } {
    
    compile [saveas p1/T151222a22a.java {
package p1;
public class T151222a22a {
    protected static void m(Object o, String s) {}
    public void m(String s, Object o) {}
}
    }] [saveas T151222a22b.java {
class T151222a22b extends p1.T151222a22a {
    // The protected a.m is accessible since it is static
    void foo(p1.T151222a22a t) {
        t.m("", "");
    } // both a.m(Object, String) and a.m(String, Object) are accessible
}
    }]

} {FAIL}
Test Case: 15.12.2.2-ambiguous-23
The most specific method is chosen, regardless of return type or static considerations

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-23 { The most specific method is chosen,
        regardless of return type or static considerations } {
    
    empty_class T151222a23 {
	int m(long i) { return 0; }
	long m(int i) { return 0; }
	// long m(int) is chosen and fails, even though int m(long) would work
	int i = m(0);
    }

} {FAIL}
Test Case: 15.12.2.2-ambiguous-24
The most specific method is chosen, regardless of return type or static considerations

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.2.2-ambiguous-24 { The most specific method is chosen,
        regardless of return type or static considerations } {
    
    empty_class T151222a24 {
	static int m(long i) { return 0; }
	int m(int i) { return 0; }
	// int m(int) is chosen and fails, even though int m(long) would work
	static int i = m(0);
    }

} {FAIL}

15.12.3

Directory : tests/jls/expressions/method-invocation-expressions/chosen-method-appropriate


Test Case: 15.12.3-explicit-constructor-1
Cannot access instance methods from this class within an explicit constructor

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-explicit-constructor-1 { Cannot access instance methods
        from this class within an explicit constructor } {
    
    empty_class T15123ec1 {
	int m() { return 1; }
	T15123ec1(int i) {}
	T15123ec1() {
	    this(m());
	}
    }

} {FAIL}
Test Case: 15.12.3-explicit-constructor-2
Cannot access instance methods from this class within an explicit constructor

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-explicit-constructor-2 { Cannot access instance methods
        from this class within an explicit constructor } {
    
    empty_class T15123ec2 {
	int m() { return 1; }
	T15123ec2(int i) {}
	class Sub extends T15123ec2 {
	    Sub() {
		super(m()); // m is inherited
	    }
	}
    }

} {FAIL}
Test Case: 15.12.3-explicit-constructor-3
Cannot access instance methods from this class within an explicit constructor

Expected Result: PASS

Regression Test:

tcltest::test 15.12.3-explicit-constructor-3 { Cannot access instance methods
        from this class within an explicit constructor } {
    
    empty_class T15123ec3 {
	int m() { return 1; }
	class Inner {
	    Inner(int i) {}
	    Inner() {
		this(m()); // m is not inherited, and this$0.m is available
	    }
	}
    }

} {PASS}
Test Case: 15.12.3-explicit-constructor-4
Cannot access instance methods from this class within an explicit constructor

Expected Result: PASS

Regression Test:

tcltest::test 15.12.3-explicit-constructor-4 { Cannot access instance methods
        from this class within an explicit constructor } {
    
    empty_class T15123ec4 {
	int m() { return 1; }
	T15123ec4(int i) {}
	class Sub extends T15123ec4 {
	    Sub() {
		// calling the enclosing m, not the inherited m, is legal
		super(T15123ec4.this.m());
	    }
	}
    }

} {PASS}
Test Case: 15.12.3-explicit-constructor-5
Cannot access instance methods from this class within an explicit constructor

Expected Result: PASS

Regression Test:

tcltest::test 15.12.3-explicit-constructor-5 { Cannot access instance methods
        from this class within an explicit constructor } {
    
    empty_class T15123ec5 {
	int m() { return 1; }
	class Inner {
	    Inner(int i) {}
	    Inner() {
		// explicit mention of the only version of m
		this(T15123ec5.this.m());
	    }
	}
    }

} {PASS}
Test Case: 15.12.3-explicit-constructor-6
Cannot access instance methods from this class within an explicit constructor

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-explicit-constructor-6 { Cannot access instance methods
        from this class within an explicit constructor } {
    
    empty_class T15123ec6 {
	int m() { return 1; }
	T15123ec6(int i) {}
	class Sub extends T15123ec6 {
	    Sub() {
		// calling superclass version of inherited m is wrong
		super(super.m());
	    }
	}
    }

} {FAIL}
Test Case: 15.12.3-explicit-constructor-7
Cannot access instance methods from this class within an explicit constructor

Expected Result: PASS

Regression Test:

tcltest::test 15.12.3-explicit-constructor-7 { Cannot access instance methods
        from this class within an explicit constructor } {
    
    empty_class T15123ec7 {
	class One {
	    int m() { return 1; }
	}
	class Two extends One {
	    class Inner {
		Inner(int i) {}
		Inner() {
		    // calling super method of enclosing class is legal
		    this(Two.super.m());
		}
	    }
	}
    }

} {PASS}
Test Case: 15.12.3-explicit-constructor-8
Cannot access instance methods from this class within an explicit constructor

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-explicit-constructor-8 { Cannot access instance methods
        from this class within an explicit constructor } {
    
    empty_class T15123ec8 {
	abstract class One {
	    abstract int m();
	}
	class Two extends One {
	    int m() { return 1; }
	    class Inner {
		Inner(int i) {}
		Inner() {
		    // super method of enclosing class can't be abstract
		    this(Two.super.m());
		}
	    }
	}
    }

} {FAIL}
Test Case: 15.12.3-explicit-constructor-9
Cannot access instance methods from this class within an explicit constructor

Expected Result: PASS

Regression Test:

tcltest::test 15.12.3-explicit-constructor-9 { Cannot access instance methods
        from this class within an explicit constructor } {
    
    empty_class T15123ec9 {
	private int m() { return 1; }
	T15123ec9(int i) {}
	class Sub extends T15123ec9 {
	    Sub() {
		super(m()); // m is not inherited, so it is the enclosing m
	    }
	}
    }

} {PASS}
Test Case: 15.12.3-explicit-constructor-10
Cannot access instance methods from this class within an explicit constructor

Expected Result: PASS

Regression Test:

tcltest::test 15.12.3-explicit-constructor-10 { Cannot access instance methods
        from this class within an explicit constructor } {
    
    compile [saveas p1/T15123ec10a.java {
package p1;
public class T15123ec10a {
    int m() { return 1; }
    class C extends p2.T15123ec10b {
	C(int j) {}
	C() {
	    // c does not inherit m(), so use the enclosing version
	    this(m());
	}
    }
}
    }] [saveas p2/T15123ec10b.java {
package p2;
public class T15123ec10b extends p1.T15123ec10a {}
    }]

} {PASS}
Test Case: 15.12.3-abstract-1
super.abstractmethod() is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-abstract-1 { super.abstractmethod() is invalid } {
    
    empty_class T15123a1 {
	abstract class A {
	    abstract void m();
	}
	abstract class C extends A {
	    { super.m(); }
	}
    }

} {FAIL}
Test Case: 15.12.3-abstract-2
super.abstractmethod() is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-abstract-2 { super.abstractmethod() is invalid } {
    
    empty_class T15123a2 {
	abstract class A {
	    abstract void m();
	}
	abstract class B extends A {}
	abstract class C extends B {
	    { super.m(); }
	}
    }

} {FAIL}
Test Case: 15.12.3-abstract-3
super.abstractmethod() is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-abstract-3 { super.abstractmethod() is invalid } {
    
    empty_class T15123a3 {
	interface A {
	    void m();
	}
	abstract class B implements A {}
	abstract class C extends B {
	    { super.m(); }
	}
    }

} {FAIL}
Test Case: 15.12.3-abstract-4
super.abstractmethod() is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-abstract-4 { super.abstractmethod() is invalid } {
    
    empty_class T15123a4 {
	abstract class A {
	    public abstract void m();
	}
	interface I {
	    void m();
	}
	abstract class B implements A implements I {}
	abstract class C extends B {
	    { super.m(); }
	}
    }

} {FAIL}
Test Case: 15.12.3-abstract-5
super.abstractmethod() is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-abstract-5 { super.abstractmethod() is invalid } {
    
    empty_class T15123a5 {
	abstract class A {
	    abstract void m();
	}
	abstract class C extends A {
	    { C.super.m(); }
	}
    }

} {FAIL}
Test Case: 15.12.3-abstract-6
super.abstractmethod() is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-abstract-6 { super.abstractmethod() is invalid } {
    
    empty_class T15123a6 {
	abstract class A {
	    abstract void m();
	}
	abstract class B extends A {}
	abstract class C extends B {
	    { C.super.m(); }
	}
    }

} {FAIL}
Test Case: 15.12.3-abstract-7
super.abstractmethod() is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-abstract-7 { super.abstractmethod() is invalid } {
    
    empty_class T15123a7 {
	interface A {
	    void m();
	}
	abstract class B implements A {}
	abstract class C extends B {
	    { C.super.m(); }
	}
    }

} {FAIL}
Test Case: 15.12.3-abstract-8
super.abstractmethod() is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-abstract-8 { super.abstractmethod() is invalid } {
    
    empty_class T15123a8 {
	abstract class A {
	    public abstract void m();
	}
	interface I {
	    void m();
	}
	abstract class B implements A implements I {}
	abstract class C extends B {
	    { C.super.m(); }
	}
    }

} {FAIL}
Test Case: 15.12.3-abstract-9
super.abstractmethod() is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-abstract-9 { super.abstractmethod() is invalid } {
    
    empty_class T15123a9 {
	abstract class A {
	    abstract void m();
	}
	abstract class C extends A {
	    {
		new Object() {
		    { C.super.m(); }
		};
            }
	}
    }

} {FAIL}
Test Case: 15.12.3-abstract-10
super.abstractmethod() is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-abstract-10 { super.abstractmethod() is invalid } {
    
    empty_class T15123a10 {
	abstract class A {
	    abstract void m();
	}
	abstract class B extends A {}
	abstract class C extends B {
	    {
		new Object() {
		    { C.super.m(); }
		};
            }
	}
    }

} {FAIL}
Test Case: 15.12.3-abstract-11
super.abstractmethod() is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-abstract-11 { super.abstractmethod() is invalid } {
    
    empty_class T15123a11 {
	interface A {
	    void m();
	}
	abstract class B implements A {}
	abstract class C extends B {
	    {
		new Object() {
		    { C.super.m(); }
		};
            }
	}
    }

} {FAIL}
Test Case: 15.12.3-abstract-12
super.abstractmethod() is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.12.3-abstract-12 { super.abstractmethod() is invalid } {
    
    empty_class T15123a12 {
	abstract class A {
	    public abstract void m();
	}
	interface I {
	    void m();
	}
	abstract class B implements A implements I {}
	abstract class C extends B {
	    {
		new Object() {
		    { C.super.m(); }
		};
            }
	}
    }

} {FAIL}

15.13

Directory : tests/jls/expressions/array-access-expressions


Test Case: 15.13-anon-1
According to the grammar in Chapter 18, it is also legal to acess the element of an anonymous array

Expected Result: PASS

Regression Test:

tcltest::test 15.13-anon-1 { According to the grammar in Chapter 18, it
        is also legal to acess the element of an anonymous array } {
    
    empty_main T1513a1 {
        int i = new int[]{1}[0];
    }

} {PASS}
Test Case: 15.13-index-1
negative constant index is stupid, but legal

Expected Result: OK

Regression Test:

tcltest::test 15.13-index-1 { negative constant index is stupid, but legal } {
    
    ok_pass_or_warn [empty_main T1513i1 {
	int[] i = {};
	i[-1] = 0;
    }]

} {OK}
Test Case: 15.13-index-2
out-of-bound index is legal, even when size and index are constant

Expected Result: OK

Regression Test:

tcltest::test 15.13-index-2 { out-of-bound index is legal, even when size
        and index are constant } {
    
    ok_pass_or_warn [empty_main T1513i2 {
	final int[] i = {};
	i[0] = 0;
    }]

} {OK}
Test Case: 15.13-index-3
long index is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-index-3 { long index is illegal } {
    
    empty_main T1513i3 {
	int[] i = { 1 };
	i[0L] = 0;
    }

} {FAIL}
Test Case: 15.13-index-4
float index is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-index-4 { float index is illegal } {
    
    empty_main T1513i4 {
	int[] i = { 1 };
	i[0f] = 0;
    }

} {FAIL}
Test Case: 15.13-index-5
double index is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-index-5 { double index is illegal } {
    
    empty_main T1513i5 {
	int[] i = { 1 };
	i[0.] = 0;
    }

} {FAIL}
Test Case: 15.13-index-6
null index is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-index-6 { null index is illegal } {
    
    empty_main T1513i6 {
	int[] i = { 1 };
	i[null] = 0;
    }

} {FAIL}
Test Case: 15.13-index-7
boolean index is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-index-7 { boolean index is illegal } {
    
    empty_main T1513i7 {
	int[] i = { 1 };
	i[false] = 0;
    }

} {FAIL}
Test Case: 15.13-index-8
Object index is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-index-8 { Object index is illegal } {
    
    empty_main T1513i8 {
	int[] i = { 1 };
	i[""] = 0;
    }

} {FAIL}
Test Case: 15.13-index-9
void index is illegal

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-index-9 { void index is illegal } {
    
    empty_main T1513i9 {
	int[] i = { 1 };
	i[System.out.println()] = 0;
    }

} {FAIL}
Test Case: 15.13-index-10
index is unary promoted to int

Expected Result: PASS

Regression Test:

tcltest::test 15.13-index-10 { index is unary promoted to int } {
    
    empty_main T1513i10 {
	int[] i = { 1 };
	short s = 0;
	byte b = 0;
	i[s] = i[b] = i['\0'] = i[0];
    }

} {PASS}
Test Case: 15.13-reference-1
reference must be array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-reference-1 { reference must be array type } {
    
    empty_main T1513r1 {
	1[0]++;
    }

} {FAIL}
Test Case: 15.13-reference-2
reference must be array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-reference-2 { reference must be array type } {
    
    empty_main T1513r2 {
	1L[0]++;
    }

} {FAIL}
Test Case: 15.13-reference-3
reference must be array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-reference-3 { reference must be array type } {
    
    empty_main T1513r3 {
	1f[0]++;
    }

} {FAIL}
Test Case: 15.13-reference-4
reference must be array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-reference-4 { reference must be array type } {
    
    empty_main T1513r4 {
	1.[0]++;
    }

} {FAIL}
Test Case: 15.13-reference-5
reference must be array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-reference-5 { reference must be array type } {
    
    empty_main T1513r5 {
	'1'[0]++;
    }

} {FAIL}
Test Case: 15.13-reference-6
reference must be array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-reference-6 { reference must be array type } {
    
    empty_main T1513r6 {
	System.out.println()[0]++;
    }

} {FAIL}
Test Case: 15.13-reference-7
reference must be array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-reference-7 { reference must be array type } {
    
    empty_main T1513r7 {
	new Object()[0]++;
    }

} {FAIL}
Test Case: 15.13-reference-8
reference must be array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-reference-8 { reference must be array type } {
    
    empty_main T1513r8 {
	Object o = new int[1];
	o[0]++;
    }

} {FAIL}
Test Case: 15.13-reference-9
reference must be array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-reference-9 { reference must be array type } {
    
    empty_main T1513r9 {
	Object o = new int[1];
	o[0]++;
    }

} {FAIL}
Test Case: 15.13-reference-10
reference must be array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-reference-10 { reference must be array type } {
    
    empty_main T1513r10 {
	null[0]++;
    }

} {FAIL}
Test Case: 15.13-reference-11
reference must be array type

Expected Result: PASS

Regression Test:

tcltest::test 15.13-reference-11 { reference must be array type } {
    
    empty_class T1513r11 {
	int[] m() { return null; }
	void n() {
	    m()[0]++;
	}
    }

} {PASS}
Test Case: 15.13-reference-12
reference must be array type

Expected Result: PASS

Regression Test:

tcltest::test 15.13-reference-12 { reference must be array type } {
    
    empty_main T1513r12 {
	(new int[1])[0]++;
    }

} {PASS}
Test Case: 15.13-reference-13
reference must be array type

Expected Result: PASS

Regression Test:

tcltest::test 15.13-reference-13 { reference must be array type } {
    
    empty_class T1513r13 {
	static int[] i;
	void m() { 
	    i[0]++;
	    this.i[0]++;
	    T1513r13.i[0]++;
	}
    }

} {PASS}
Test Case: 15.13-reference-14
reference must be array type

Expected Result: PASS

Regression Test:

tcltest::test 15.13-reference-14 { reference must be array type } {
    
    empty_main T1513r14 {
	int[][] i = { { 1 } };
	i[0][0]++;
	(i[0])[0]--;
    }

} {PASS}
Test Case: 15.13-reference-15
reference must be array type

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-reference-15 { reference must be array type } {
    
    empty_main T1513r15 {
	int[][] i = { { 1 } };
	i[0][0][0]++;
    }

} {FAIL}
Test Case: 15.13-final-1
in a final array, array members aren't final

Expected Result: PASS

Regression Test:

tcltest::test 15.13-final-1 { in a final array, array members aren't final } {
    
    empty_main T1513f1 {
	final int[] i = {0};
	i[0]++;
    }

} {PASS}
Test Case: 15.13-type-1
the type of an array access expression is the underlying type of the array

Expected Result: PASS

Regression Test:

tcltest::test 15.13-type-1 { the type of an array access expression is the
        underlying type of the array } {
    
    empty_main T1513t1 {
	String[] s = {""};
	s[0].length();
	s[0].valueOf(1);
    }

} {PASS}
Test Case: 15.13-type-2
the type of an array access expression is the underlying type of the array

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-type-2 { the type of an array access expression is the
        underlying type of the array } {
    
    empty_main T1513t2 {
	final Object[] s = {""};
	s[0].length();
    }

} {FAIL}
Test Case: 15.13-type-3
the type of an array access expression is the underlying type of the array

Expected Result: FAIL

Regression Test:

tcltest::test 15.13-type-3 { the type of an array access expression is the
        underlying type of the array } {
    
    empty_main T1513t3 {
	final Object[] s = {""};
	s[0].valueOf(1);
    }

} {FAIL}

15.14.1

Directory : tests/jls/expressions/postfix-expressions/postfix-increment-operator


Test Case: 15.14.1-argument-1
Postfix++ must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-argument-1 { Postfix++ must operate on a numeric variable } {
    
    empty_class T15141a1 {int i = 1++;}

} {FAIL}
Test Case: 15.14.1-argument-2
Postfix++ must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-argument-2 { Postfix++ must operate on a numeric variable } {
    
    empty_class T15141a2 {boolean b = true++;}

} {FAIL}
Test Case: 15.14.1-argument-3
Postfix++ must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-argument-3 { Postfix++ must operate on a numeric variable } {
    
    empty_class T15141a3 {Object o = null++;}

} {FAIL}
Test Case: 15.14.1-argument-4
Postfix++ must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-argument-4 { Postfix++ must operate on a numeric variable } {
    
    empty_class T15141a4 {Object o = (new Object())++;}

} {FAIL}
Test Case: 15.14.1-argument-5
Postfix++ must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-argument-5 { Postfix++ must operate on a numeric variable } {
    
    empty_class T15141a5 {int i = (System.out.println())++;}

} {FAIL}
Test Case: 15.14.1-argument-6
Postfix++ must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-argument-6 { Postfix++ must operate on a numeric variable } {
    
    empty_class T15141a6 {boolean b = true, b2 = b++;}

} {FAIL}
Test Case: 15.14.1-argument-7
Postfix++ must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-argument-7 { Postfix++ must operate on a numeric variable } {
    
    empty_class T15141a7 {Object o = null, o2 = o++;}

} {FAIL}
Test Case: 15.14.1-argument-8
Postfix++ must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-argument-8 { Postfix++ must operate on a numeric variable } {
    
    empty_class T15141a8 {int i = 1, i2 = (-i)++;}

} {FAIL}
Test Case: 15.14.1-argument-9
Postfix++ cannot operate on final variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-argument-9 { Postfix++ cannot operate on final variable } {
    
    empty_class T15141a9 {final int i = 1, j = i++;}

} {FAIL}
Test Case: 15.14.1-argument-10
Postfix++ must operate on a numeric variable, parenthesis may now surround variables

Expected Result: OK

Regression Test:

tcltest::test 15.14.1-argument-10 { Postfix++ must operate on a numeric
        variable, parenthesis may now surround variables } {
    
    ok_pass_or_warn [empty_class T15141a10 {int i = 1, j = (i)++;} ]

} {OK}
Test Case: 15.14.1-type-1
Postfix++ operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.1-type-1 { Postfix++ operates on all numeric types } {
    
    empty_class T15141t1 {byte b = 1, b2 = b++;}

} {PASS}
Test Case: 15.14.1-type-2
Postfix++ operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.1-type-2 { Postfix++ operates on all numeric types } {
    
    empty_class T15141t2 {short s = 1, s2 = s++;}

} {PASS}
Test Case: 15.14.1-type-3
Postfix++ operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.1-type-3 { Postfix++ operates on all numeric types } {
    
    empty_class T15141t3 {char c = 1, c2 = c++;}

} {PASS}
Test Case: 15.14.1-type-4
Postfix++ operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.1-type-4 { Postfix++ operates on all numeric types } {
    
    empty_class T15141t4 {int i = 1, i2 = i++;}

} {PASS}
Test Case: 15.14.1-type-5
Postfix++ operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.1-type-5 { Postfix++ operates on all numeric types } {
    
    empty_class T15141t5 {long l = 1, l2 = l++;}

} {PASS}
Test Case: 15.14.1-type-6
Postfix++ operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.1-type-6 { Postfix++ operates on all numeric types } {
    
    empty_class T15141t6 {float f = 1, f2 = f++;}

} {PASS}
Test Case: 15.14.1-type-7
Postfix++ operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.1-type-7 { Postfix++ operates on all numeric types } {
    
    empty_class T15141t7 {double d = 1, d2 = d++;}

} {PASS}
Test Case: 15.14.1-result-1
Postfix++ results in a value, not a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-result-1 { Postfix++ results in a value, not a variable } {
    
    empty_main T15141r1 {
        int i = 1;
        i++ = 2;
    }

} {FAIL}
Test Case: 15.14.1-result-2
Postfix++ results in a value, not a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-result-2 { Postfix++ results in a value, not a variable } {
    
    empty_main T15141r2 {
        int i = 1;
        (i++)++;
    }

} {FAIL}
Test Case: 15.14.1-final-1
Postfix++ cannot be applied to a final

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-final-1 { Postfix++ cannot be applied to a final } {
    
    empty_class T15141f1 {
	final int i;
	int j = i++;
    }

} {FAIL}
Test Case: 15.14.1-final-2
Postfix++ cannot be applied to a final

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-final-2 { Postfix++ cannot be applied to a final } {
    
    empty_main T15141f2 {
	final int i;
	if (false)
	    i++;
    }

} {FAIL}
Test Case: 15.14.1-final-3
Postfix++ cannot be applied to a final

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.1-final-3 { Postfix++ cannot be applied to a final } {
    
    empty_class T15141f3 {
	void m(final int i) {
	    if (false)
	        i++;
	}
    }

} {FAIL}

15.14.2

Directory : tests/jls/expressions/postfix-expressions/postfix-decrement-operator


Test Case: 15.14.2-argument-1
Postfix-- must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-argument-1 { Postfix-- must operate on a numeric variable } {
    
    empty_class T15142a1 {int i = 1--;}

} {FAIL}
Test Case: 15.14.2-argument-2
Postfix-- must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-argument-2 { Postfix-- must operate on a numeric variable } {
    
    empty_class T15142a2 {boolean b = true--;}

} {FAIL}
Test Case: 15.14.2-argument-3
Postfix-- must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-argument-3 { Postfix-- must operate on a numeric variable } {
    
    empty_class T15142a3 {Object o = null--;}

} {FAIL}
Test Case: 15.14.2-argument-4
Postfix-- must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-argument-4 { Postfix-- must operate on a numeric variable } {
    
    empty_class T15142a4 {Object o = (new Object())--;}

} {FAIL}
Test Case: 15.14.2-argument-5
Postfix-- must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-argument-5 { Postfix-- must operate on a numeric variable } {
    
    empty_class T15142a5 {int i = (System.out.println())--;}

} {FAIL}
Test Case: 15.14.2-argument-6
Postfix-- must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-argument-6 { Postfix-- must operate on a numeric variable } {
    
    empty_class T15142a6 {boolean b = true, b2 = b--;}

} {FAIL}
Test Case: 15.14.2-argument-7
Postfix-- must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-argument-7 { Postfix-- must operate on a numeric variable } {
    
    empty_class T15142a7 {Object o = null, o2 = o--;}

} {FAIL}
Test Case: 15.14.2-argument-8
Postfix-- must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-argument-8 { Postfix-- must operate on a numeric variable } {
    
    empty_class T15142a8 {int i = 1, i2 = (-i)--;}

} {FAIL}
Test Case: 15.14.2-argument-9
Postfix-- cannot operate on final variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-argument-9 { Postfix-- cannot operate on final variable } {
    
    empty_class T15142a9 {final int i = 1, j = i--;}

} {FAIL}
Test Case: 15.14.2-argument-10
Postfix-- must operate on a numeric variable, parenthesis may now surround variables

Expected Result: OK

Regression Test:

tcltest::test 15.14.2-argument-10 { Postfix-- must operate on a numeric
        variable, parenthesis may now surround variables } {
    
    ok_pass_or_warn [empty_class T15142a10 {int i = 1, j = (i)--;}]

} {OK}
Test Case: 15.14.2-type-1
Postfix-- operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.2-type-1 { Postfix-- operates on all numeric types } {
    
    empty_class T15142t1 {byte b = 1, b2 = b--;}

} {PASS}
Test Case: 15.14.2-type-2
Postfix-- operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.2-type-2 { Postfix-- operates on all numeric types } {
    
    empty_class T15142t2 {short s = 1, s2 = s--;}

} {PASS}
Test Case: 15.14.2-type-3
Postfix-- operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.2-type-3 { Postfix-- operates on all numeric types } {
    
    empty_class T15142t3 {char c = 1, c2 = c--;}

} {PASS}
Test Case: 15.14.2-type-4
Postfix-- operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.2-type-4 { Postfix-- operates on all numeric types } {
    
    empty_class T15142t4 {int i = 1, i2 = i--;}

} {PASS}
Test Case: 15.14.2-type-5
Postfix-- operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.2-type-5 { Postfix-- operates on all numeric types } {
    
    empty_class T15142t5 {long l = 1, l2 = l--;}

} {PASS}
Test Case: 15.14.2-type-6
Postfix-- operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.2-type-6 { Postfix-- operates on all numeric types } {
    
    empty_class T15142t6 {float f = 1, f2 = f--;}

} {PASS}
Test Case: 15.14.2-type-7
Postfix-- operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.14.2-type-7 { Postfix-- operates on all numeric types } {
    
    empty_class T15142t7 {double d = 1, d2 = d--;}

} {PASS}
Test Case: 15.14.2-result-1
Postfix-- results in a value, not a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-result-1 { Postfix-- results in a value, not a variable } {
    
    empty_main T15142r1 {
        int i = 1;
        i-- = 2;
    }

} {FAIL}
Test Case: 15.14.2-result-2
Postfix-- results in a value, not a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-result-2 { Postfix-- results in a value, not a variable } {
    
    empty_main T15142r2 {
        int i = 1;
        (i--)--;
    }

} {FAIL}
Test Case: 15.14.2-final-1
Postfix-- cannot be applied to a final

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-final-1 { Postfix-- cannot be applied to a final } {
    
    empty_class T15142f1 {
	final int i;
	int j = i--;
    }

} {FAIL}
Test Case: 15.14.2-final-2
Postfix-- cannot be applied to a final

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-final-2 { Postfix-- cannot be applied to a final } {
    
    empty_main T15142f2 {
	final int i;
	if (false)
	    i--;
    }

} {FAIL}
Test Case: 15.14.2-final-3
Postfix-- cannot be applied to a final

Expected Result: FAIL

Regression Test:

tcltest::test 15.14.2-final-3 { Postfix-- cannot be applied to a final } {
    
    empty_class T15142f3 {
	void m(final int i) {
	    if (false)
	        i--;
	}
    }

} {FAIL}

15.15

Directory : tests/jls/expressions/unary-operators


Test Case: 15.15-group-1
Unary operators group right-to-left

Expected Result: PASS

Regression Test:

tcltest::test 15.15-group-1 { Unary operators group right-to-left } {
    
    constant_expression T15151 {-~0xffffffff == 0}  {~-0xffffffff == 0xfffffffe}

} {PASS}
Test Case: 15.15-precedence-1
Unary operators have higher precedence than multiplicative

Expected Result: FAIL

Regression Test:

tcltest::test 15.15-precedence-1 { Unary operators have higher
        precedence than multiplicative } {
    
    is_assignable_to T1515p1 float {(float) 1/1.0}

} {FAIL}
Test Case: 15.15-precedence-2
Unary operators have higher precedence than multiplicative

Expected Result: PASS

Regression Test:

tcltest::test 15.15-precedence-2 { Unary operators have higher
        precedence than multiplicative } {
    
    is_assignable_to T1515p2 float {(float) (1/1.0)}

} {PASS}
Test Case: 15.15-precedence-3
Unary operators have higher precedence than multiplicative

Expected Result: PASS

Regression Test:

tcltest::test 15.15-precedence-3 { Unary operators have higher
        precedence than multiplicative } {
    
    constant_expression T1515p3 {-0x80000000/2 == 0xc0000000}  {-(0x80000000/2) == 0x40000000}

} {PASS}
Test Case: 15.15-precedence-4
Unary operators have higher precedence than multiplicative

Expected Result: PASS

Regression Test:

tcltest::test 15.15-precedence-4 { Unary operators have higher
        precedence than multiplicative } {
    
    constant_expression T1515p4 {~0xffffffff*2 == 0}  {~(0xffffffff*2) == 1}

} {PASS}
Test Case: 15.15-precedence-5
Unary operators have higher precedence than addition, for boolean

Expected Result: PASS

Regression Test:

tcltest::test 15.15-precedence-5 { Unary operators have higher
        precedence than addition, for boolean } {
    
    constant_expression T1515p5 {!true + "" == "false"}

} {PASS}

15.15.1

Directory : tests/jls/expressions/unary-operators/prefix-increment-operator


Test Case: 15.15.1-argument-1
++Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-argument-1 { ++Prefix must operate on a numeric variable } {
    
    empty_class T15151a1 {int i = ++1;}

} {FAIL}
Test Case: 15.15.1-argument-2
++Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-argument-2 { ++Prefix must operate on a numeric variable } {
    
    empty_class T15151a2 {boolean b = ++true;}

} {FAIL}
Test Case: 15.15.1-argument-3
++Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-argument-3 { ++Prefix must operate on a numeric variable } {
    
    empty_class T15151a3 {Object o = ++null;}

} {FAIL}
Test Case: 15.15.1-argument-4
++Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-argument-4 { ++Prefix must operate on a numeric variable } {
    
    empty_class T15151a4 {Object o = ++(new Object());}

} {FAIL}
Test Case: 15.15.1-argument-5
++Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-argument-5 { ++Prefix must operate on a numeric variable } {
    
    empty_class T15151a5 {int i = ++(System.out.println());}

} {FAIL}
Test Case: 15.15.1-argument-6
++Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-argument-6 { ++Prefix must operate on a numeric variable } {
    
    empty_class T15151a6 {boolean b = true, b2 = ++b;}

} {FAIL}
Test Case: 15.15.1-argument-7
++Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-argument-7 { ++Prefix must operate on a numeric variable } {
    
    empty_class T15151a7 {Object o = null, o2 = ++o;}

} {FAIL}
Test Case: 15.15.1-argument-8
++Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-argument-8 { ++Prefix must operate on a numeric variable } {
    
    empty_class T15151a8 {int i = 1, i2 = ++(-i);}

} {FAIL}
Test Case: 15.15.1-argument-9
++Prefix cannot operate on final variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-argument-9 { ++Prefix cannot operate on final variable } {
    
    empty_class T15151a9 {final int i = 1, j = ++i;}

} {FAIL}
Test Case: 15.15.1-argument-10
++Prefix must operate on a numeric variable, parenthesis may now surround variables

Expected Result: OK

Regression Test:

tcltest::test 15.15.1-argument-10 { ++Prefix must operate on a numeric
        variable, parenthesis may now surround variables } {
    
    ok_pass_or_warn [empty_class T15151a10 {int i = 1, j = ++(i);}]

} {OK}
Test Case: 15.15.1-type-1
++Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.1-type-1 { ++Prefix operates on all numeric types } {
    
    empty_class T15151t1 {byte b = 1, b2 = ++b;}

} {PASS}
Test Case: 15.15.1-type-2
++Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.1-type-2 { ++Prefix operates on all numeric types } {
    
    empty_class T15151t2 {short s = 1, s2 = ++s;}

} {PASS}
Test Case: 15.15.1-type-3
++Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.1-type-3 { ++Prefix operates on all numeric types } {
    
    empty_class T15151t3 {char c = 1, c2 = ++c;}

} {PASS}
Test Case: 15.15.1-type-4
++Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.1-type-4 { ++Prefix operates on all numeric types } {
    
    empty_class T15151t4 {int i = 1, i2 = ++i;}

} {PASS}
Test Case: 15.15.1-type-5
++Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.1-type-5 { ++Prefix operates on all numeric types } {
    
    empty_class T15151t5 {long l = 1, l2 = ++l;}

} {PASS}
Test Case: 15.15.1-type-6
++Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.1-type-6 { ++Prefix operates on all numeric types } {
    
    empty_class T15151t6 {float f = 1, f2 = ++f;}

} {PASS}
Test Case: 15.15.1-type-7
++Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.1-type-7 { ++Prefix operates on all numeric types } {
    
    empty_class T15151t7 {double d = 1, d2 = ++d;}

} {PASS}
Test Case: 15.15.1-result-1
++Prefix results in a value, not a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-result-1 { ++Prefix results in a value, not a variable } {
    
    empty_class T15151r1 {
        int i = 1;
        ++i = 2;
    }

} {FAIL}
Test Case: 15.15.1-result-2
++Prefix results in a value, not a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-result-2 { ++Prefix results in a value, not a variable } {
    
    empty_main T15151r2 {
        int i = 1;
        ++(++i);
    }

} {FAIL}
Test Case: 15.15.1-final-1
++Prefix cannot be applied to a final

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-final-1 { ++Prefix cannot be applied to a final } {
    
    empty_class T15151f1 {
	final int i;
	int j = ++i;
    }

} {FAIL}
Test Case: 15.15.1-final-2
++Prefix cannot be applied to a final

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-final-2 { ++Prefix cannot be applied to a final } {
    
    empty_main T15151f2 {
	final int i;
	if (false)
	    ++i;
    }

} {FAIL}
Test Case: 15.15.1-final-3
++Prefix cannot be applied to a final

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.1-final-3 { ++Prefix cannot be applied to a final } {
    
    empty_class T15151f3 {
	void m(final int i) {
	    if (false)
	        ++i;
	}
    }

} {FAIL}

15.15.2

Directory : tests/jls/expressions/unary-operators/prefix-decrement-operator


Test Case: 15.15.2-argument-1
--Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-argument-1 { --Prefix must operate on a numeric variable } {
    
    empty_class T15152a1 {int i = --1;}

} {FAIL}
Test Case: 15.15.2-argument-2
--Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-argument-2 { --Prefix must operate on a numeric variable } {
    
    empty_class T15152a2 {boolean b = --true;}

} {FAIL}
Test Case: 15.15.2-argument-3
--Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-argument-3 { --Prefix must operate on a numeric variable } {
    
    empty_class T15152a3 {Object o = --null;}

} {FAIL}
Test Case: 15.15.2-argument-4
--Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-argument-4 { --Prefix must operate on a numeric variable } {
    
    empty_class T15152a4 {Object o = --(new Object());}

} {FAIL}
Test Case: 15.15.2-argument-5
--Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-argument-5 { --Prefix must operate on a numeric variable } {
    
    empty_class T15152a5 {int i = --(System.out.println());}

} {FAIL}
Test Case: 15.15.2-argument-6
--Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-argument-6 { --Prefix must operate on a numeric variable } {
    
    empty_class T15152a6 {boolean b = true, b2 = --b;}

} {FAIL}
Test Case: 15.15.2-argument-7
--Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-argument-7 { --Prefix must operate on a numeric variable } {
    
    empty_class T15152a7 {Object o = null, o2 = --o;}

} {FAIL}
Test Case: 15.15.2-argument-8
--Prefix must operate on a numeric variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-argument-8 { --Prefix must operate on a numeric variable } {
    
    empty_class T15152a8 {int i = 1, i2 = --(-i);}

} {FAIL}
Test Case: 15.15.2-argument-9
--Prefix cannot operate on final variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-argument-9 { --Prefix cannot operate on final variable } {
    
    empty_class T15152a9 {final int i = 1, j = --i;}

} {FAIL}
Test Case: 15.15.2-argument-10
--Prefix must operate on a numeric variable, parenthesis may now surround variables

Expected Result: OK

Regression Test:

tcltest::test 15.15.2-argument-10 { --Prefix must operate on a numeric
        variable, parenthesis may now surround variables } {
    
    ok_pass_or_warn [empty_class T15152a10 {int i = 1, j = --(i);}]

} {OK}
Test Case: 15.15.2-type-1
--Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.2-type-1 { --Prefix operates on all numeric types } {
    
    empty_class T15152t1 {byte b = 1, b2 = --b;}

} {PASS}
Test Case: 15.15.2-type-2
--Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.2-type-2 { --Prefix operates on all numeric types } {
    
    empty_class T15152t2 {short s = 1, s2 = --s;}

} {PASS}
Test Case: 15.15.2-type-3
--Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.2-type-3 { --Prefix operates on all numeric types } {
    
    empty_class T15152t3 {char c = 1, c2 = --c;}

} {PASS}
Test Case: 15.15.2-type-4
--Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.2-type-4 { --Prefix operates on all numeric types } {
    
    empty_class T15152t4 {int i = 1, i2 = --i;}

} {PASS}
Test Case: 15.15.2-type-5
--Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.2-type-5 { --Prefix operates on all numeric types } {
    
    empty_class T15152t5 {long l = 1, l2 = --l;}

} {PASS}
Test Case: 15.15.2-type-6
--Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.2-type-6 { --Prefix operates on all numeric types } {
    
    empty_class T15152t6 {float f = 1, f2 = --f;}

} {PASS}
Test Case: 15.15.2-type-7
--Prefix operates on all numeric types

Expected Result: PASS

Regression Test:

tcltest::test 15.15.2-type-7 { --Prefix operates on all numeric types } {
    
    empty_class T15152t7 {double d = 1, d2 = --d;}

} {PASS}
Test Case: 15.15.2-result-1
--Prefix results in a value, not a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-result-1 { --Prefix results in a value, not a variable } {
    
    empty_class T15152r1 {
        int i = 1;
        --i = 2;
    }

} {FAIL}
Test Case: 15.15.2-result-2
--Prefix results in a value, not a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-result-2 { --Prefix results in a value, not a variable } {
    
    empty_main T15152r2 {
        int i = 1;
        --(--i);
    }

} {FAIL}
Test Case: 15.15.2-final-1
--Prefix cannot be applied to a final

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-final-1 { --Prefix cannot be applied to a final } {
    
    empty_class T15152f1 {
	final int i;
	int j = --i;
    }

} {FAIL}
Test Case: 15.15.2-final-2
--Prefix cannot be applied to a final

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-final-2 { --Prefix cannot be applied to a final } {
    
    empty_main T15152f2 {
	final int i;
	if (false)
	    --i;
    }

} {FAIL}
Test Case: 15.15.2-final-3
--Prefix cannot be applied to a final

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.2-final-3 { --Prefix cannot be applied to a final } {
    
    empty_class T15152f3 {
	void m(final int i) {
	    if (false)
	        --i;
	}
    }

} {FAIL}

15.15.3

Directory : tests/jls/expressions/unary-operators/unary-plus-operator


Test Case: 15.15.3-type-1
+ must have numeric operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.3-type-1 { + must have numeric operand } {
    
    is_assignable_to T15153t1 Object +null

} {FAIL}
Test Case: 15.15.3-type-2
+ must have numeric operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.3-type-2 { + must have numeric operand } {
    
    is_assignable_to T15153t2 boolean +true

} {FAIL}
Test Case: 15.15.3-type-3
+ must have numeric operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.3-type-3 { + must have numeric operand } {
    
    is_assignable_to T15153t3 Object {+(new Object())}

} {FAIL}
Test Case: 15.15.3-type-4
+ must have numeric operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.3-type-4 { + must have numeric operand } {
    
    is_assignable_to T15153t4 int +System.out.println()

} {FAIL}
Test Case: 15.15.3-type-5
+ performs unary promotion

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.3-type-5 { + performs unary promotion } {
    
#is_assignable_to creates byte n1, byte n2
    is_assignable_to T15153t5 byte 1 byte +n1

} {FAIL}
Test Case: 15.15.3-type-6
+ must have numeric operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.3-type-6 { + must have numeric operand } {
    
    is_assignable_to T15153t6 int +1

} {PASS}
Test Case: 15.15.3-type-7
+ must have numeric operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.3-type-7 { + must have numeric operand } {
    
    is_assignable_to T15153t7 long +1L

} {PASS}
Test Case: 15.15.3-type-8
+ must have numeric operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.3-type-8 { + must have numeric operand } {
    
    is_assignable_to T15153t8 float +1f

} {PASS}
Test Case: 15.15.3-type-9
+ must have numeric operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.3-type-9 { + must have numeric operand } {
    
    is_assignable_to T15153t9 double +1d

} {PASS}
Test Case: 15.15.3-type-10
+ must have numeric operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.3-type-10 { + must have numeric operand } {
    
    is_assignable_to T15153t10 short +1

} {PASS}
Test Case: 15.15.3-type-11
+ must have numeric operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.3-type-11 { + must have numeric operand } {
    
    is_assignable_to T15153t11 char +'1'

} {PASS}
Test Case: 15.15.3-type-12
+ must have numeric operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.3-type-12 { + must have numeric operand } {
    
    is_assignable_to T15153t12 byte +1

} {PASS}

15.15.4

Directory : tests/jls/expressions/unary-operators/unary-minus-operator


Test Case: 15.15.4-type-1
- must have numeric operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.4-type-1 { - must have numeric operand } {
    
    is_assignable_to T15154t1 Object -null

} {FAIL}
Test Case: 15.15.4-type-2
- must have numeric operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.4-type-2 { - must have numeric operand } {
    
    is_assignable_to T15154t2 boolean -true

} {FAIL}
Test Case: 15.15.4-type-3
- must have numeric operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.4-type-3 { - must have numeric operand } {
    
    is_assignable_to T15154t3 Object {-(new Object())}

} {FAIL}
Test Case: 15.15.4-type-4
- must have numeric operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.4-type-4 { - must have numeric operand } {
    
    is_assignable_to T15154t4 int -System.out.println()

} {FAIL}
Test Case: 15.15.4-type-5
- performs unary promotion

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.4-type-5 { - performs unary promotion } {
    
#is_assignable_to creates byte n1, byte n2
    is_assignable_to T15154t5 byte 1 byte -n1

} {FAIL}
Test Case: 15.15.4-type-6
- must have numeric operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-type-6 { - must have numeric operand } {
    
    is_assignable_to T15154t6 short -1

} {PASS}
Test Case: 15.15.4-type-7
- must have numeric operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-type-7 { - must have numeric operand } {
    
    is_assignable_to T15154t7 char -(-'1')

} {PASS}
Test Case: 15.15.4-type-8
- must have numeric operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-type-8 { - must have numeric operand } {
    
    is_assignable_to T15154t8 byte -1

} {PASS}
Test Case: 15.15.4-int-1
-x = ~x+1 for all ints

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-int-1 { -x = ~x+1 for all ints } {
    
    constant_expression T15154i1 {-0 == ~0+1}

} {PASS}
Test Case: 15.15.4-int-2
-x = ~x+1 for all ints

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-int-2 { -x = ~x+1 for all ints } {
    
    constant_expression T15154i2 {-0xffffffff == ~0xffffffff+1}

} {PASS}
Test Case: 15.15.4-int-3
-MIN_INT is still MIN_INT

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-int-3 { -MIN_INT is still MIN_INT } {
    
    constant_expression T15154i3 {-0x80000000 == 0x80000000}

} {PASS}
Test Case: 15.15.4-long-1
-x = ~x+1 for all longs

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-long-1 { -x = ~x+1 for all longs } {
    
    constant_expression T15154l1 {-0L == ~0L+1}

} {PASS}
Test Case: 15.15.4-long-2
-x = ~x+1 for all longs

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-long-2 { -x = ~x+1 for all longs } {
    
    constant_expression T15154l2 {-0xffffffffffffffffL == ~0xffffffffffffffffL+1}

} {PASS}
Test Case: 15.15.4-long-3
-MIN_LONG is still MIN_LONG

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-long-3 { -MIN_LONG is still MIN_LONG } {
    
    constant_expression T15154l3 {-0x8000000000000000L == 0x8000000000000000L}

} {PASS}
Test Case: 15.15.4-float-1
-NaN is still NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-float-1 { -NaN is still NaN } {
    
    constant_expression T15154f1 {-Float.NaN != -Float.NaN}

} {PASS}
Test Case: 15.15.4-float-2
- Infinity is Infinity of opposite sign

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-float-2 { - Infinity is Infinity of opposite sign } {
    
    constant_expression T15154f2 {-Float.POSITIVE_INFINITY == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.15.4-float-3
- 0.0 is zero of opposite sign

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-float-3 { - 0.0 is zero of opposite sign } {
    
    constant_expression T15154f3 {(1/0.0f) != (1/-0.0f)}

} {PASS}
Test Case: 15.15.4-double-1
-NaN is still NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-double-1 { -NaN is still NaN } {
    
    constant_expression T15154d1 {-Double.NaN != -Double.NaN}

} {PASS}
Test Case: 15.15.4-double-2
- Infinity is Infinity of opposite sign

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-double-2 { - Infinity is Infinity of opposite sign } {
    
    constant_expression T15154d2 {-Double.POSITIVE_INFINITY == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.15.4-double-3
- 0.0 is zero of opposite sign

Expected Result: PASS

Regression Test:

tcltest::test 15.15.4-double-3 { - 0.0 is zero of opposite sign } {
    
    constant_expression T15154d3 {(1/0.0) != (1/-0.0)}

} {PASS}

15.15.5

Directory : tests/jls/expressions/unary-operators/bitwise-complement-operator


Test Case: 15.15.5-type-1
~ must have integral operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.5-type-1 { ~ must have integral operand } {
    
    is_assignable_to T15155t1 Object ~null

} {FAIL}
Test Case: 15.15.5-type-2
~ must have integral operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.5-type-2 { ~ must have integral operand } {
    
    is_assignable_to T15155t2 boolean ~true

} {FAIL}
Test Case: 15.15.5-type-3
~ must have integral operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.5-type-3 { ~ must have integral operand } {
    
    is_assignable_to T15155t3 Object {~(new Object())}

} {FAIL}
Test Case: 15.15.5-type-4
~ must have integral operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.5-type-4 { ~ must have integral operand } {
    
    is_assignable_to T15155t4 int ~System.out.println()

} {FAIL}
Test Case: 15.15.5-type-5
~ must have integral operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.5-type-5 { ~ must have integral operand } {
    
    is_assignable_to T15155t5 int ~0.0f

} {FAIL}
Test Case: 15.15.5-type-6
~ must have integral operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.5-type-6 { ~ must have integral operand } {
    
    is_assignable_to T15155t6 int ~0.0d

} {FAIL}
Test Case: 15.15.5-type-7
~ performs unary promotion

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.5-type-7 { ~ performs unary promotion } {
    
#is_assignable_to creates byte n1, byte n2
    is_assignable_to T15155t7 byte 1 byte ~n1

} {FAIL}
Test Case: 15.15.5-type-8
~ must have integral operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.5-type-8 { ~ must have integral operand } {
    
    is_assignable_to T15155t8 short ~1

} {PASS}
Test Case: 15.15.5-type-9
~ must have integral operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.5-type-9 { ~ must have integral operand } {
    
    is_assignable_to T15155t9 char ~(~'1')

} {PASS}
Test Case: 15.15.5-type-10
~ must have integral operand

Expected Result: PASS

Regression Test:

tcltest::test 15.15.5-type-10 { ~ must have integral operand } {
    
    is_assignable_to T15155t10 byte ~1

} {PASS}
Test Case: 15.15.5-int-1
~x = -x-1 for all ints

Expected Result: PASS

Regression Test:

tcltest::test 15.15.5-int-1 { ~x = -x-1 for all ints } {
    
    constant_expression T15155i1 {~0 == -0-1}

} {PASS}
Test Case: 15.15.5-int-2
~x = -x-1 for all ints

Expected Result: PASS

Regression Test:

tcltest::test 15.15.5-int-2 { ~x = -x-1 for all ints } {
    
    constant_expression T15155i2 {~0xffffffff == -0xffffffff-1}

} {PASS}
Test Case: 15.15.5-long-1
~x = -x-1 for all longs

Expected Result: PASS

Regression Test:

tcltest::test 15.15.5-long-1 { ~x = -x-1 for all longs } {
    
    constant_expression T15155l1 {~0L == -0L-1}

} {PASS}
Test Case: 15.15.5-long-2
~x = -x-1 for all longs

Expected Result: PASS

Regression Test:

tcltest::test 15.15.5-long-2 { ~x = -x-1 for all longs } {
    
    constant_expression T15155l2 {~0xffffffffffffffffL == -0xffffffffffffffffL-1}

} {PASS}

15.15.6

Directory : tests/jls/expressions/unary-operators/logical-complement-operator


Test Case: 15.15.6-type-1
! must have boolean operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.6-type-1 { ! must have boolean operand } {
    
    is_assignable_to T15156t1 Object !null

} {FAIL}
Test Case: 15.15.6-type-2
! must have boolean operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.6-type-2 { ! must have boolean operand } {
    
    is_assignable_to T15156t2 Object {!(new Object())}

} {FAIL}
Test Case: 15.15.6-type-3
! must have boolean operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.6-type-3 { ! must have boolean operand } {
    
    is_assignable_to T15156t3 int !System.out.println()

} {FAIL}
Test Case: 15.15.6-type-4
! must have boolean operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.6-type-4 { ! must have boolean operand } {
    
    is_assignable_to T15156t4 int !0.0f

} {FAIL}
Test Case: 15.15.6-type-5
! must have boolean operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.6-type-5 { ! must have boolean operand } {
    
    is_assignable_to T15156t5 int !0.0d

} {FAIL}
Test Case: 15.15.6-type-6
! must have boolean operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.6-type-6 { ! must have boolean operand } {
    
    is_assignable_to T15156t6 short !1

} {FAIL}
Test Case: 15.15.6-type-7
! must have boolean operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.6-type-7 { ! must have boolean operand } {
    
    is_assignable_to T15156t7 char !'1'

} {FAIL}
Test Case: 15.15.6-type-8
! must have boolean operand

Expected Result: FAIL

Regression Test:

tcltest::test 15.15.6-type-8 { ! must have boolean operand } {
    
    is_assignable_to T15156t8 byte !1

} {FAIL}
Test Case: 15.15.6-boolean-1
! true is false

Expected Result: PASS

Regression Test:

tcltest::test 15.15.6-boolean-1 { ! true is false } {
    
    constant_expression T15156b1 {!true == false}

} {PASS}
Test Case: 15.15.6-boolean-2
! false is true

Expected Result: PASS

Regression Test:

tcltest::test 15.15.6-boolean-2 { ! false is true } {
    
    constant_expression T15156b2 {!false == true}

} {PASS}

15.16

Directory : tests/jls/expressions/cast-expressions


Test Case: 15.16-primitive-1
Except for boolean, (primitive) primitive is always legal

Expected Result: PASS

Regression Test:

tcltest::test 15.16-primitive-1 { Except for boolean, (primitive) primitive
        is always legal } {
    
    empty_main T1516p1 {
	boolean b = (boolean) true;
    }

} {PASS}
Test Case: 15.16-primitive-2
Except for boolean, (primitive) primitive is always legal

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-primitive-2 { Except for boolean, (primitive) primitive
        is always legal } {
    
    empty_main T1516p2 {
	boolean b = (boolean) 1;
    }

} {FAIL}
Test Case: 15.16-primitive-3
Except for boolean, (primitive) primitive is always legal

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-primitive-3 { Except for boolean, (primitive) primitive
        is always legal } {
    
    empty_main T1516p3 {
	int i = (int) true;
    }

} {FAIL}
Test Case: 15.16-primitive-4
Except for boolean, (primitive) primitive is always legal

Expected Result: PASS

Regression Test:

tcltest::test 15.16-primitive-4 { Except for boolean, (primitive) primitive
        is always legal } {
    
    empty_main T1516p4 {
	int i = (int) 1;
    }

} {PASS}
Test Case: 15.16-primitive-5
Except for boolean, (primitive) primitive is always legal

Expected Result: PASS

Regression Test:

tcltest::test 15.16-primitive-5 { Except for boolean, (primitive) primitive
        is always legal } {
    
    empty_main T1516p5 {
	double d = (double) 1;
    }

} {PASS}
Test Case: 15.16-primitive-6
Except for boolean, (primitive) primitive is always legal

Expected Result: PASS

Regression Test:

tcltest::test 15.16-primitive-6 { Except for boolean, (primitive) primitive
        is always legal } {
    
    empty_main T1516p6 {
	int i = (int) 1.0;
    }

} {PASS}
Test Case: 15.16-primitive-7
Except for boolean, (primitive) primitive is always legal

Expected Result: PASS

Regression Test:

tcltest::test 15.16-primitive-7 { Except for boolean, (primitive) primitive
        is always legal } {
    
    empty_main T1516p7 {
	int i = (int) '1';
    }

} {PASS}
Test Case: 15.16-primitive-8
(primitive) non-primitive is never legal

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-primitive-8 { (primitive) non-primitive is never legal } {
    
    empty_main T1516p8 {
	int i = (int) "1";
    }

} {FAIL}
Test Case: 15.16-primitive-9
(primitive) non-primitive is never legal

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-primitive-9 { (primitive) non-primitive is never legal } {
    
    empty_main T1516p9 {
	int i = (int) new Integer(1);
    }

} {FAIL}
Test Case: 15.16-primitive-10
(primitive) non-primitive is never legal

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-primitive-10 { (primitive) non-primitive is never legal } {
    
    empty_main T1516p10 {
	int i = (int) null;
    }

} {FAIL}
Test Case: 15.16-primitive-11
(primitive) non-primitive is never legal

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-primitive-11 { (primitive) non-primitive is never legal } {
    
    empty_main T1516p11 {
	int i = (int) System.out.println();
    }

} {FAIL}
Test Case: 15.16-value-1
casts create values, not variables

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-value-1 { casts create values, not variables } {
    
    empty_main T1516v1 {
	int i = 1;
	((int) i)++;
    }

} {FAIL}
Test Case: 15.16-value-2
casts create values, not variables

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-value-2 { casts create values, not variables } {
    
    empty_main T1516v2 {
	int i = 1;
	++(int) i;
    }

} {FAIL}
Test Case: 15.16-value-3
casts create values, not variables

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-value-3 { casts create values, not variables } {
    
    empty_main T1516v3 {
	int i;
	(long) i = 1;
    }

} {FAIL}
Test Case: 15.16-value-4
casts create values, not variables

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-value-4 { casts create values, not variables } {
    
    empty_main T1516v4 {
	int i;
	((long) i) = 1;
    }

} {FAIL}
Test Case: 15.16-array-1
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-array-1 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516a1 {
	int[] i = {};
	long[] l = (long[]) i;
    }

} {FAIL}
Test Case: 15.16-array-2
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-array-2 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516a2 {
	int[] i = {};
	int[] l = (int[]) i;
    }

} {PASS}
Test Case: 15.16-array-3
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-array-3 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516a3 {
	int[] i = {};
	Object o = (Object) i;
    }

} {PASS}
Test Case: 15.16-array-4
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-array-4 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516a4 {
	int[][] i = {};
	Cloneable c = (Cloneable) i;
    }

} {PASS}
Test Case: 15.16-array-5
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-array-5 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516a5 {
	int[][][] i = {};
	java.io.Serializable[] s = (java.io.Serializable[]) i;
    }

} {PASS}
Test Case: 15.16-array-6
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-array-6 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516a6 {
	Object[][][] o = {};
	java.io.Serializable[] s = (java.io.Serializable[]) o;
    }

} {PASS}
Test Case: 15.16-array-7
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-array-7 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516a7 {
	Object o = null;
	Cloneable[] s = (Cloneable[]) o;
    }

} {PASS}
Test Case: 15.16-array-8
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-array-8 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516a8 {
	Error[] o = null;
	Cloneable[][] s = (Cloneable[][]) o;
    }

} {FAIL}
Test Case: 15.16-array-9
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-array-9 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516a9 {
	Cloneable[][] s = (Cloneable[][]) (Object) (Integer[]) (Cloneable)
	                  (int[]) null;
    }

} {PASS}
Test Case: 15.16-array-10
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-array-10 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516a10 {
	class A {}
	class B {}
	B[] b = (B[]) new A[0];
    }

} {FAIL}
Test Case: 15.16-array-11
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-array-11 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516a11 {
	Runnable[] r = (Runnable[]) new String[0];
    }

} {FAIL}
Test Case: 15.16-array-12
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-array-12 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_class T1516a12 {
	interface I {}
	class C {}
	I[] i = (I[]) new C[0];
    }

} {PASS}
Test Case: 15.16-array-13
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-array-13 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_class T1516a13 {
	interface I { int m(); }
	class C { void m() {} }
	I[] i = (I[]) new C[0];
    }

} {PASS}
Test Case: 15.16-array-14
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-array-14 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_class T1516a14 {
	interface I {}
	interface J {}
	I[] i = (I[]) new J[0];
    }

} {PASS}
Test Case: 15.16-array-15
array type casting is legal if a widening or narrowing conversion can be made

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-array-15 { array type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_class T1516a15 {
	interface I { int m(); }
	interface J { void m(); }
	I[] i = (I[]) new J[0];
    }

} {FAIL}
Test Case: 15.16-ref-1
reference type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-ref-1 { reference type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516r1 {
	Object o = null;
	String s = (String) o;
    }

} {PASS}
Test Case: 15.16-ref-2
reference type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-ref-2 { reference type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516r2 {
	String o = null;
	String s = (String) o;
    }

} {PASS}
Test Case: 15.16-ref-3
reference type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-ref-3 { reference type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516r3 {
	String s = null;
	Object o = (Object) s;
    }

} {PASS}
Test Case: 15.16-ref-4
reference type casting is legal if a widening or narrowing conversion can be made

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-ref-4 { reference type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516r4 {
	class A {}
	class B {}
	B b = (B) new A();
    }

} {FAIL}
Test Case: 15.16-ref-5
reference type casting is legal if a widening or narrowing conversion can be made

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-ref-5 { reference type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_main T1516r5 {
	Runnable r = (Runnable) "";
    }

} {FAIL}
Test Case: 15.16-ref-6
reference type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-ref-6 { reference type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_class T1516r6 {
	interface I {}
	class C {}
	I i = (I) new C();
    }

} {PASS}
Test Case: 15.16-ref-7
reference type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-ref-7 { reference type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_class T1516r7 {
	interface I { int m(); }
	class C { void m() {} }
	I i = (I) new C();
    }

} {PASS}
Test Case: 15.16-ref-8
reference type casting is legal if a widening or narrowing conversion can be made

Expected Result: PASS

Regression Test:

tcltest::test 15.16-ref-8 { reference type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_class T1516r8 {
	interface I {}
	interface J {}
	void m(J j) {
	    I i = (I) j;
	}
    }

} {PASS}
Test Case: 15.16-ref-9
reference type casting is legal if a widening or narrowing conversion can be made

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-ref-9 { reference type casting is legal if a widening or
        narrowing conversion can be made } {
    
    empty_class T1516r9 {
	interface I { int m(); }
	interface J { void m(); }
	void m(J j) {
	    I i = (I) j;
	}
    }

} {FAIL}
Test Case: 15.16-semantic-1
To avoid grammar ambiguities, this syntax is accepted; semantics must reject it

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-semantic-1 { To avoid grammar ambiguities, this syntax is
        accepted; semantics must reject it } {
    
    empty_class T1516s1 {
	Object o = (int[]) + 5;
    }

} {FAIL}
Test Case: 15.16-semantic-2
To avoid grammar ambiguities, this syntax is accepted; semantics must reject it

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-semantic-2 { To avoid grammar ambiguities, this syntax is
        accepted; semantics must reject it } {
    
    empty_class T1516s2 {
	Object o = (T1516s2) + "";
    }

} {FAIL}
Test Case: 15.16-semantic-3
To avoid grammar ambiguities, this syntax is accepted; semantics must reject it

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-semantic-3 { To avoid grammar ambiguities, this syntax is
        accepted; semantics must reject it } {
    
    empty_class T1516s3 {
	Object o = (T1516s3 + "") null;
    }

} {FAIL}
Test Case: 15.16-semantic-4
To avoid grammar ambiguities, this syntax is accepted; semantics must reject it

Expected Result: FAIL

Regression Test:

tcltest::test 15.16-semantic-4 { To avoid grammar ambiguities, this syntax is
        accepted; semantics must reject it } {
    
    empty_main T1516s4 {
	// Because (String) is followed by +, it is an expression not a cast
	int String;
	Object o = (String) + 1 + "";
    }

} {FAIL}
Test Case: 15.16-semantic-5
To avoid grammar ambiguities, this syntax is accepted

Expected Result: PASS

Regression Test:

tcltest::test 15.16-semantic-5 { To avoid grammar ambiguities, this syntax is
        accepted } {
    
    empty_main T1516s5 {
	// Because (String) is followed by +, it is an expression not a cast
	final int String = 1;
	switch (String) {
	    case 0:
	    case ((String) + 1 + "") == "2" ? 1 : 0:
	}
    }

} {PASS}

15.17

Directory : tests/jls/expressions/multiplicative-operators


Test Case: 15.17-null-1
null is not a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-null-1 { null is not a primitive numeric type } {
    
    empty_class T1517null1 {int i = 2*null;}

} {FAIL}
Test Case: 15.17-null-2
null is not a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-null-2 { null is not a primitive numeric type } {
    
    empty_class T1517null2 {int i = 2/null;}

} {FAIL}
Test Case: 15.17-null-3
null is not a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-null-3 { null is not a primitive numeric type } {
    
    empty_class T1517null3 {int i = 2%null;}

} {FAIL}
Test Case: 15.17-boolean-1
boolean is not a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-boolean-1 { boolean is not a primitive numeric type } {
    
    empty_class T1517boolean1 {int i = 2*true;}

} {FAIL}
Test Case: 15.17-boolean-2
boolean is not a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-boolean-2 { boolean is not a primitive numeric type } {
    
    empty_class T1517boolean2 {int i = 2/true;}

} {FAIL}
Test Case: 15.17-boolean-3
boolean is not a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-boolean-3 { boolean is not a primitive numeric type } {
    
    empty_class T1517boolean3 {int i = 2%true;}

} {FAIL}
Test Case: 15.17-object-1
Object is not a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-object-1 { Object is not a primitive numeric type } {
    
    empty_class T1517object1 {int i = 2*(new Object());}

} {FAIL}
Test Case: 15.17-object-2
Object is not a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-object-2 { Object is not a primitive numeric type } {
    
    empty_class T1517object2 {int i = 2/(new Object());}

} {FAIL}
Test Case: 15.17-object-3
Object is not a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-object-3 { Object is not a primitive numeric type } {
    
    empty_class T1517object3 {int i = 2%(new Object());}

} {FAIL}
Test Case: 15.17-void-1
void is not a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-void-1 { void is not a primitive numeric type } {
    
    empty_class T1517void1 {int i = 2*System.out.println();}

} {FAIL}
Test Case: 15.17-void-2
void is not a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-void-2 { void is not a primitive numeric type } {
    
    empty_class T1517void2 {int i = 2/System.out.println();}

} {FAIL}
Test Case: 15.17-void-3
void is not a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-void-3 { void is not a primitive numeric type } {
    
    empty_class T1517void3 {int i = 2%System.out.println();}

} {FAIL}
Test Case: 15.17-mult-1
* is a multiplicative operator

Expected Result: PASS

Regression Test:

tcltest::test 15.17-mult-1 { * is a multiplicative operator } {
    
    constant_expression T1517mult1 {2*2 == 4}

} {PASS}
Test Case: 15.17-mult-2
* is a multiplicative operator

Expected Result: PASS

Regression Test:

tcltest::test 15.17-mult-2 { * is a multiplicative operator } {
    
    constant_expression T1517mult2 {2L*2L == 4L}

} {PASS}
Test Case: 15.17-mult-3
* is a multiplicative operator

Expected Result: PASS

Regression Test:

tcltest::test 15.17-mult-3 { * is a multiplicative operator } {
    
    constant_expression T1517mult3 {2.0F * 2.0F == 4.0F}

} {PASS}
Test Case: 15.17-mult-4
* is a multiplicative operator

Expected Result: PASS

Regression Test:

tcltest::test 15.17-mult-4 { * is a multiplicative operator } {
    
    constant_expression T1517mult4 {2.0D * 2.0D == 4.0D}

} {PASS}
Test Case: 15.17-div-1
/ is a multiplicative operator

Expected Result: PASS

Regression Test:

tcltest::test 15.17-div-1 { / is a multiplicative operator } {
    
    constant_expression T1517div1 {2/2 == 1}

} {PASS}
Test Case: 15.17-div-2
/ is a multiplicative operator

Expected Result: PASS

Regression Test:

tcltest::test 15.17-div-2 { / is a multiplicative operator } {
    
    constant_expression T1517div2 {2L/2L == 1L}

} {PASS}
Test Case: 15.17-div-3
/ is a multiplicative operator

Expected Result: PASS

Regression Test:

tcltest::test 15.17-div-3 { / is a multiplicative operator } {
    
    constant_expression T1517div3 {2.0F / 2.0F == 1.0F}

} {PASS}
Test Case: 15.17-div-4
/ is a multiplicative operator

Expected Result: PASS

Regression Test:

tcltest::test 15.17-div-4 { / is a multiplicative operator } {
    
    constant_expression T1517div4 {2.0D / 2.0D == 1.0D}

} {PASS}
Test Case: 15.17-mod-1
% is a multiplicative operator

Expected Result: PASS

Regression Test:

tcltest::test 15.17-mod-1 { % is a multiplicative operator } {
    
    constant_expression T1517mod1 {2%2 == 0}

} {PASS}
Test Case: 15.17-mod-2
% is a multiplicative operator

Expected Result: PASS

Regression Test:

tcltest::test 15.17-mod-2 { % is a multiplicative operator } {
    
    constant_expression T1517mod2 {2L%2L == 0L}

} {PASS}
Test Case: 15.17-mod-3
% is a multiplicative operator

Expected Result: PASS

Regression Test:

tcltest::test 15.17-mod-3 { % is a multiplicative operator } {
    
    constant_expression T1517mod3 {2.0F % 2.0F == 0.0F}

} {PASS}
Test Case: 15.17-mod-4
% is a multiplicative operator

Expected Result: PASS

Regression Test:

tcltest::test 15.17-mod-4 { % is a multiplicative operator } {
    
    constant_expression T1517mod4 {2.0D % 2.0D == 0.0D}

} {PASS}
Test Case: 15.17-type-1
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-type-1 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type1 int {1 * 2L}

} {FAIL}
Test Case: 15.17-type-2
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: PASS

Regression Test:

tcltest::test 15.17-type-2 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type2 long {1 * 2L}

} {PASS}
Test Case: 15.17-type-3
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-type-3 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type3 int {1 / 2L}

} {FAIL}
Test Case: 15.17-type-4
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: PASS

Regression Test:

tcltest::test 15.17-type-4 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type4 long {1 / 2L}

} {PASS}
Test Case: 15.17-type-5
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-type-5 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type5 int {1 % 2L}

} {FAIL}
Test Case: 15.17-type-6
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: PASS

Regression Test:

tcltest::test 15.17-type-6 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type6 long {1 % 2L}

} {PASS}
Test Case: 15.17-type-7
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-type-7 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type7 float {1f * 2D}

} {FAIL}
Test Case: 15.17-type-8
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: PASS

Regression Test:

tcltest::test 15.17-type-8 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type8 double {1f * 2D}

} {PASS}
Test Case: 15.17-type-9
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-type-9 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type9 float {1f / 2D}

} {FAIL}
Test Case: 15.17-type-10
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: PASS

Regression Test:

tcltest::test 15.17-type-10 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type10 double {1f / 2D}

} {PASS}
Test Case: 15.17-type-11
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-type-11 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type11 float {1f % 2D}

} {FAIL}
Test Case: 15.17-type-12
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: PASS

Regression Test:

tcltest::test 15.17-type-12 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type12 double {1f % 2D}

} {PASS}
Test Case: 15.17-type-13
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-type-13 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type13 int {1 * 2D}

} {FAIL}
Test Case: 15.17-type-14
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: PASS

Regression Test:

tcltest::test 15.17-type-14 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type14 double {1 * 2D}

} {PASS}
Test Case: 15.17-type-15
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-type-15 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type15 int {1 / 2D}

} {FAIL}
Test Case: 15.17-type-16
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: PASS

Regression Test:

tcltest::test 15.17-type-16 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type16 double {1 / 2D}

} {PASS}
Test Case: 15.17-type-17
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: FAIL

Regression Test:

tcltest::test 15.17-type-17 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type17 int {1 % 2D}

} {FAIL}
Test Case: 15.17-type-18
The type of a multiplicative expression is the promoted type of its operands.

Expected Result: PASS

Regression Test:

tcltest::test 15.17-type-18 { The type of a multiplicative
        expression is the promoted type of its operands. } {
    
    is_assignable_to T1517type18 double {1 % 2D}

} {PASS}

15.17.1

Directory : tests/jls/expressions/multiplicative-operators/multiplication-operator


Test Case: 15.17.1-commute-1
side-effect-free multiplication is commutative

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-commute-1 { side-effect-free multiplication is commutative } {
    
    constant_expression T15171commute1 {1 * 2 == 2 * 1}

} {PASS}
Test Case: 15.17.1-commute-2
side-effect-free multiplication is commutative

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-commute-2 { side-effect-free multiplication is commutative } {
    
    constant_expression T15171commute2 {1L * 2L == 2L * 1L}

} {PASS}
Test Case: 15.17.1-commute-3
side-effect-free multiplication is commutative

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-commute-3 { side-effect-free multiplication is commutative } {
    
    constant_expression T15171commute3 {1f * 2f == 2f * 1f}

} {PASS}
Test Case: 15.17.1-commute-4
side-effect-free multiplication is commutative

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-commute-4 { side-effect-free multiplication is commutative } {
    
    constant_expression T15171commute4 {1d * 2d == 2d * 1d}

} {PASS}
Test Case: 15.17.1-assoc-1
integer multiplication is associative when all arguments are of the same type

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-assoc-1 { integer multiplication is associative when
        all arguments are of the same type } {
    
    constant_expression T15171assoc1 {(1 * 2) * 3 == 1 * (2 * 3)}

} {PASS}
Test Case: 15.17.1-assoc-2
integer multiplication is not associative when arguments are of different types

Expected Result: FAIL

Regression Test:

tcltest::test 15.17.1-assoc-2 { integer multiplication is not associative
        when arguments are of different types } {
    
    constant_expression T15171assoc2  {(1L * 0x70000000) * 20 == 1L * (0x70000000 * 20)}

} {FAIL}
Test Case: 15.17.1-assoc-3
floating-point multiplication is not associative

Expected Result: FAIL

Regression Test:

tcltest::test 15.17.1-assoc-3 { floating-point multiplication is not associative } {
    
    constant_expression T15171assoc3  {(1e308 * 100.0) * .01 == 1e308 * (100.0 * .01)}

} {FAIL}
Test Case: 15.17.1-assoc-4
multiplication is left-associative

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-assoc-4 { multiplication is left-associative } {
    
    constant_expression T15171assoc4  {1e308 * 100.0 * .01 == (1e308 * 100.0) * .01}

} {PASS}
Test Case: 15.17.1-float-1
NaN * NaN is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-1 { NaN * NaN is NaN } {
    
    constant_expression T15171f1  {Float.NaN * Float.NaN != Float.NaN * Float.NaN}

} {PASS}
Test Case: 15.17.1-float-2
NaN * anything is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-2 { NaN * anything is NaN } {
    
    constant_expression T15171f2 {Float.NaN * 1f != Float.NaN * 1f}

} {PASS}
Test Case: 15.17.1-float-3
the result is positive in floating-point multiplication if both operands have the same sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-3 { the result is positive in floating-point
        multiplication if both operands have the same sign } {
    
    constant_expression T15171f3 {-1f * -2f > 0f} {1f * 2f > 0f}

} {PASS}
Test Case: 15.17.1-float-4
the result is negative in floating-point multiplication if the operands have opposite sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-4 { the result is negative in floating-point
        multiplication if the operands have opposite sign } {
    
    constant_expression T15171f4 {-1f * 2f < 0f} {1f * -2f < 0f}

} {PASS}
Test Case: 15.17.1-float-5
Infinity * 0 is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-5 { Infinity * 0 is NaN } {
    
    constant_expression T15171f5  {Float.POSITIVE_INFINITY * 0f != Float.POSITIVE_INFINITY * 0f}

} {PASS}
Test Case: 15.17.1-float-6
Infinity * finite == Infinity of correct sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-6 { Infinity * finite == Infinity of correct sign } {
    
    constant_expression T15171f6  {Float.NEGATIVE_INFINITY * -1f == Float.POSITIVE_INFINITY}  {Float.POSITIVE_INFINITY * -1f == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.1-float-7
Infinity * Infinity == Infinity of correct sign (Specified in JVMS errata)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-7 { Infinity * Infinity == Infinity of correct sign
        (Specified in JVMS errata) } {
    
    constant_expression T15171f7  {Float.NEGATIVE_INFINITY * Float.NEGATIVE_INFINITY == Float.POSITIVE_INFINITY}  {Float.POSITIVE_INFINITY * Float.POSITIVE_INFINITY == Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.17.1-float-8
Infinity * Infinity == Infinity of correct sign (Specified in JVMS errata)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-8 { Infinity * Infinity == Infinity of correct sign
        (Specified in JVMS errata) } {
    
    constant_expression T15171f8  {Float.NEGATIVE_INFINITY * Float.POSITIVE_INFINITY == Float.NEGATIVE_INFINITY}  {Float.POSITIVE_INFINITY * Float.NEGATIVE_INFINITY == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.1-float-9
Floating-point * produces Infinity for overflow

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-9 { Floating-point * produces Infinity for overflow } {
    
    constant_expression T15171f9  {1.0e30f * 1.0e30f == Float.POSITIVE_INFINITY}  {1.0e30f * -1.0e30f == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.1-float-10
Floating-point * supports gradual underflow

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-10 { Floating-point * supports gradual underflow } {
    
    constant_expression T15171f10  {1e-22f * 1e-22f == 1e-44f}  {1e-22f * -1e-22f == -1e-44f}

} {PASS}
Test Case: 15.17.1-float-11
Floating-point * produces 0 for underflow (check 1/0 to determine sign)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-11 { Floating-point * produces 0 for underflow 
        (check 1/0 to determine sign) } {
    
    constant_expression T15171f11  {1e-30f * 1e-30f == 0}  {1/(1e-30f * 1e-30f) == Float.POSITIVE_INFINITY}  {1e-30f * -1e-30f == 0}  {1/(1e-30f * -1e-30f) == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.1-float-12
Floating-point * works even with denorms

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-12 { Floating-point * works even with denorms } {
    
    constant_expression T15171f12  {1e30f * 1e-40f == 9.999946e-11f}  {1e30f * -1e-40f == -9.999946e-11f}  {1e-40f * -1e30f == -9.999946e-11f}  {-1e-40f * -1e30f == 9.999946e-11f}

} {PASS}
Test Case: 15.17.1-float-13
Floating-point * follows round-to-nearest rules

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-13 { Floating-point * follows round-to-nearest rules } {
    
    constant_expression T15171f13  {0x800001 * 3f == 0x1800004}  {0x800001 * 5f == 0x2800004}  {0x800003 * 5f == 0x2800010}  {0x800002 * 5f == 0x2800008}

} {PASS}
Test Case: 15.17.1-float-14
Floating-point * follows round-to-nearest, even with denorms

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-float-14 { Floating-point * follows round-to-nearest,
        even with denorms } {
    
    constant_expression T15171f14  {2.1302879E-19f * 5.4316195E-20f == 1.1570912E-38f}

} {PASS}
Test Case: 15.17.1-double-1
NaN * NaN is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-1 { NaN * NaN is NaN } {
    
    constant_expression T15171d1  {Double.NaN * Double.NaN != Double.NaN * Double.NaN}

} {PASS}
Test Case: 15.17.1-double-2
NaN * anything is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-2 { NaN * anything is NaN } {
    
    constant_expression T15171d2 {Double.NaN * 1d != Double.NaN * 1d}

} {PASS}
Test Case: 15.17.1-double-3
the result is positive in floating-point multiplication if both operands have the same sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-3 { the result is positive in floating-point
        multiplication if both operands have the same sign } {
    
    constant_expression T15171d3 {-1d * -2d > 0d} {1d * 2d > 0d}

} {PASS}
Test Case: 15.17.1-double-4
the result is negative in floating-point multiplication if the operands have opposite sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-4 { the result is negative in floating-point
        multiplication if the operands have opposite sign } {
    
    constant_expression T15171d4 {-1.0 * 2.0 < 0.0} {1.0 * -2.0 < 0.0}

} {PASS}
Test Case: 15.17.1-double-5
Infinity * 0 is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-5 { Infinity * 0 is NaN } {
    
    constant_expression T15171d5  {Double.POSITIVE_INFINITY * 0d != Double.POSITIVE_INFINITY * 0d}

} {PASS}
Test Case: 15.17.1-double-6
Infinity * finite == Infinity of correct sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-6 { Infinity * finite == Infinity of correct sign } {
    
    constant_expression T15171d6  {Double.NEGATIVE_INFINITY * -1d == Double.POSITIVE_INFINITY}  {Double.POSITIVE_INFINITY * -1d == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.1-double-7
Infinity * Infinity == Infinity of correct sign (Specified in JVMS errata)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-7 { Infinity * Infinity == Infinity of correct sign
        (Specified in JVMS errata) } {
    
    constant_expression T15171d7  {Double.NEGATIVE_INFINITY * Double.NEGATIVE_INFINITY == Double.POSITIVE_INFINITY}  {Double.POSITIVE_INFINITY * Double.POSITIVE_INFINITY == Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.17.1-double-8
Infinity * Infinity == Infinity of correct sign (Specified in JVMS errata)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-8 { Infinity * Infinity == Infinity of correct sign
        (Specified in JVMS errata) } {
    
    constant_expression T15171d8  {Double.NEGATIVE_INFINITY * Double.POSITIVE_INFINITY == Double.NEGATIVE_INFINITY}  {Double.POSITIVE_INFINITY * Double.NEGATIVE_INFINITY == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.1-double-9
Floating-point * produces Infinity for overflow

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-9 { Floating-point * produces Infinity for overflow } {
    
    constant_expression T15171d9  {1.0e160 * 1.0e160 == Double.POSITIVE_INFINITY}  {1.0e160 * -1.0e160 == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.1-double-10
Floating-point * supports gradual underflow

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-10 { Floating-point * supports gradual underflow } {
    
    constant_expression T15171d10  {1e-160 * 1e-160 == 1e-320}  {1e-160 * -1e-160 == -1e-320}

} {PASS}
Test Case: 15.17.1-double-11
Floating-point * produces 0 for underflow (check 1/0 to determine sign)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-11 { Floating-point * produces 0 for underflow 
        (check 1/0 to determine sign) } {
    
    constant_expression T15171d11  {1e-170 * 1e-170 == 0}  {1/(1e-170 * 1e-170) == Double.POSITIVE_INFINITY}  {1e-170 * -1e-170 == 0}  {1/(1e-170 * -1e-170) == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.1-double-12
Floating-point * works even with denorms

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-12 { Floating-point * works even with denorms } {
    
    constant_expression T15171d12  {1e300 * 1e-320 == 9.99988867182683E-21}  {1e300 * -1e-320 == -9.99988867182683E-21}  {1e-320 * -1e300 == -9.99988867182683E-21}  {-1e-320 * -1e300 == 9.99988867182683E-21}

} {PASS}
Test Case: 15.17.1-double-13
Floating-point * follows round-to-nearest rules

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-13 { Floating-point * follows round-to-nearest rules } {
    
    constant_expression T15171d13  {0x10000000000001L * 3d == 0x30000000000004L}  {0x10000000000001L * 5d == 0x50000000000004L}  {0x10000000000003L * 5d == 0x50000000000010L}  {0x10000000000002L * 5d == 0x50000000000008L}

} {PASS}
Test Case: 15.17.1-double-14
Floating-point * follows round-to-nearest, even with denorms, known bug in Sun's javac

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-double-14 { Floating-point * follows round-to-nearest,
        even with denorms, known bug in Sun's javac } {
    
    constant_expression T15171d14  {8.578459548793971E-162 * 2.512418001798401E-147
            == 2.155267619808936E-308}  {6.946121092140867E-162 * 2.669444126910801E-147
            == 1.8542282154226677E-308}

} {PASS}
Test Case: 15.17.1-int-1
overflow in integer multiplication, simply selects low-order bits, possibly changing sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-int-1 { overflow in integer multiplication, simply 
        selects low-order bits, possibly changing sign } {
    
    constant_expression T15171i1 {1234567890 * 10 == -539222988}

} {PASS}
Test Case: 15.17.1-int-2
constant expression with int multiplication

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-int-2 { constant expression with int multiplication } {
    
    constant_expression T15171i2  {-12300000 == 100000 * -123}  {-50000000 == 500 * -100000}

} {PASS}
Test Case: 15.17.1-long-1
constant expression with long multiplication

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-long-1 { constant expression with long multiplication } {
    
    constant_expression T15171l1  {-12192592592745L == 987654321L * -12345}  {-12192592592745L == 12345 * -987654321L}  {12192592592745L == 987654321L * 12345}  {12192592592745L == -987654321L * -12345}

} {PASS}
Test Case: 15.17.1-long-2
constant expression with long multiplication

Expected Result: PASS

Regression Test:

tcltest::test 15.17.1-long-2 { constant expression with long multiplication } {
    
    constant_expression T15171l2 {-2L*(1L<<28) == 0xffffffffe0000000L}

} {PASS}

15.17.2

Directory : tests/jls/expressions/multiplicative-operators/division-operator


Test Case: 15.17.2-assoc-1
division is left-associative

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-assoc-1 { division is left-associative } {
    
    constant_expression T15172assoc1  {10 / 3 / 2 == 1} {10 / (3 / 2) == 10}

} {PASS}
Test Case: 15.17.2-assoc-2
division is left-associative

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-assoc-2 { division is left-associative } {
    
    constant_expression T15172assoc2  {10.0 / 3.0 / 2.0 == 1.6666666666666667}  {10.0 / (3.0 / 2.0) == 6.666666666666667}

} {PASS}
Test Case: 15.17.2-float-1
NaN / NaN is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-1 { NaN / NaN is NaN } {
    
    constant_expression T15172f1  {Float.NaN / Float.NaN != Float.NaN / Float.NaN}

} {PASS}
Test Case: 15.17.2-float-2
NaN / anything is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-2 { NaN / anything is NaN } {
    
    constant_expression T15172f2  {Float.NaN / 1f != Float.NaN / 1f}  {1f / Float.NaN != 1f / Float.NaN}

} {PASS}
Test Case: 15.17.2-float-3
the result is positive in floating-point division if both operands have the same sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-3 { the result is positive in floating-point
        division if both operands have the same sign } {
    
    constant_expression T15172f3 {-1f / -2f > 0f} {1f / 2f > 0f}

} {PASS}
Test Case: 15.17.2-float-4
the result is negative in floating-point division if the operands have opposite sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-4 { the result is negative in floating-point
        division if the operands have opposite sign } {
    
    constant_expression T15172f4 {-1f / 2f < 0f} {1f / -2f < 0f}

} {PASS}
Test Case: 15.17.2-float-5
0 / 0 is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-5 { 0 / 0 is NaN } {
    
    constant_expression T15172f5  {0f / 0f != 0f / 0f}  {-0f / 0f != -0f / 0f}

} {PASS}
Test Case: 15.17.2-float-6
Infinity / finite == Infinity of correct sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-6 { Infinity / finite == Infinity of correct sign } {
    
    constant_expression T15172f6  {Float.NEGATIVE_INFINITY / -1f == Float.POSITIVE_INFINITY}  {Float.POSITIVE_INFINITY / -1f == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-float-7
Infinity / Infinity is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-7 { Infinity / Infinity is NaN } {
    
    constant_expression T15172f7  {Float.NEGATIVE_INFINITY / Float.NEGATIVE_INFINITY !=
            Float.NEGATIVE_INFINITY / Float.NEGATIVE_INFINITY}  {Float.POSITIVE_INFINITY / Float.NEGATIVE_INFINITY !=
            Float.POSITIVE_INFINITY / Float.NEGATIVE_INFINITY}  {Float.NEGATIVE_INFINITY / Float.POSITIVE_INFINITY !=
            Float.NEGATIVE_INFINITY / Float.POSITIVE_INFINITY}  {Float.POSITIVE_INFINITY / Float.POSITIVE_INFINITY !=
            Float.POSITIVE_INFINITY / Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-float-8
Finite / Infinity == Signed zero (check 1/0 to determine sign)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-8 { Finite / Infinity == Signed zero
        (check 1/0 to determine sign) } {
    
    constant_expression T15172f8  {1f / Float.NEGATIVE_INFINITY == 0}  {1/(1f / Float.NEGATIVE_INFINITY) == Float.NEGATIVE_INFINITY}  {1f / Float.POSITIVE_INFINITY == 0}  {1/(1f / Float.POSITIVE_INFINITY) == Float.POSITIVE_INFINITY}  {-1f / Float.NEGATIVE_INFINITY == 0}  {1/(-1f / Float.NEGATIVE_INFINITY) == Float.POSITIVE_INFINITY}  {-1f / Float.POSITIVE_INFINITY == 0}  {1/(-1f / Float.POSITIVE_INFINITY) == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-float-9
Finite / 0 == Signed infinity

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-9 { Finite / 0 == Signed infinity } {
    
    constant_expression T15172f9  {1f / 0f == Float.POSITIVE_INFINITY}  {-1f / 0f == Float.NEGATIVE_INFINITY}  {1f / -0f == Float.NEGATIVE_INFINITY}  {-1f / -0f == Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-float-10
0 / non-zero Finite == Signed zero (check 1/0 to determine sign)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-10 { 0 / non-zero Finite == Signed zero
        (check 1/0 to determine sign) } {
    
    constant_expression T15172f10  {0f / 1f == 0} {1/(0f / 1f) == Float.POSITIVE_INFINITY}  {-0f / 1f == 0} {1/(-0f / 1f) == Float.NEGATIVE_INFINITY}  {0f / -1f == 0} {1/(0f / -1f) == Float.NEGATIVE_INFINITY}  {-0f / -1f == 0} {1/(-0f / -1f) == Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-float-11
Floating-point / produces Infinity for overflow

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-11 { Floating-point / produces Infinity for overflow } {
    
    constant_expression T15172f11  {1.0e30f / 1.0e-30f == Float.POSITIVE_INFINITY}  {1.0e30f / -1.0e-30f == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-float-12
Floating-point / supports gradual underflow

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-12 { Floating-point / supports gradual underflow } {
    
    constant_expression T15172f12  {1e-22f / 1e22f == 1e-44f}  {1e-22f / -1e22f == -1e-44f}

} {PASS}
Test Case: 15.17.2-float-13
Floating-point / produces 0 for underflow (check 1/0 to determine sign)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-13 { Floating-point / produces 0 for underflow 
        (check 1/0 to determine sign) } {
    
    constant_expression T15172f13  {1e-30f / 1e30f == 0}  {1/(1e-30f / 1e30f) == Float.POSITIVE_INFINITY}  {1e-30f / -1e30f == 0}  {1/(1e-30f / -1e30f) == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-float-14
Floating-point / works even with denorms

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-14 { Floating-point / works even with denorms } {
    
    constant_expression T15172f14  {1e-10f / 1e-40f == 1.0000054E30f}  {1e-10f / -1e-40f == -1.0000054E30f}  {1e-40f / -1e-10f == -9.999946E-31f}  {-1e-40f / -1e-10f == 9.999946E-31f}

} {PASS}
Test Case: 15.17.2-float-15
Floating-point / follows round-to-nearest rules

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-15 { Floating-point / follows round-to-nearest rules } {
    
    constant_expression T15172f15  {0x1800004 / 3f == 0x800001}  {0x1800008 / 3f == 0x800003}  {7e-45f / 2f == 2.8e-45f}  {9.8e-45f / 2f == 5.6e-45f}

} {PASS}
Test Case: 15.17.2-float-16
Floating-point constants must be evaluated in strictfp mode

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-float-16 { Floating-point constants must be evaluated
        in strictfp mode } {
    
    constant_expression T15172f16 {4.294968e9f / 256 / 16777216 == 1.0000001f}

} {PASS}
Test Case: 15.17.2-double-1
NaN / NaN is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-1 { NaN / NaN is NaN } {
    
    constant_expression T15172d1  {Double.NaN / Double.NaN != Double.NaN / Double.NaN}

} {PASS}
Test Case: 15.17.2-double-2
NaN / anything is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-2 { NaN / anything is NaN } {
    
    constant_expression T15172d2  {Double.NaN / 1d != Double.NaN / 1d}  {1d / Double.NaN != 1d / Double.NaN}

} {PASS}
Test Case: 15.17.2-double-3
the result is positive in floating-point division if both operands have the same sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-3 { the result is positive in floating-point
        division if both operands have the same sign } {
    
    constant_expression T15172d3 {-1d / -2d > 0d} {1d / 2d > 0d}

} {PASS}
Test Case: 15.17.2-double-4
the result is negative in floating-point division if the operands have opposite sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-4 { the result is negative in floating-point
        division if the operands have opposite sign } {
    
    constant_expression T15172d4 {-1.0 / 2.0 < 0.0} {1.0 / -2.0 < 0.0}

} {PASS}
Test Case: 15.17.2-double-5
0 / 0 is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-5 { 0 / 0 is NaN } {
    
    constant_expression T15172d5  {0d / 0d != 0d / 0d}  {-0d / 0d != -0d / 0d}

} {PASS}
Test Case: 15.17.2-double-6
Infinity / finite == Infinity of correct sign

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-6 { Infinity / finite == Infinity of correct sign } {
    
    constant_expression T15172d6  {Double.NEGATIVE_INFINITY / -1d == Double.POSITIVE_INFINITY}  {Double.POSITIVE_INFINITY / -1d == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-double-7
Infinity / Infinity is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-7 { Infinity / Infinity is NaN } {
    
    constant_expression T15172d7  {Double.NEGATIVE_INFINITY / Double.NEGATIVE_INFINITY !=
            Double.NEGATIVE_INFINITY / Double.NEGATIVE_INFINITY}  {Double.POSITIVE_INFINITY / Double.NEGATIVE_INFINITY !=
            Double.POSITIVE_INFINITY / Double.NEGATIVE_INFINITY}  {Double.NEGATIVE_INFINITY / Double.POSITIVE_INFINITY !=
            Double.NEGATIVE_INFINITY / Double.POSITIVE_INFINITY}  {Double.POSITIVE_INFINITY / Double.POSITIVE_INFINITY !=
            Double.POSITIVE_INFINITY / Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-double-8
Finite / Infinity == Signed zero (check 1/0 to determine sign)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-8 { Finite / Infinity == Signed zero
        (check 1/0 to determine sign) } {
    
    constant_expression T15172d8  {1d / Double.NEGATIVE_INFINITY == 0}  {1/(1d / Double.NEGATIVE_INFINITY) == Double.NEGATIVE_INFINITY}  {1d / Double.POSITIVE_INFINITY == 0}  {1/(1d / Double.POSITIVE_INFINITY) == Double.POSITIVE_INFINITY}  {-1d / Double.NEGATIVE_INFINITY == 0}  {1/(-1d / Double.NEGATIVE_INFINITY) == Double.POSITIVE_INFINITY}  {-1d / Double.POSITIVE_INFINITY == 0}  {1/(-1d / Double.POSITIVE_INFINITY) == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-double-9
Finite / 0 == Signed infinity

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-9 { Finite / 0 == Signed infinity } {
    
    constant_expression T15172d9  {1d / 0d == Double.POSITIVE_INFINITY}  {-1d / 0d == Double.NEGATIVE_INFINITY}  {1d / -0d == Double.NEGATIVE_INFINITY}  {-1d / -0d == Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-double-10
0 / non-zero Finite == Signed zero (check 1/0 to determine sign)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-10 { 0 / non-zero Finite == Signed zero
        (check 1/0 to determine sign) } {
    
    constant_expression T15172d10  {0d / 1d == 0} {1/(0d / 1d) == Double.POSITIVE_INFINITY}  {-0d / 1d == 0} {1/(-0d / 1d) == Double.NEGATIVE_INFINITY}  {0d / -1d == 0} {1/(0d / -1d) == Double.NEGATIVE_INFINITY}  {-0d / -1d == 0} {1/(-0d / -1d) == Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-double-11
Floating-point / produces Infinity for overflow

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-11 { Floating-point / produces Infinity for overflow } {
    
    constant_expression T15172d11  {1.0e160 / 1.0e-160 == Double.POSITIVE_INFINITY}  {1.0e160 / -1.0e-160 == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-double-12
Floating-point / supports gradual underflow

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-12 { Floating-point / supports gradual underflow } {
    
    constant_expression T15172d12  {1e-160 / 1e160 == 1e-320}  {1e-160 / -1e160 == -1e-320}

} {PASS}
Test Case: 15.17.2-double-13
Floating-point / produces 0 for underflow (check 1/0 to determine sign)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-13 { Floating-point / produces 0 for underflow 
        (check 1/0 to determine sign) } {
    
    constant_expression T15172d13  {1e-170 / 1e170 == 0}  {1/(1e-170 / 1e170) == Double.POSITIVE_INFINITY}  {1e-170 / -1e170 == 0}  {1/(1e-170 / -1e170) == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.2-double-14
Floating-point / works even with denorms

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-14 { Floating-point / works even with denorms } {
    
    constant_expression T15172d14  {1e-20 / 1e-320 == 1.0000111329412579e300}  {1e-20 / -1e-320 == -1.0000111329412579e300}  {1e-320 / -1e-20 == -9.999888671826831E-301}  {-1e-320 / -1e-20 == 9.999888671826831E-301}

} {PASS}
Test Case: 15.17.2-double-15
Floating-point / follows round-to-nearest rules

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-double-15 { Floating-point / follows round-to-nearest rules } {
    
    constant_expression T15172d15  {0x30000000000004L / 3d == 0x10000000000001L}  {0x30000000000008L / 3d == 0x10000000000003L}  {2.5e-323 / 2d == 1e-323}  {3.5e-323 / 2d == 2e-323}

} {PASS}
Test Case: 15.17.2-int-1
integer division rounds to 0

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-int-1 { integer division rounds to 0 } {
    
    constant_expression T15172i1  {5 / 3 == 1}  {5 / -3 == -1}  {-5 / 3 == -1}  {-5 / -3 == 1}

} {PASS}
Test Case: 15.17.2-int-2
MIN_INT / -1 overflows

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-int-2 { MIN_INT / -1 overflows } {
    
    constant_expression T15172i2 {0x80000000 / -1 == 0x80000000}

} {PASS}
Test Case: 15.17.2-int-3
Not a compile-time error to divide by constant integer 0

Expected Result: OK

Regression Test:

tcltest::test 15.17.2-int-3 { Not a compile-time error to divide by
        constant integer 0 } {
    
    ok_pass_or_warn [empty_class T15172i3 {int i = 1 / 0;}]

} {OK}
Test Case: 15.17.2-long-1
integer division rounds to 0

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-long-1 { integer division rounds to 0 } {
    
    constant_expression T15172l1  {5L / 3L == 1L}  {5L / -3L == -1L}  {-5L / 3L == -1L}  {-5L / -3L == 1L}

} {PASS}
Test Case: 15.17.2-long-2
MIN_LONG / -1 overflows

Expected Result: PASS

Regression Test:

tcltest::test 15.17.2-long-2 { MIN_LONG / -1 overflows } {
    
    constant_expression T15172l2 {0x8000000000000000L / -1L == 0x8000000000000000L}

} {PASS}
Test Case: 15.17.2-long-3
Not a compile-time error to divide by constant integer 0

Expected Result: OK

Regression Test:

tcltest::test 15.17.2-long-3 { Not a compile-time error to divide by
        constant integer 0 } {
    
    ok_pass_or_warn [empty_class T15172l3 {long l = 1L / 0L;}]

} {OK}

15.17.3

Directory : tests/jls/expressions/multiplicative-operators/remainder-operator


Test Case: 15.17.3-assoc-1
remainder is left-associative

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-assoc-1 { remainder is left-associative } {
    
    constant_expression T15173assoc1  {10 % 4 % 3 == 2} {10 % (4 % 3) == 0}

} {PASS}
Test Case: 15.17.3-assoc-2
remainder is left-associative

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-assoc-2 { remainder is left-associative } {
    
    constant_expression T15173assoc2  {10.0 % 4.0 % 3.0 == 2.0}  {10.0 % (4.0 % 3.0) == 0.0}

} {PASS}
Test Case: 15.17.3-float-1
NaN % NaN is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-1 { NaN % NaN is NaN } {
    
    constant_expression T15173f1  {Float.NaN % Float.NaN != Float.NaN % Float.NaN}

} {PASS}
Test Case: 15.17.3-float-2
NaN % anything is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-2 { NaN % anything is NaN } {
    
    constant_expression T15173f2  {Float.NaN % 1f != Float.NaN % 1f}  {1f % Float.NaN != 1f % Float.NaN}

} {PASS}
Test Case: 15.17.3-float-3
the result is positive in floating-point remainder if the dividend is positive

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-3 { the result is positive in floating-point
        remainder if the dividend is positive } {
    
    constant_expression T15173f3 {3f % -2f > 0f} {3f % 2f > 0f}

} {PASS}
Test Case: 15.17.3-float-4
the result is negative in floating-point remainder if the dividend is negative

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-4 { the result is negative in floating-point
        remainder if the dividend is negative } {
    
    constant_expression T15173f4 {-3f % 2f < 0f} {-3f % -2f < 0f}

} {PASS}
Test Case: 15.17.3-float-5
0 % 0 is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-5 { 0 % 0 is NaN } {
    
    constant_expression T15173f5  {0f % 0f != 0f % 0f}  {-0f % 0f != -0f % 0f}

} {PASS}
Test Case: 15.17.3-float-6
Infinity % finite is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-6 { Infinity % finite is NaN } {
    
    constant_expression T15173f6  {Float.NEGATIVE_INFINITY % -1f != Float.NEGATIVE_INFINITY % -1f}  {Float.POSITIVE_INFINITY % -1f != Float.POSITIVE_INFINITY % -1f}

} {PASS}
Test Case: 15.17.3-float-7
Infinity % Infinity is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-7 { Infinity % Infinity is NaN } {
    
    constant_expression T15173f7  {Float.NEGATIVE_INFINITY % Float.NEGATIVE_INFINITY !=
            Float.NEGATIVE_INFINITY % Float.NEGATIVE_INFINITY}  {Float.POSITIVE_INFINITY % Float.NEGATIVE_INFINITY !=
            Float.POSITIVE_INFINITY % Float.NEGATIVE_INFINITY}  {Float.NEGATIVE_INFINITY % Float.POSITIVE_INFINITY !=
            Float.NEGATIVE_INFINITY % Float.POSITIVE_INFINITY}  {Float.POSITIVE_INFINITY % Float.POSITIVE_INFINITY !=
            Float.POSITIVE_INFINITY % Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.17.3-float-8
Finite % Infinity == dividend

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-8 { Finite % Infinity == dividend } {
    
    constant_expression T15173f8  {1f % Float.NEGATIVE_INFINITY == 1f}  {1f % Float.POSITIVE_INFINITY == 1f}  {-1f % Float.NEGATIVE_INFINITY == -1f}  {-1f % Float.POSITIVE_INFINITY == -1f}

} {PASS}
Test Case: 15.17.3-float-9
Finite % 0 is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-9 { Finite % 0 is NaN } {
    
    constant_expression T15173f9  {1f % 0f != 1f % 0f}  {-1f % 0f != -1f % 0f}  {1f % -0f != 1f % -0f}  {-1f % -0f != -1f % -0f}

} {PASS}
Test Case: 15.17.3-float-10
0 % non-zero Finite == Dividend (check 1/0 to determine sign)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-10 { 0 % non-zero Finite == Dividend
        (check 1/0 to determine sign) } {
    
    constant_expression T15173f10  {0f % 1f == 0} {1/(0f % 1f) == Float.POSITIVE_INFINITY}  {-0f % 1f == 0} {1/(-0f % 1f) == Float.NEGATIVE_INFINITY}  {0f % -1f == 0} {1/(0f % -1f) == Float.POSITIVE_INFINITY}  {-0f % -1f == 0} {1/(-0f % -1f) == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.3-float-11
0 % Infinity == Dividend (check 1/0 to determine sign)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-11 { 0 % Infinity == Dividend
        (check 1/0 to determine sign) } {
    
    constant_expression T15173f11  {0f % Float.POSITIVE_INFINITY == 0}  {1/(0f % Float.POSITIVE_INFINITY) == Float.POSITIVE_INFINITY}  {-0f % Float.POSITIVE_INFINITY == 0}  {1/(-0f % Float.POSITIVE_INFINITY) == Float.NEGATIVE_INFINITY}  {0f % Float.NEGATIVE_INFINITY == 0}  {1/(0f % Float.NEGATIVE_INFINITY) == Float.POSITIVE_INFINITY}  {-0f % Float.NEGATIVE_INFINITY == 0}  {1/(-0f % Float.NEGATIVE_INFINITY) == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.3-float-12
Floating-point % cannot overflow

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-12 { Floating-point % cannot overflow } {
    
    constant_expression T15173f12  {1e30f % 1e-30f == 8.166816e-31f}  {-1e30f % -1e-30f == -8.166816e-31f}

} {PASS}
Test Case: 15.17.3-float-13
Floating-point % works even with denorms

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-13 { Floating-point % works even with denorms } {
    
    constant_expression T15173f13  {1e30f % 1e-40f == 7.121e-42f}  {1e30f % -1e-40f == 7.121e-42f}  {-1e-40f % 1e30f == -1e-40f}  {-1e-40f % -1e30f == -1e-40f}

} {PASS}
Test Case: 15.17.3-float-14
Example cases

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-float-14 { Example cases } {
    
    constant_expression T15173f14  {5.0f % 3.0f == 2.0f}  {5.0f % -3.0f == 2.0f}  {-5.0f % 3.0f == -2.0f}  {-5.0f % -3.0f == -2.0f}

} {PASS}
Test Case: 15.17.3-double-1
NaN % NaN is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-1 { NaN % NaN is NaN } {
    
    constant_expression T15173d1  {Double.NaN % Double.NaN != Double.NaN % Double.NaN}

} {PASS}
Test Case: 15.17.3-double-2
NaN % anything is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-2 { NaN % anything is NaN } {
    
    constant_expression T15173d2  {Double.NaN % 1d != Double.NaN % 1d}  {1d % Double.NaN != 1d % Double.NaN}

} {PASS}
Test Case: 15.17.3-double-3
the result is positive in floating-point remainder if the dividend is positive

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-3 { the result is positive in floating-point
        remainder if the dividend is positive } {
    
    constant_expression T15173d3 {3d % -2d > 0d} {3d % 2d > 0d}

} {PASS}
Test Case: 15.17.3-double-4
the result is negative in floating-point remainder if the dividend is negative

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-4 { the result is negative in floating-point
        remainder if the dividend is negative } {
    
    constant_expression T15173d4 {-3d % 2d < 0d} {-3d % -2d < 0d}

} {PASS}
Test Case: 15.17.3-double-5
0 % 0 is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-5 { 0 % 0 is NaN } {
    
    constant_expression T15173d5  {0d % 0d != 0d % 0d}  {-0d % 0d != -0d % 0d}

} {PASS}
Test Case: 15.17.3-double-6
Infinity % finite is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-6 { Infinity % finite is NaN } {
    
    constant_expression T15173d6  {Double.NEGATIVE_INFINITY % -1d != Double.NEGATIVE_INFINITY % -1d}  {Double.POSITIVE_INFINITY % -1d != Double.POSITIVE_INFINITY % -1d}

} {PASS}
Test Case: 15.17.3-double-7
Infinity % Infinity is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-7 { Infinity % Infinity is NaN } {
    
    constant_expression T15173d7  {Double.NEGATIVE_INFINITY % Double.NEGATIVE_INFINITY !=
            Double.NEGATIVE_INFINITY % Double.NEGATIVE_INFINITY}  {Double.POSITIVE_INFINITY % Double.NEGATIVE_INFINITY !=
            Double.POSITIVE_INFINITY % Double.NEGATIVE_INFINITY}  {Double.NEGATIVE_INFINITY % Double.POSITIVE_INFINITY !=
            Double.NEGATIVE_INFINITY % Double.POSITIVE_INFINITY}  {Double.POSITIVE_INFINITY % Double.POSITIVE_INFINITY !=
            Double.POSITIVE_INFINITY % Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.17.3-double-8
Finite % Infinity == dividend

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-8 { Finite % Infinity == dividend } {
    
    constant_expression T15173d8  {1d % Double.NEGATIVE_INFINITY == 1d}  {1d % Double.POSITIVE_INFINITY == 1d}  {-1d % Double.NEGATIVE_INFINITY == -1d}  {-1d % Double.POSITIVE_INFINITY == -1d}

} {PASS}
Test Case: 15.17.3-double-9
Finite % 0 is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-9 { Finite % 0 is NaN } {
    
    constant_expression T15173d9  {1d % 0d != 1d % 0d}  {-1d % 0d != -1d % 0d}  {1d % -0d != 1d % -0d}  {-1d % -0d != -1d % -0d}

} {PASS}
Test Case: 15.17.3-double-10
0 % non-zero Finite == Dividend (check 1/0 to determine sign)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-10 { 0 % non-zero Finite == Dividend
        (check 1/0 to determine sign) } {
    
    constant_expression T15173d10  {0d % 1d == 0} {1/(0d % 1d) == Double.POSITIVE_INFINITY}  {-0d % 1d == 0} {1/(-0d % 1d) == Double.NEGATIVE_INFINITY}  {0d % -1d == 0} {1/(0d % -1d) == Double.POSITIVE_INFINITY}  {-0d % -1d == 0} {1/(-0d % -1d) == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.3-double-11
0 % Infinity == Dividend (check 1/0 to determine sign)

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-11 { 0 % Infinity == Dividend
        (check 1/0 to determine sign) } {
    
    constant_expression T15173d11  {0d % Double.POSITIVE_INFINITY == 0}  {1/(0d % Double.POSITIVE_INFINITY) == Double.POSITIVE_INFINITY}  {-0d % Double.POSITIVE_INFINITY == 0}  {1/(-0d % Double.POSITIVE_INFINITY) == Double.NEGATIVE_INFINITY}  {0d % Double.NEGATIVE_INFINITY == 0}  {1/(0d % Double.NEGATIVE_INFINITY) == Double.POSITIVE_INFINITY}  {-0d % Double.NEGATIVE_INFINITY == 0}  {1/(-0d % Double.NEGATIVE_INFINITY) == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.17.3-double-12
Floating-point % cannot overflow

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-12 { Floating-point % cannot overflow } {
    
    constant_expression T15173d12  {1e300 % 1e-300 == 4.891554850853602e-301}  {-1e300 % -1e-300 == -4.891554850853602e-301}

} {PASS}
Test Case: 15.17.3-double-13
Floating-point % works even with denorms

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-13 { Floating-point % works even with denorms } {
    
    constant_expression T15173d13  {1e300 % 1e-320 == 3.16e-321}  {1e300 % -1e-320 == 3.16e-321}  {-1e-320 % 1e300 == -1e-320}  {-1e-320 % -1e300 == -1e-320}

} {PASS}
Test Case: 15.17.3-double-14
Example cases

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-double-14 { Example cases } {
    
    constant_expression T15173d14  {5.0 % 3.0 == 2.0}  {5.0 % -3.0 == 2.0}  {-5.0 % 3.0 == -2.0}  {-5.0 % -3.0 == -2.0}

} {PASS}
Test Case: 15.17.3-int-1
Example cases

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-int-1 { Example cases } {
    
    constant_expression T15173i1  {5 % 3 == 2}  {5 % -3 == 2}  {-5 % 3 == -2}  {-5 % -3 == -2}

} {PASS}
Test Case: 15.17.3-int-2
(a/b)*b+(a%b) == a

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-int-2 { (a/b)*b+(a%b) == a } {
    
    constant_expression T15173i2  {(0x80000000 / -1) * -1 + (0x80000000 % -1) == 0x80000000}  {(5 / 3) * 3 + (5 % 3) == 5}  {(5 / -3) * -3 + (5 % -3) == 5}  {(-5 / 3) * 3 + (-5 % 3) == -5}  {(-5 / -3) * -3 + (-5 % -3) == -5}

} {PASS}
Test Case: 15.17.3-int-3
Not a compile-time error to divide by constant integer 0

Expected Result: OK

Regression Test:

tcltest::test 15.17.3-int-3 { Not a compile-time error to divide by
        constant integer 0 } {
    
    ok_pass_or_warn [empty_class T15173i3 {int i = 1 / 0;}]

} {OK}
Test Case: 15.17.3-int-4
MIN_INT % -1 == 0

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-int-4 { MIN_INT % -1 == 0 } {
    
    constant_expression T15173i4 {0x80000000 % -1 == 0}

} {PASS}
Test Case: 15.17.3-long-1
Example cases

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-long-1 { Example cases } {
    
    constant_expression T15173l1  {5L % 3L == 2L}  {5L % -3L == 2L}  {-5L % 3L == -2L}  {-5L % -3L == -2L}

} {PASS}
Test Case: 15.17.3-long-2
(a/b)*b+(a%b) == a

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-long-2 { (a/b)*b+(a%b) == a } {
    
    constant_expression T15173l2  {(0x8000000000000000L / -1L) * -1L + (0x8000000000000000L % -1L)
            == 0x8000000000000000L}  {(5L / 3L) * 3L + (5L % 3L) == 5L}  {(5L / -3L) * -3L + (5L % -3L) == 5L}  {(-5L / 3L) * 3L + (-5L % 3L) == -5L}  {(-5L / -3L) * -3L + (-5L % -3L) == -5L}

} {PASS}
Test Case: 15.17.3-long-3
Not a compile-time error to divide by constant integer 0

Expected Result: OK

Regression Test:

tcltest::test 15.17.3-long-3 { Not a compile-time error to divide by
        constant integer 0 } {
    
    ok_pass_or_warn [empty_class T15173l3 {long l = 1L % 0L;}]

} {OK}
Test Case: 15.17.3-long-4
MIN_LONG % -1 == 0

Expected Result: PASS

Regression Test:

tcltest::test 15.17.3-long-4 { MIN_LONG % -1 == 0 } {
    
    constant_expression T15173l4 {0x8000000000000000L % -1L == 0L}

} {PASS}

15.18

Directory : tests/jls/expressions/additive-operators


Test Case: 15.18-null-1
at least one argument of + should be String, or else both must be primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.18-null-1 { at least one argument of + should be String,
        or else both must be primitive numeric type } {
    
    # Sun seems to have relaxed this so that null is used as type String
    is_assignable_to T1518n1 String {null + null}

} {FAIL}
Test Case: 15.18-null-2
both arguments to - must be of a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.18-null-2 { both arguments to - must be of a
        primitive numeric type } {
    
    is_assignable_to T1518n2 String {null - null}

} {FAIL}
Test Case: 15.18-boolean-1
at least one argument of + should be String, or else both must be primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.18-boolean-1 { at least one argument of + should be String,
        or else both must be primitive numeric type } {
    
    is_assignable_to T1518b1 boolean {true + false}

} {FAIL}
Test Case: 15.18-boolean-2
both arguments to - must be of a primitive numeric type

Expected Result: FAIL

Regression Test:

tcltest::test 15.18-boolean-2 { both arguments to - must be of a
        primitive numeric type } {
    
    is_assignable_to T1518b2 boolean {5 - false}

} {FAIL}

15.18.1

Directory : tests/jls/expressions/additive-operators/string-concatenation-operator


Test Case: 15.18.1-1
String + requires a String argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.18.1-1 { String + requires a String argument } {
    
    # Sun seems to have relaxed this so that null is used as type String implicitly
    is_assignable_to T151811 String {null + 1} String {1 + null}

} {FAIL}
Test Case: 15.18.1-2
(String)null denotes String concatenation

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-2 { (String)null denotes String concatenation } {
    
    is_assignable_to T151812 String {(String)null + 1} String {1 + (String)null}

} {PASS}
Test Case: 15.18.1-3
(String)null + null denotes String concatenation

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-3 { (String)null + null denotes String concatenation } {
    
    is_assignable_to T151813  String {null + (String)null}  String {(String)null + null}  String {(String)null + (String)null}

} {PASS}
Test Case: 15.18.1-4
void + String is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.18.1-4 { void + String is invalid } {
    
    is_assignable_to T151814  String {System.out.println() + ""}  String {"" + System.out.println()}

} {FAIL}
Test Case: 15.18.1-5
+ operator should be left-associative

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-5 { + operator should be left-associative } {
    
    constant_expression T151815  {1 + 2 + " fiddlers" == "3 fiddlers"}  {"fiddlers " + 1 + 2 == "fiddlers 12"}

} {PASS}
Test Case: 15.18.1-6
+ operator and integer constants

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-6 { + operator and integer constants } {
    
    constant_expression T151816  {"-12300000" == "" + -12300000}  {"-12300000,-50000000" ==
            -12300000 + "," + -50000000}

} {PASS}
Test Case: 15.18.1-7
+ operator and long constants

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-7 { + operator and long constants } {
    
    constant_expression T151817  {"-12192592592745" == "" + -12192592592745L}  {"-12192592592745,-12192592592745" ==
            -12192592592745L + "," + -12192592592745L}

} {PASS}
Test Case: 15.18.1-float-1
convert denormalized float to String

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-float-1 { convert denormalized float to String } {
    
    constant_expression T15181f1 {"" + 1e-44f == "9.8E-45"}

} {PASS}
Test Case: 15.18.1-float-2
convert NaN float to String

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-float-2 { convert NaN float to String } {
    
    constant_expression T15181f2 {"" + Float.NaN == "NaN"} {"" + (-Float.NaN) == "NaN"}

} {PASS}
Test Case: 15.18.1-float-3
convert Infinity float to String

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-float-3 { convert Infinity float to String } {
    
    constant_expression T15181f3 {"" + Float.NEGATIVE_INFINITY == "-Infinity"}  {"" + Float.POSITIVE_INFINITY == "Infinity"}

} {PASS}
Test Case: 15.18.1-float-4
convert min float to String

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-float-4 { convert min float to String } {
    
    constant_expression T15181f4 {"" +  Float.MIN_VALUE == "1.4E-45"}

} {PASS}
Test Case: 15.18.1-float-5
convert max float to String

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-float-5 { convert max float to String } {
    
    constant_expression T15181f5 {"" +  Float.MAX_VALUE == "3.4028235E38"}

} {PASS}
Test Case: 15.18.1-float-6
conversion of float to String must use as few digits after decimal as produce the same float again by rounding

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-float-6 { conversion of float to String must use as few
        digits after decimal as produce the same float again by rounding } {
    
    constant_expression T15181f6  {"" + 123456768f == "1.2345677E8"}  {"" + 123456776f == "1.23456776E8"}  {"" + 123456784f == "1.2345678E8"}  {"" + 123456792f == "1.2345679E8"}  {"" + 123456800f == "1.234568E8"}

} {PASS}
Test Case: 15.18.1-float-7
conversion of float to String switches from plain to exponent at 1e7

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-float-7 { conversion of float to String switches from
        plain to exponent at 1e7 } {
    
    constant_expression T15181f7  {"" + 9999999f == "9999999.0"}  {"" + 10000000f == "1.0E7"}

} {PASS}
Test Case: 15.18.1-float-8
conversion of float to String switches from plain to exponent at 1e-3. Trailing 0's are not permitted.

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-float-8 { conversion of float to String switches from
        plain to exponent at 1e-3. Trailing 0's are not permitted. } {
    
    constant_expression T15181f8  {"" + .001f == "0.001"}  {"" + .000999998f == "9.99998E-4"}

} {PASS}
Test Case: 15.18.1-float-9
conversion of float to String produces the shortest string that parses back to the same float

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-float-9 { conversion of float to String produces the
        shortest string that parses back to the same float } {
    
    constant_expression T15181f9 {"" + 9.9999998e22f == "1.0E23"}

} {PASS}
Test Case: 15.18.1-float-10
One of the longest possible Strings possible when converting floats

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-float-10 { One of the longest possible Strings
        possible when converting floats } {
    
    constant_expression T15181f10  {"" + -1.00000126e-10f == "-1.00000126E-10"}

} {PASS}
Test Case: 15.18.1-float-11
conversion of float to String prints the closest decimal string to the exact value, even on denorms

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-float-11 { conversion of float to String prints the
        closest decimal string to the exact value, even on denorms } {
    
    constant_expression T15181f11  {"" + 1e-43f == "9.9E-44"}

} {PASS}
Test Case: 15.18.1-float-12
conversion of float to String must use as few digits after decimal as produce the same float again by rounding

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-float-12 { conversion of float to String must use as few
        digits after decimal as produce the same float again by rounding } {
    
    constant_expression T15181f12 {"" + 4294967808f == "4.294968E9"}

} {PASS}
Test Case: 15.18.1-double-1
convert denormalized double to String

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-1 { convert denormalized double to String } {
    
    constant_expression T15181d1 {"" + 1e-315 == "1.0E-315"}

} {PASS}
Test Case: 15.18.1-double-2
convert Nan double to String

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-2 { convert Nan double to String } {
    
    constant_expression T15181d2 {"" + Double.NaN == "NaN"} {"" + (-Double.NaN) == "NaN"}

} {PASS}
Test Case: 15.18.1-double-3
convert Infinity double to String

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-3 { convert Infinity double to String } {
    
    constant_expression T15181d3 {"" + Double.NEGATIVE_INFINITY == "-Infinity"}  {"" + Double.POSITIVE_INFINITY == "Infinity"}

} {PASS}
Test Case: 15.18.1-double-4
convert min double to String

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-4 { convert min double to String } {
    
    constant_expression T15181d4 {"" + Double.MIN_VALUE == "4.9E-324"}

} {PASS}
Test Case: 15.18.1-double-5
convert max double to String

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-5 { convert max double to String } {
    
    constant_expression T15181d5 {"" + Double.MAX_VALUE == "1.7976931348623157E308"}

} {PASS}
Test Case: 15.18.1-double-6
NaN != 12.0

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-6 { NaN != 12.0 } {
    
    constant_expression T15181d6 {"" + Double.NaN == "NaN"}  {"" + 12.0 == "12.0"}

} {PASS}
Test Case: 15.18.1-double-7
NaN != 12.0

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-7 { NaN != 12.0 } {
    
    constant_expression T15181d7 {"" + 12.0 == "12.0"}  {"" + Double.NaN == "NaN"}

} {PASS}
Test Case: 15.18.1-double-8
conversion of double to String must use as few digits after decimal as produce the same double again by rounding

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-8 { conversion of double to String must use as few
        digits after decimal as produce the same double again by rounding } {
    
    constant_expression T15181d8  {"" + 40000000000000000. == "4.0E16"}  {"" + 40000000000000008. == "4.000000000000001E16"}  {"" + 40000000000000016. == "4.000000000000002E16"}  {"" + 40000000000000024. == "4.0000000000000024E16"}  {"" + 40000000000000032. == "4.000000000000003E16"}  {"" + 40000000000000040. == "4.000000000000004E16"}

} {PASS}
Test Case: 15.18.1-double-9
conversion of double to String switches from plain to exponent at 1e7

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-9 { conversion of double to String switches from
        plain to exponent at 1e7 } {
    
    constant_expression T15181d9  {"" + 9999999.999999998 == "9999999.999999998"}  {"" + 10000000.0 == "1.0E7"}

} {PASS}
Test Case: 15.18.1-double-10
conversion of double to String switches from plain to exponent at 1e-3. Trailing 0's are not permitted.

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-10 { conversion of double to String switches from
        plain to exponent at 1e-3. Trailing 0's are not permitted. } {
    
    constant_expression T15181d10  {"" + .001 == "0.001"}  {"" + .0009999999999999998 == "9.999999999999998E-4"}

} {PASS}
Test Case: 15.18.1-double-11
conversion of double to String produces the shortest string that parses back to the same double

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-11 { conversion of double to String produces the
        shortest string that parses back to the same double } {
    
    constant_expression T15181d11  {"" + 9.999999999999999e22 == "1.0E23"}

} {PASS}
Test Case: 15.18.1-double-12
One of the longest possible Strings possible when converting doubles

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-12 { One of the longest possible Strings
        possible when converting doubles } {
    
    constant_expression T15181d12  {"" + -1.2345678912345678e-200 == "-1.2345678912345678E-200"}

} {PASS}
Test Case: 15.18.1-double-13
conversion of double to String prints the closest decimal string to the exact value, even on denorms

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-double-13 { conversion of double to String prints the
        closest decimal string to the exact value, even on denorms } {
    
    constant_expression T15181d13  {"" + 1e-323 == "9.9E-324"}  {"" + 1e-322 == "9.9E-323"}

} {PASS}
Test Case: 15.18.1-boolean-1
conversion of boolean to String

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-boolean-1 { conversion of boolean to String } {
    
    constant_expression T15181b1  {"" + true == "true"}  {"" + false == "false"}

} {PASS}
Test Case: 15.18.1-boolean-2
conversion of boolean to String

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-boolean-2 { conversion of boolean to String } {
    
    empty_main T15181b2 {
        String s1 = "" + true;
        String s2 = "" + false;
    }

} {PASS}
Test Case: 15.18.1-valid-1
String + null type is valid

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-valid-1 { String + null type is valid } {
    
    empty_main T15181v1 {
        boolean b = true;
        String s = "" + (b ? null : null);
    }

} {PASS}
Test Case: 15.18.1-valid-2
String + primitive is valid

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-valid-2 { String + primitive is valid } {
    
    empty_main T15181v2 {
        boolean b = true;
        String s1 = "" + b;
        String s2 = b + "";
    }

} {PASS}
Test Case: 15.18.1-valid-3
String + primitive is valid

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-valid-3 { String + primitive is valid } {
    
    empty_main T15181v3 {
        byte b = 1;
        String s1 = "" + b;
        String s2 = b + "";
    }

} {PASS}
Test Case: 15.18.1-valid-4
String + primitive is valid

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-valid-4 { String + primitive is valid } {
    
    empty_main T15181v4 {
        short s = 1;
        String s1 = "" + s;
        String s2 = s + "";
    }

} {PASS}
Test Case: 15.18.1-valid-5
String + primitive is valid

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-valid-5 { String + primitive is valid } {
    
    empty_main T15181v5 {
        char c = 1;
        String s1 = "" + c;
        String s2 = c + "";
    }

} {PASS}
Test Case: 15.18.1-valid-6
String + primitive is valid

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-valid-6 { String + primitive is valid } {
    
    empty_main T15181v6 {
        int i = 1;
        String s1 = "" + i;
        String s2 = i + "";
    }

} {PASS}
Test Case: 15.18.1-valid-7
String + primitive is valid

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-valid-7 { String + primitive is valid } {
    
    empty_main T15181v7 {
        long l = 1;
        String s1 = "" + l;
        String s2 = l + "";
    }

} {PASS}
Test Case: 15.18.1-valid-8
String + primitive is valid

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-valid-8 { String + primitive is valid } {
    
    empty_main T15181v8 {
        float f = 1;
        String s1 = "" + f;
        String s2 = f + "";
    }

} {PASS}
Test Case: 15.18.1-valid-9
String + primitive is valid

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-valid-9 { String + primitive is valid } {
    
    empty_main T15181v9 {
        double d = 1;
        String s1 = "" + d;
        String s2 = d + "";
    }

} {PASS}
Test Case: 15.18.1-non-const-1
runtime concatenation

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-non-const-1 { runtime concatenation } {
    
    empty_main T15181nc1 {
byte n = 0;
String s = "s" + n;
    }

} {PASS}
Test Case: 15.18.1-non-const-2
runtime concatenation

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-non-const-2 { runtime concatenation } {
    
    empty_main T15181nc2 {
        String s1 = "C";
        String s2 = "A" + "B" + s1;
    }

} {PASS}
Test Case: 15.18.1-non-const-3
runtime concatenation

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-non-const-3 { runtime concatenation } {
    
    empty_main T15181nc3 {
        String s1 = "C";
        String s2 = "A" + ("B" + s1);
    }

} {PASS}
Test Case: 15.18.1-non-const-4
runtime concatenation

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-non-const-4 { runtime concatenation } {
    
    empty_main T15181nc4 {
        String s1 = "C";
        int n = 10;
        String s2 = "A" + n + s1;
    }

} {PASS}
Test Case: 15.18.1-non-const-5
runtime concatenation

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-non-const-5 { runtime concatenation } {
    
    empty_main T15181nc5 {
        String s1 = "C";
        int n = 10;
        String s2 = "A" + (n + s1);
    }

} {PASS}
Test Case: 15.18.1-non-const-6
runtime concatenation

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-non-const-6 { runtime concatenation } {
    
    empty_main T15181nc6 {
        String s1 = "C";
        int n = 10;
        String s2 = n + ("B" + s1);
    }

} {PASS}
Test Case: 15.18.1-non-const-7
concatenation of empty string

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-non-const-7 { concatenation of empty string } {
    
    empty_main T15181nc7 {
        String s1 = "C";
        String s2 = "" + s1;
    }

} {PASS}
Test Case: 15.18.1-non-const-8
concatenation of empty string

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-non-const-8 { concatenation of empty string } {
    
    empty_main T15181nc8 {
        int i = 10;
        String s2 = "" + i;
    }

} {PASS}
Test Case: 15.18.1-non-const-9
concatenation of empty string

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-non-const-9 { concatenation of empty string } {
    
    empty_main T15181nc9 {
        int i = 10;
        String s2 = "" + i + "";
    }

} {PASS}
Test Case: 15.18.1-non-const-10
jikes had an optimization of string appends which resulted in an assertion failure. Bug id 2919.

Expected Result: PASS

Regression Test:

tcltest::test 15.18.1-non-const-10 { jikes had an optimization of string appends
        which resulted in an assertion failure. Bug id 2919. } {
    
    empty_class T15181nc10 {
	private final static String s = val() + 'a' + "bcde";
	static String val () { return null; }
    }

} {PASS}

15.18.2

Directory : tests/jls/expressions/additive-operators/numeric-types


Test Case: 15.18.2-commute-1
side-effect-free addition is commutative

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-commute-1 { side-effect-free addition is commutative } {
    
    constant_expression T15182commute1 {1 + 2 == 2 + 1}

} {PASS}
Test Case: 15.18.2-commute-2
side-effect-free addition is commutative

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-commute-2 { side-effect-free addition is commutative } {
    
    constant_expression T15182commute2 {1L + 2L == 2L + 1L}

} {PASS}
Test Case: 15.18.2-commute-3
side-effect-free addition is commutative

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-commute-3 { side-effect-free addition is commutative } {
    
    constant_expression T15182commute3 {1f + 2f == 2f + 1f}

} {PASS}
Test Case: 15.18.2-commute-4
side-effect-free addition is commutative

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-commute-4 { side-effect-free addition is commutative } {
    
    constant_expression T15182commute4 {1d + 2d == 2d + 1d}

} {PASS}
Test Case: 15.18.2-assoc-1
integer addition is associative when all arguments are of the same type

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-assoc-1 { integer addition is associative when
        all arguments are of the same type } {
    
    constant_expression T15182assoc1 {(1 + 2) + 3 == 1 + (2 + 3)}

} {PASS}
Test Case: 15.18.2-assoc-2
integer addition is not associative when arguments are of different types

Expected Result: FAIL

Regression Test:

tcltest::test 15.18.2-assoc-2 { integer addition is not associative
        when arguments are of different types } {
    
    constant_expression T15182assoc2  {(1L + 0x70000000) + 0x70000000 == 1L + (0x70000000 + 0x70000000)}

} {FAIL}
Test Case: 15.18.2-assoc-3
floating-point addition is not associative

Expected Result: FAIL

Regression Test:

tcltest::test 15.18.2-assoc-3 { floating-point addition is not associative } {
    
    constant_expression T15182assoc3  {(1e10f + 256f) + 256f == 1e10f + (256f + 256f)}

} {FAIL}
Test Case: 15.18.2-assoc-4
addition is left-associative

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-assoc-4 { addition is left-associative } {
    
    constant_expression T15182assoc3  {1e10f + 256f + 256f == (1e10f + 256f) + 256f}

} {PASS}
Test Case: 15.18.2-int-1
overflow in integer addition simply selects low-order bits, changing sign

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-int-1 { overflow in integer addition simply 
        selects low-order bits, changing sign } {
    
    constant_expression T15182i1 {1073741824 + 1073741824 == -2147483648}

} {PASS}
Test Case: 15.18.2-float-1
NaN + NaN is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-1 { NaN + NaN is NaN } {
    
    constant_expression T15182f1  {Float.NaN + Float.NaN != Float.NaN + Float.NaN}

} {PASS}
Test Case: 15.18.2-float-2
NaN + anything is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-2 { NaN + anything is NaN } {
    
    constant_expression T15182f2 {Float.NaN + 1f != Float.NaN + 1f}

} {PASS}
Test Case: 15.18.2-float-3
the result of floating-point addition follows arithmetic sign rules

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-3 { the result of floating-point addition follows
        arithmetic sign rules } {
    
    constant_expression T15182f3 {-1f + -2f < 0f}

} {PASS}
Test Case: 15.18.2-float-4
the result of floating-point addition follows arithmetic sign rules

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-4 { the result of floating-point addition follows
        arithmetic sign rules } {
    
    constant_expression T15182f4 {-1.0f + 2.0f > 0f}

} {PASS}
Test Case: 15.18.2-float-5
Infinity + 0 = Infinity

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-5 { Infinity + 0 = Infinity } {
    
    constant_expression T15182f5  {Float.POSITIVE_INFINITY + -0.0f == Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-float-6
Infinity + finite = Same sign Infinity

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-6 { Infinity + finite = Same sign Infinity } {
    
    constant_expression T15182f6  {Float.NEGATIVE_INFINITY + -1f == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-float-7
Sum of Infinities of same sign is Infinity

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-7 { Sum of Infinities of same sign is Infinity } {
    
    constant_expression T15182f7  {Float.NEGATIVE_INFINITY + Float.NEGATIVE_INFINITY ==
	    Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-float-8
Sum of Infinities of opposite sign is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-8 { Sum of Infinities of opposite sign is NaN } {
    
    constant_expression T15182f8  {Float.NEGATIVE_INFINITY + Float.POSITIVE_INFINITY !=
	    Float.NEGATIVE_INFINITY + Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-float-9
Sum of zeroes of same sign is same zero

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-9 { Sum of zeroes of same sign is same zero } {
    
    constant_expression T15182f9 {1.0f / (-0.0f + -0.0f) == Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-float-10
Sum of zeroes of opposite sign is +0

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-10 { Sum of zeroes of opposite sign is +0 } {
    
    constant_expression T15182f10 {1.0f / (-0.0f + 0.0f) == Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-float-11
Sum of oppositely signed floating-point is +0

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-11 { Sum of oppositely signed floating-point is +0 } {
    
    constant_expression T15182f11 {1.0f / (1.0f + -1.0f) == Float.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-float-12
0.0 - x is not negation, for x = 0.0

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-12 { 0.0 - x is not negation, for x = 0.0 } {
    
    constant_expression T15182f12 {1.0f / (0.0f - 0.0f) != Float.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-float-13
a - b == a + (-b)

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-13 { a - b == a + (-b) } {
    
    constant_expression T15182f13 {1.0f - 2.0f == 1.0f + -2.0f}

} {PASS}
Test Case: 15.18.2-float-14
Floating-point addition takes place with infinite accuracy, then rounds to nearest

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-14 { Floating-point addition takes place with
        infinite accuracy, then rounds to nearest } {
    
    constant_expression T15182f14 {0xfffff00 + 8.03125f == 0xfffff10}

} {PASS}
Test Case: 15.18.2-float-15
Floating-point addition takes place with infinite accuracy, then rounds to nearest

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-15 { Floating-point addition takes place with
        infinite accuracy, then rounds to nearest } {
    
    constant_expression T15182f15 {-0xfffff00 - -8.03125f == -0xffffef0}

} {PASS}
Test Case: 15.18.2-float-16
Floating-point addition takes place with infinite accuracy, then rounds to nearest

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-float-16 { Floating-point addition takes place with
        infinite accuracy, then rounds to nearest } {
    
    constant_expression T15182f16 {5.960465e-8f + 1 == 1.0000001f}

} {PASS}
Test Case: 15.18.2-double-1
NaN + NaN is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-1 { NaN + NaN is NaN } {
    
    constant_expression T15182d1  {Double.NaN + Double.NaN != Double.NaN + Double.NaN}

} {PASS}
Test Case: 15.18.2-double-2
NaN + anything is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-2 { NaN + anything is NaN } {
    
    constant_expression T15182d2 {Double.NaN + 1d != Double.NaN + 1d}

} {PASS}
Test Case: 15.18.2-double-3
the result of floating-point addition follows arithmetic sign rules

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-3 { the result of floating-point addition follows
        arithmetic sign rules } {
    
    constant_expression T15182d3 {-1d + -2d < 0d}

} {PASS}
Test Case: 15.18.2-double-4
the result of floating-point addition follows arithmetic sign rules

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-4 { the result of floating-point addition follows
        arithmetic sign rules } {
    
    constant_expression T15182d4 {-1.0 + 2.0 > 0.0}

} {PASS}
Test Case: 15.18.2-double-5
Infinity + 0 = Infinity

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-5 { Infinity + 0 = Infinity } {
    
    constant_expression T15182d5  {Double.POSITIVE_INFINITY + 0d == Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-double-6
Infinity + finite = Same sign Infinity

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-6 { Infinity + finite = Same sign Infinity } {
    
    constant_expression T15182d6  {Double.NEGATIVE_INFINITY + -1d == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-double-7
Sum of Infinities of same sign is Infinity

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-7 { Sum of Infinities of same sign is Infinity } {
    
    constant_expression T15182d7  {Double.NEGATIVE_INFINITY + Double.NEGATIVE_INFINITY ==
	    Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-double-8
Sum of Infinities of opposite sign is NaN

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-8 { Sum of Infinities of opposite sign is NaN } {
    
    constant_expression T15182d8  {Double.NEGATIVE_INFINITY + Double.POSITIVE_INFINITY !=
	    Double.NEGATIVE_INFINITY + Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-double-9
Sum of zeroes of same sign is same zero

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-9 { Sum of zeroes of same sign is same zero } {
    
    constant_expression T15182d9 {1.0 / (-0.0 + -0.0) == Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-double-10
Sum of zeroes of opposite sign is +0

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-10 { Sum of zeroes of opposite sign is +0 } {
    
    constant_expression T15182d10 {1.0 / (-0.0 + 0.0) == Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-double-11
Sum of oppositely signed floating-point is +0

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-11 { Sum of oppositely signed floating-point is +0 } {
    
    constant_expression T15182d11 {1.0 / (1.0 + -1.0) == Double.POSITIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-double-12
0.0 - x is not negation, for x = 0.0

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-12 { 0.0 - x is not negation, for x = 0.0 } {
    
    constant_expression T15182d12 {1.0 / (0.0 - 0.0) != Double.NEGATIVE_INFINITY}

} {PASS}
Test Case: 15.18.2-double-13
a - b == a + (-b)

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-13 { a - b == a + (-b) } {
    
    constant_expression T15182d13 {1.0 - 2.0 == 1.0 + -2.0}

} {PASS}
Test Case: 15.18.2-double-14
Floating-point addition takes place with infinite accuracy, then rounds to nearest

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-14 { Floating-point addition takes place with
        infinite accuracy, then rounds to nearest } {
    
    constant_expression T15182d14 {0x1ffffffffffff00L + 8.03125 ==
        0x1ffffffffffff10L }

} {PASS}
Test Case: 15.18.2-double-15
Floating-point addition takes place with infinite accuracy, then rounds to nearest

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-15 { Floating-point addition takes place with
        infinite accuracy, then rounds to nearest } {
    
    constant_expression T15182d15 {-0x1ffffffffffff00L - -8.03125 ==
        -0x1fffffffffffef0L }

} {PASS}
Test Case: 15.18.2-double-16
Floating-point addition takes place with infinite accuracy, then rounds to nearest, use of 80-bit extended precision instead of 64-bit double precision will fail for this test case

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-double-16 { Floating-point addition takes place with
        infinite accuracy, then rounds to nearest, use of 80-bit
        extended precision instead of 64-bit double precision will fail
        for this test case } {
    
    constant_expression T15182d16 {1.1107651257113993e-16 + 1 ==
        1.0000000000000002}

} {PASS}
Test Case: 15.18.2-mixed-1
Test mixed type addition to 0 for proper optimization - jikes bug 3078

Expected Result: PASS

Regression Test:

tcltest::test 15.18.2-mixed-1 { Test mixed type addition to 0 for proper
        optimization - jikes bug 3078 } {
    
    empty_class T15182m1 {
	void m(int i, long l, float f, double d) {
	    l = 0L + i;
	    l = i + 0L;
	    l = 0L - i;
	    l = i - 0L;

	    f = 0f + i;
	    f = i + 0f;
	    f = 0f - i;
	    f = i - 0f;
	    f = -0f + i;
	    f = i + -0f;
	    f = -0f - i;
	    f = i - -0f;

	    f = 0f + l;
	    f = l + 0f;
	    f = 0f - l;
	    f = l - 0f;
	    f = -0f + l;
	    f = l + -0f;
	    f = -0f - l;
	    f = l - -0f;

	    d = 0. + i;
	    d = i + 0.;
	    d = 0. - i;
	    d = i - 0.;
	    d = -0. + i;
	    d = i + -0.;
	    d = -0. - i;
	    d = i - -0.;

	    d = 0. + l;
	    d = l + 0.;
	    d = 0. - l;
	    d = l - 0.;
	    d = -0. + l;
	    d = l + -0.;
	    d = -0. - l;
	    d = l - -0.;

	    d = 0. + f;
	    d = f + 0.;
	    d = 0. - f;
	    d = f - 0.;
	    d = -0. + f;
	    d = f + -0.;
	    d = -0. - f;
	    d = f - -0.;
	}
    }

} {PASS}

15.20

Directory : tests/jls/expressions/relational-operators/type-comparison-operator-instanceof


Test Case: 15.20-2-always-1
Always true (but expression is still evaluated)

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-always-1 { Always true (but expression is still
        evaluated) } {
    
    empty_main T15202a1 {
	// identity conversion of non-null
	boolean b = new Object() instanceof Object;
    }

} {PASS}
Test Case: 15.20-2-always-2
Always true (but expression is still evaluated)

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-always-2 { Always true (but expression is still
        evaluated) } {
    
    empty_main T15202a2 {
	// non-null subclass to superclass
	boolean b = new String() instanceof Object;
    }

} {PASS}
Test Case: 15.20-2-always-3
Always true (but expression is still evaluated)

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-always-3 { Always true (but expression is still
        evaluated) } {
    
    empty_main T15202a3 {
	// non-null array to Object
	boolean b = new int[1] instanceof Object;
    }

} {PASS}
Test Case: 15.20-2-always-4
Always true (but expression is still evaluated)

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-always-4 { Always true (but expression is still
        evaluated) } {
    
    empty_main T15202a4 {
	// non-null array to compatible array
	boolean b = new String[] {} instanceof String[];
    }

} {PASS}
Test Case: 15.20-2-always-5
Always true (but expression is still evaluated)

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-always-5 { Always true (but expression is still
        evaluated) } {
    
    empty_main T15202a5 {
	// non-null array to compatible array
	boolean b = new Integer[] {} instanceof Comparable[];
    }

} {PASS}
Test Case: 15.20-2-always-6
Always true (but expression is still evaluated)

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-always-6 { Always true (but expression is still
        evaluated) } {
    
    empty_main T15202a6 {
	// non-null array to Cloneable
	boolean b = new int[1] instanceof Cloneable;
    }

} {PASS}
Test Case: 15.20-2-always-7
Always true (but expression is still evaluated)

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-always-7 { Always true (but expression is still
        evaluated) } {
    
    empty_main T15202a7 {
	// non-null array to Serializable
	boolean b = new int[] {} instanceof java.io.Serializable;
    }

} {PASS}
Test Case: 15.20-2-always-8
Always true (but expression is still evaluated)

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-always-8 { Always true (but expression is still
        evaluated) } {
    
    empty_main T15202a8 {
	// non-null instance to superinterface
	boolean b = new Cloneable() {} instanceof Cloneable;
    }

} {PASS}
Test Case: 15.20-2-sometimes-1
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-1 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_main T15202s1 {
	Object o = new Object();
	// identity
	boolean b = o instanceof Object;
    }

} {PASS}
Test Case: 15.20-2-sometimes-2
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-2 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_main T15202s2 {
	Object o = "";
	// narrowing
	boolean b = o instanceof Integer; // false at runtime
    }

} {PASS}
Test Case: 15.20-2-sometimes-3
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-3 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_main T15202s3 {
	String s = "";
	// widening
	boolean b = s instanceof Object;
    }

} {PASS}
Test Case: 15.20-2-sometimes-4
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-4 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_main T15202s4 {
	Object o = "";
	// narrowing to interface
	boolean b = o instanceof Cloneable;
    }

} {PASS}
Test Case: 15.20-2-sometimes-5
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-5 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_main T15202s5 {
	Object o = "";
	// narrowing to array
	boolean b = o instanceof int[];
    }

} {PASS}
Test Case: 15.20-2-sometimes-6
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-6 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_main T15202s6 {
	Comparable c = "";
	// widening to Object
	boolean b = c instanceof Object;
    }

} {PASS}
Test Case: 15.20-2-sometimes-7
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-7 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_class T15202s7 {
	interface I extends Cloneable {}
	I i = new I() {};
	// widening to superinterface
	boolean b = i instanceof Cloneable;
    }

} {PASS}
Test Case: 15.20-2-sometimes-8
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-8 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_class T15202s8 {
	interface I extends Cloneable {}
	Cloneable c = new Cloneable() {};
	// narrowing to subinterface
	boolean b = c instanceof I;
    }

} {PASS}
Test Case: 15.20-2-sometimes-9
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-9 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_class T15202s9 {
	Cloneable c = new Cloneable() {};
	// narrowing to array
	boolean b = c instanceof int[];
    }

} {PASS}
Test Case: 15.20-2-sometimes-10
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-10 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_class T15202s10 {
	interface I {}
	Cloneable c = new Cloneable() {};
	// narrowing to compatible interface
	boolean b = c instanceof I;
    }

} {PASS}
Test Case: 15.20-2-sometimes-11
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-11 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_class T15202s11 {
	int[] i = {};
	// widening to interface
	boolean b = i instanceof Cloneable;
    }

} {PASS}
Test Case: 15.20-2-sometimes-12
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-12 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_class T15202s12 {
	String[] s = {};
	// widening to compatible array
	boolean b = s instanceof Object[];
    }

} {PASS}
Test Case: 15.20-2-sometimes-13
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-13 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_class T15202s13 {
	String[] s = {};
	// widening to compatible array
	boolean b = s instanceof Comparable[];
    }

} {PASS}
Test Case: 15.20-2-sometimes-14
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-14 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_class T15202s14 {
	Object[] o = {};
	// narrowing to compatible array
	boolean b = o instanceof Integer[];
    }

} {PASS}
Test Case: 15.20-2-sometimes-15
Sometimes true - requires runtime check that reference is non-null and compatible

Expected Result: PASS

Regression Test:

tcltest::test 15.20-2-sometimes-15 { Sometimes true - requires runtime check
        that reference is non-null and compatible } {
    
    empty_class T15202s15 {
	Object[] o = {};
	// narrowing to compatible array
	boolean b = o instanceof Comparable[];
    }

} {PASS}
Test Case: 15.20-2-never-1
Compile-time error - not cast-compatible

Expected Result: FAIL

Regression Test:

tcltest::test 15.20-2-never-1 { Compile-time error - not cast-compatible } {
    
    empty_main T15202n1 {
	boolean b = "" instanceof Integer;
    }

} {FAIL}
Test Case: 15.20-2-never-2
Compile-time error - not cast-compatible

Expected Result: FAIL

Regression Test:

tcltest::test 15.20-2-never-2 { Compile-time error - not cast-compatible } {
    
    empty_main T15202n2 {
	boolean b = "" instanceof int[];
    }

} {FAIL}
Test Case: 15.20-2-never-3
Compile-time error - not cast-compatible

Expected Result: FAIL

Regression Test:

tcltest::test 15.20-2-never-3 { Compile-time error - not cast-compatible } {
    
    empty_main T15202n3 {
	boolean b = new String[1] instanceof int[];
    }

} {FAIL}
Test Case: 15.20-2-never-4
Compile-time error - not cast-compatible

Expected Result: FAIL

Regression Test:

tcltest::test 15.20-2-never-4 { Compile-time error - not cast-compatible } {
    
    empty_class T15202n4 {
	interface I { void m(); }
	interface J { int m(); }
	boolean n(I i) {
	    return i instanceof J;
	}
    }

} {FAIL}
Test Case: 15.20-2-never-5
Compile-time error - not cast-compatible

Expected Result: FAIL

Regression Test:

tcltest::test 15.20-2-never-5 { Compile-time error - not cast-compatible } {
    
    empty_class T15202n5 {
	boolean b = new int[1] instanceof Runnable;
    }

} {FAIL}
Test Case: 15.20-2-never-6
Compile-time error - not cast-compatible

Expected Result: FAIL

Regression Test:

tcltest::test 15.20-2-never-6 { Compile-time error - not cast-compatible } {
    
    empty_class T15202n6 {
	boolean b = new int[1] instanceof Object[];
    }

} {FAIL}
Test Case: 15.20-2-never-7
Compile-time error - not cast-compatible

Expected Result: FAIL

Regression Test:

tcltest::test 15.20-2-never-7 { Compile-time error - not cast-compatible } {
    
    empty_class T15202n7 {
	boolean b = new byte[1] instanceof short[];
    }

} {FAIL}

15.20.2

Directory : tests/jls/expressions/relational-operators/type-comparison-operator-instanceof


Test Case: 15.20.2-type-1
The left side may be null

Expected Result: PASS

Regression Test:

tcltest::test 15.20.2-type-1 { The left side may be null } {
    
    empty_main T15202t1 {
	boolean b = null instanceof Object; // always false, but valid
    }

} {PASS}
Test Case: 15.20.2-type-2
The left side may be null

Expected Result: PASS

Regression Test:

tcltest::test 15.20.2-type-2 { The left side may be null } {
    
    empty_main T15202t2 {
	boolean b = null instanceof Runnable;
    }

} {PASS}
Test Case: 15.20.2-type-3
The left side may be null

Expected Result: PASS

Regression Test:

tcltest::test 15.20.2-type-3 { The left side may be null } {
    
    empty_main T15202t3 {
	boolean b = null instanceof int[];
    }

} {PASS}
Test Case: 15.20.2-type-4
The left side may not be primitive

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-4 { The left side may not be primitive } {
    
    empty_main T15202t4 {
	boolean b = true instanceof Boolean;
    }

} {FAIL}
Test Case: 15.20.2-type-5
The left side may not be primitive

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-5 { The left side may not be primitive } {
    
    empty_main T15202t5 {
	boolean b = true instanceof boolean;
    }

} {FAIL}
Test Case: 15.20.2-type-6
The left side may not be primitive

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-6 { The left side may not be primitive } {
    
    empty_main T15202t6 {
	boolean b = 1 instanceof Integer;
    }

} {FAIL}
Test Case: 15.20.2-type-7
The left side may not be primitive

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-7 { The left side may not be primitive } {
    
    empty_main T15202t7 {
	boolean b = 1 instanceof int;
    }

} {FAIL}
Test Case: 15.20.2-type-8
The left side may not be primitive

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-8 { The left side may not be primitive } {
    
    empty_main T15202t8 {
	boolean b = '1' instanceof Character;
    }

} {FAIL}
Test Case: 15.20.2-type-9
The left side may not be primitive

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-9 { The left side may not be primitive } {
    
    empty_main T15202t9 {
	boolean b = '1' instanceof char;
    }

} {FAIL}
Test Case: 15.20.2-type-10
The left side may not be primitive

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-10 { The left side may not be primitive } {
    
    empty_main T15202t10 {
	boolean b = 1.0 instanceof Double;
    }

} {FAIL}
Test Case: 15.20.2-type-11
The left side may not be primitive

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-11 { The left side may not be primitive } {
    
    empty_main T15202t11 {
	boolean b = 1.0 instanceof double;
    }

} {FAIL}
Test Case: 15.20.2-type-12
The left side may not be void

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-12 { The left side may not be void } {
    
    empty_class T15202t12 {
	void m() {}
	boolean b = m() instanceof Object;
    }

} {FAIL}
Test Case: 15.20.2-type-13
The left side may not be void

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-13 { The left side may not be void } {
    
    empty_class T15202t13 {
	void m() {}
	boolean b = m() instanceof void;
    }

} {FAIL}
Test Case: 15.20.2-type-14
The left side may be a class literal

Expected Result: PASS

Regression Test:

tcltest::test 15.20.2-type-14 { The left side may be a class literal } {
    
    empty_main T15202t14 {
	boolean b = Object.class instanceof Class;
    }

} {PASS}
Test Case: 15.20.2-type-15
The left side may be a string literal

Expected Result: PASS

Regression Test:

tcltest::test 15.20.2-type-15 { The left side may be a string literal } {
    
    empty_main T15202t15 {
	boolean b = "" instanceof String;
    }

} {PASS}
Test Case: 15.20.2-type-16
The left side may not be a type

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-16 { The left side may not be a type } {
    
    empty_main T15202t16 {
	boolean b = String instanceof Object;
    }

} {FAIL}
Test Case: 15.20.2-type-17
The right side must be a reference type

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-17 { The right side must be a reference type } {
    
    empty_main T15202t17 {
	boolean b = null instanceof null;
    }

} {FAIL}
Test Case: 15.20.2-type-18
The right side must be a reference type

Expected Result: FAIL

Regression Test:

tcltest::test 15.20.2-type-18 { The right side must be a reference type } {
    
    empty_main T15202t18 {
	boolean b = new Integer() instanceof int;
    }

} {FAIL}

15.21

Directory : tests/jls/expressions/equality-operators


Test Case: 15.21-assoc-1
a==b==c is (a==b)==c, and hence c must be boolean

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-assoc-1 { a==b==c is (a==b)==c, and hence c must be
        boolean } {
    
    constant_expression T1521a1 {1 == 2 == 0}

} {FAIL}
Test Case: 15.21-assoc-2
a==b==c is (a==b)==c, and hence c must be boolean

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-assoc-2 { a==b==c is (a==b)==c, and hence c must be
        boolean } {
    
    constant_expression T1521a2 {1 != 2 != 0}

} {FAIL}
Test Case: 15.21-assoc-3
a==b==c is (a==b)==c, and hence c must be boolean

Expected Result: PASS

Regression Test:

tcltest::test 15.21-assoc-3 { a==b==c is (a==b)==c, and hence c must be
        boolean } {
    
    constant_expression T1521a3 {1 == 2 == false} {1 != 2 == true}  {1 == 2 != true} {1 != 2 != false}

} {PASS}
Test Case: 15.21-assoc-4
a==b==c is (a==b)==c, and hence c must be boolean

Expected Result: PASS

Regression Test:

tcltest::test 15.21-assoc-4 { a==b==c is (a==b)==c, and hence c must be
        boolean } {
    
    constant_expression T1521a4 {(1 == 2) == false} {(1 != 2) == true}  {(1 == 2) != true} {(1 != 2) != false}

} {PASS}
Test Case: 15.21-assoc-5
a==b==c is (a==b)==c, and hence c must be boolean

Expected Result: PASS

Regression Test:

tcltest::test 15.21-assoc-5 { a==b==c is (a==b)==c, and hence c must be
        boolean } {
    
    constant_expression T1521a5 {true == false == false}  {true != false == true}  {true == false != true}  {true != false != false}

} {PASS}
Test Case: 15.21-assoc-6
a==b==c is (a==b)==c, and hence c must be boolean

Expected Result: PASS

Regression Test:

tcltest::test 15.21-assoc-6 { a==b==c is (a==b)==c, and hence c must be
        boolean } {
    
    constant_expression T1521a6 {(true == false) == false}  {(true != false) == true}  {(true == false) != true}  {(true != false) != false}

} {PASS}
Test Case: 15.21-assoc-7
a==b==c is (a==b)==c, and hence c must be boolean

Expected Result: PASS

Regression Test:

tcltest::test 15.21-assoc-7 { a==b==c is (a==b)==c, and hence c must be
        boolean } {
    
    constant_expression T1521a7 {"1" == "2" == false} {"1" != "2" == true}  {"1" == "2" != true} {"1" != "2" != false}

} {PASS}
Test Case: 15.21-assoc-8
a==b==c is (a==b)==c, and hence c must be boolean

Expected Result: PASS

Regression Test:

tcltest::test 15.21-assoc-8 { a==b==c is (a==b)==c, and hence c must be
        boolean } {
    
    constant_expression T1521a8 {("1" == "2") == false} {("1" != "2") == true}  {("1" == "2") != true} {("1" != "2") != false}

} {PASS}
Test Case: 15.21-assoc-9
a==b==c is (a==b)==c

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-assoc-9 { a==b==c is (a==b)==c } {
    
    constant_expression T1521a9 {1 == (0 == false)}

} {FAIL}
Test Case: 15.21-precedence-1
== is lower than <

Expected Result: PASS

Regression Test:

tcltest::test 15.21-precedence-1 { == is lower than < } {
    
    constant_expression T1521p1 {1 < 2 == 2 < 3} {(1 < 2) == (2 < 3)}

} {PASS}
Test Case: 15.21-precedence-2
== is lower than <

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-precedence-2 { == is lower than < } {
    
    constant_expression T1521p2 {1 < (2 == 2) < 3}

} {FAIL}
Test Case: 15.21-precedence-3
== is lower than <

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-precedence-3 { == is lower than < } {
    
    constant_expression T1521p3 {((1 < 2) == 2) < 3}

} {FAIL}
Test Case: 15.21-equal-1
a!=b is !(a==b)

Expected Result: PASS

Regression Test:

tcltest::test 15.21-equal-1 { a!=b is !(a==b) } {
    
    constant_expression T1521e1 {(1!=2) == (!(1==2))} {(1!=1) == (!(1==1))}

} {PASS}
Test Case: 15.21-equal-2
a!=b is !(a==b)

Expected Result: PASS

Regression Test:

tcltest::test 15.21-equal-2 { a!=b is !(a==b) } {
    
    constant_expression T1521e2 {(true!=true) == (!(true==true))}  {(true!=false) == (!(true==false))}

} {PASS}
Test Case: 15.21-equal-3
a!=b is !(a==b)

Expected Result: PASS

Regression Test:

tcltest::test 15.21-equal-3 { a!=b is !(a==b) } {
    
    constant_expression T1521e3 {("1"!="1") == (!("1"=="1"))}  {("1"!="2") == (!("1"=="2"))}

} {PASS}
Test Case: 15.21-type-1
in a==b, if a is boolean, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-1 { in a==b, if a is boolean, b must be too } {
    
    empty_main T1521t1 {
	boolean b = true == 1;
    }

} {FAIL}
Test Case: 15.21-type-2
in a==b, if a is boolean, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-2 { in a==b, if a is boolean, b must be too } {
    
    empty_main T1521t2 {
	boolean b = true == 1L;
    }

} {FAIL}
Test Case: 15.21-type-3
in a==b, if a is boolean, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-3 { in a==b, if a is boolean, b must be too } {
    
    empty_main T1521t3 {
	boolean b = true == '1';
    }

} {FAIL}
Test Case: 15.21-type-4
in a==b, if a is boolean, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-4 { in a==b, if a is boolean, b must be too } {
    
    empty_main T1521t4 {
	boolean b = true == 1f;
    }

} {FAIL}
Test Case: 15.21-type-5
in a==b, if a is boolean, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-5 { in a==b, if a is boolean, b must be too } {
    
    empty_main T1521t5 {
	boolean b = true == 1.;
    }

} {FAIL}
Test Case: 15.21-type-6
in a==b, if a is boolean, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-6 { in a==b, if a is boolean, b must be too } {
    
    empty_main T1521t6 {
	boolean b = true == "1";
    }

} {FAIL}
Test Case: 15.21-type-7
in a==b, if a is boolean, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-7 { in a==b, if a is boolean, b must be too } {
    
    empty_main T1521t7 {
	boolean b = true == null;
    }

} {FAIL}
Test Case: 15.21-type-8
in a==b, if a is boolean, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-8 { in a==b, if a is boolean, b must be too } {
    
    empty_main T1521t8 {
	boolean b = true == System.out.println();
    }

} {FAIL}
Test Case: 15.21-type-9
in a==b, if a is boolean, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-9 { in a==b, if a is boolean, b must be too } {
    
    empty_main T1521t9 {
	boolean b = true == new Boolean(true);
    }

} {FAIL}
Test Case: 15.21-type-10
in a==b, if a is boolean, b must be too

Expected Result: PASS

Regression Test:

tcltest::test 15.21-type-10 { in a==b, if a is boolean, b must be too } {
    
    empty_main T1521t10 {
	boolean b = true == false;
    }

} {PASS}
Test Case: 15.21-type-11
in a==b, if a is numeric, b must be too

Expected Result: PASS

Regression Test:

tcltest::test 15.21-type-11 { in a==b, if a is numeric, b must be too } {
    
    empty_main T1521t11 {
	boolean b = 1 == 1;
    }

} {PASS}
Test Case: 15.21-type-12
in a==b, if a is numeric, b must be too

Expected Result: PASS

Regression Test:

tcltest::test 15.21-type-12 { in a==b, if a is numeric, b must be too } {
    
    empty_main T1521t12 {
	boolean b = 1 == 1L;
    }

} {PASS}
Test Case: 15.21-type-13
in a==b, if a is numeric, b must be too

Expected Result: PASS

Regression Test:

tcltest::test 15.21-type-13 { in a==b, if a is numeric, b must be too } {
    
    empty_main T1521t13 {
	boolean b = 1 == '1';
    }

} {PASS}
Test Case: 15.21-type-14
in a==b, if a is numeric, b must be too

Expected Result: PASS

Regression Test:

tcltest::test 15.21-type-14 { in a==b, if a is numeric, b must be too } {
    
    empty_main T1521t14 {
	boolean b = 1 == 1f;
    }

} {PASS}
Test Case: 15.21-type-15
in a==b, if a is numeric, b must be too

Expected Result: PASS

Regression Test:

tcltest::test 15.21-type-15 { in a==b, if a is numeric, b must be too } {
    
    empty_main T1521t15 {
	boolean b = 1 == 1.;
    }

} {PASS}
Test Case: 15.21-type-16
in a==b, if a is numeric, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-16 { in a==b, if a is numeric, b must be too } {
    
    empty_main T1521t16 {
	boolean b = 1 == "1";
    }

} {FAIL}
Test Case: 15.21-type-17
in a==b, if a is numeric, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-17 { in a==b, if a is numeric, b must be too } {
    
    empty_main T1521t17 {
	boolean b = 1 == null;
    }

} {FAIL}
Test Case: 15.21-type-18
in a==b, if a is numeric, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-18 { in a==b, if a is numeric, b must be too } {
    
    empty_main T1521t18 {
	boolean b = 1 == System.out.println();
    }

} {FAIL}
Test Case: 15.21-type-19
in a==b, if a is numeric, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-19 { in a==b, if a is numeric, b must be too } {
    
    empty_main T1521t19 {
	boolean b = 1 == new Integer(1);
    }

} {FAIL}
Test Case: 15.21-type-20
in a==b, if a is numeric, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-20 { in a==b, if a is numeric, b must be too } {
    
    empty_main T1521t20 {
	boolean b = 1 == true;
    }

} {FAIL}
Test Case: 15.21-type-21
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-21 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t21 {
	boolean b = null == 1;
    }

} {FAIL}
Test Case: 15.21-type-22
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-22 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t22 {
	boolean b = null == 1L;
    }

} {FAIL}
Test Case: 15.21-type-23
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-23 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t23 {
	boolean b = null == '1';
    }

} {FAIL}
Test Case: 15.21-type-24
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-24 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t24 {
	boolean b = null == 1f;
    }

} {FAIL}
Test Case: 15.21-type-25
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-25 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t25 {
	boolean b = null == 1.;
    }

} {FAIL}
Test Case: 15.21-type-26
in a==b, if a is a reference, b must be too

Expected Result: PASS

Regression Test:

tcltest::test 15.21-type-26 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t26 {
	boolean b = null == "1";
    }

} {PASS}
Test Case: 15.21-type-27
in a==b, if a is a reference, b must be too

Expected Result: PASS

Regression Test:

tcltest::test 15.21-type-27 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t27 {
	boolean b = null == null;
    }

} {PASS}
Test Case: 15.21-type-28
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-28 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t28 {
	boolean b = null == System.out.println();
    }

} {FAIL}
Test Case: 15.21-type-29
in a==b, if a is a reference, b must be too

Expected Result: PASS

Regression Test:

tcltest::test 15.21-type-29 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t29 {
	boolean b = null == new Boolean(true);
    }

} {PASS}
Test Case: 15.21-type-30
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-30 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t30 {
	boolean b = null == false;
    }

} {FAIL}
Test Case: 15.21-type-31
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-31 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t31 {
	boolean b = "1" == 1;
    }

} {FAIL}
Test Case: 15.21-type-32
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-32 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t32 {
	boolean b = "1" == 1L;
    }

} {FAIL}
Test Case: 15.21-type-33
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-33 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t33 {
	boolean b = "1" == '1';
    }

} {FAIL}
Test Case: 15.21-type-34
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-34 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t34 {
	boolean b = "1.0" == 1f;
    }

} {FAIL}
Test Case: 15.21-type-35
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-35 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t35 {
	boolean b = "1.0" == 1.;
    }

} {FAIL}
Test Case: 15.21-type-36
in a==b, if a is a reference, b must be too

Expected Result: PASS

Regression Test:

tcltest::test 15.21-type-36 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t36 {
	boolean b = "1" == "1";
    }

} {PASS}
Test Case: 15.21-type-37
in a==b, if a is a reference, b must be too

Expected Result: PASS

Regression Test:

tcltest::test 15.21-type-37 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t37 {
	boolean b = "null" == null;
    }

} {PASS}
Test Case: 15.21-type-38
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-38 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t38 {
	boolean b = "" == System.out.println();
    }

} {FAIL}
Test Case: 15.21-type-39
in a==b, if a is a reference, b must be too

Expected Result: PASS

Regression Test:

tcltest::test 15.21-type-39 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t39 {
	boolean b = new Object() == new Integer(1);
    }

} {PASS}
Test Case: 15.21-type-40
in a==b, if a is a reference, b must be too

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-40 { in a==b, if a is a reference, b must be too } {
    
    empty_main T1521t40 {
	boolean b = "true" == true;
    }

} {FAIL}
Test Case: 15.21-type-41
void==void is not valid

Expected Result: FAIL

Regression Test:

tcltest::test 15.21-type-41 { void==void is not valid } {
    
    empty_main T1521t41 {
	boolean b = System.out.println() == System.out.println();
    }

} {FAIL}

15.21.1

Directory : tests/jls/expressions/equality-operators/numerical-equality


Test Case: 15.21.1-promote-1
Binary promotion is done for numeric ==

Expected Result: PASS

Regression Test:

tcltest::test 15.21.1-promote-1 { Binary promotion is done for numeric == } {
    
    # Note the same bit patterns
    constant_expression T15211p1 {(char)0xffff != (short)0xffff}

} {PASS}
Test Case: 15.21.1-promote-2
Binary promotion is done for numeric ==

Expected Result: PASS

Regression Test:

tcltest::test 15.21.1-promote-2 { Binary promotion is done for numeric == } {
    
    # Note the different bit patterns
    constant_expression T15211p2 {(short)0xffff == (byte)0xff}

} {PASS}
Test Case: 15.21.1-promote-3
Binary promotion is done for numeric ==

Expected Result: PASS

Regression Test:

tcltest::test 15.21.1-promote-3 { Binary promotion is done for numeric == } {
    
    # Note the same decimal starting point
    constant_expression T15211p3 {.1f != .1}

} {PASS}
Test Case: 15.21.1-floating-1
In floating point, -0 == 0

Expected Result: PASS

Regression Test:

tcltest::test 15.21.1-floating-1 { In floating point, -0 == 0 } {
    
    constant_expression T15211f1 {0. == -0.} {!(0. != -0.)}

} {PASS}
Test Case: 15.21.1-floating-2
In floating point, -0 == 0

Expected Result: PASS

Regression Test:

tcltest::test 15.21.1-floating-2 { In floating point, -0 == 0 } {
    
    constant_expression T15211f2 {0f == -0f} {!(0f != -0f)}

} {PASS}
Test Case: 15.21.1-floating-3
In floating point, NaN is never ==

Expected Result: PASS

Regression Test:

tcltest::test 15.21.1-floating-3 { In floating point, NaN is never == } {
    
    constant_expression T15211f3 {Double.NaN != Double.NaN}  {!(Double.NaN == Double.NaN)}  {Float.NaN != Float.NaN}  {!(Float.NaN == Float.NaN)}

} {PASS}
Test Case: 15.21.1-floating-4
In floating point, NaN is never ==

Expected Result: PASS

Regression Test:

tcltest::test 15.21.1-floating-4 { In floating point, NaN is never == } {
    
    constant_expression T15211f4 {Double.NaN != 0}  {!(Double.NaN == 0)}  {Double.NaN != -0.}  {!(Double.NaN == -0.)}

} {PASS}
Test Case: 15.21.1-floating-5
In floating point, NaN is never ==

Expected Result: PASS

Regression Test:

tcltest::test 15.21.1-floating-5 { In floating point, NaN is never == } {
    
    constant_expression T15211f5 {Float.NaN != 0}  {!(Float.NaN == 0)}  {Float.NaN != -0f}  {!(Float.NaN == -0f)}

} {PASS}
Test Case: 15.21.1-floating-6
In floating point, NaN is never ==

Expected Result: PASS

Regression Test:

tcltest::test 15.21.1-floating-6 { In floating point, NaN is never == } {
    
    constant_expression T15211f6 {Double.NaN != Double.POSITIVE_INFINITY}  {!(Double.NaN == Double.POSITIVE_INFINITY)}  {Double.NaN != Double.NEGATIVE_INFINITY}  {!(Double.NaN == Double.NEGATIVE_INFINITY)}

} {PASS}
Test Case: 15.21.1-floating-7
In floating point, NaN is never ==

Expected Result: PASS

Regression Test:

tcltest::test 15.21.1-floating-7 { In floating point, NaN is never == } {
    
    constant_expression T15211f7 {Float.NaN != Float.POSITIVE_INFINITY}  {!(Float.NaN == Float.POSITIVE_INFINITY)}  {Float.NaN != Float.NEGATIVE_INFINITY}  {!(Float.NaN == Float.NEGATIVE_INFINITY)}

} {PASS}
Test Case: 15.21.1-floating-8
In floating point, infinities compare only to themselves

Expected Result: PASS

Regression Test:

tcltest::test 15.21.1-floating-8 { In floating point, infinities compare only
        to themselves } {
    
    constant_expression T15211f8  {Double.POSITIVE_INFINITY == Double.POSITIVE_INFINITY}  {Double.POSITIVE_INFINITY != Double.NEGATIVE_INFINITY}  {Double.NEGATIVE_INFINITY == Double.NEGATIVE_INFINITY}  {Double.POSITIVE_INFINITY != 0}  {Double.NEGATIVE_INFINITY != -0.}

} {PASS}
Test Case: 15.21.1-floating-9
In floating point, infinities compare only to themselves

Expected Result: PASS

Regression Test:

tcltest::test 15.21.1-floating-9 { In floating point, infinities compare only
        to themselves } {
    
    constant_expression T15211f9  {Float.POSITIVE_INFINITY == Float.POSITIVE_INFINITY}  {Float.POSITIVE_INFINITY != Float.NEGATIVE_INFINITY}  {Float.NEGATIVE_INFINITY == Float.NEGATIVE_INFINITY}  {Float.POSITIVE_INFINITY != 0}  {Float.NEGATIVE_INFINITY != -0f}

} {PASS}

15.21.3

Directory : tests/jls/expressions/equality-operators/reference-equality


Test Case: 15.21.3-type-1
In reference equality, the two types must be cast convertible

Expected Result: FAIL

Regression Test:

tcltest::test 15.21.3-type-1 { In reference equality, the two types must be
        cast convertible } {
    
    empty_main T15213t1 {
	boolean b = new Integer(1) == "";
    }

} {FAIL}
Test Case: 15.21.3-type-2
In reference equality, the two types must be cast convertible

Expected Result: PASS

Regression Test:

tcltest::test 15.21.3-type-2 { In reference equality, the two types must be
        cast convertible } {
    
    empty_main T15213t2 {
	boolean b = new Integer(1) == (Object) "";
	b = (Object) new Integer(1) == "";
    }

} {PASS}
Test Case: 15.21.3-type-3
In reference equality, the two types must be cast convertible

Expected Result: PASS

Regression Test:

tcltest::test 15.21.3-type-3 { In reference equality, the two types must be
        cast convertible } {
    
    empty_class T15213t3 {
	interface I {}
	class C {}
	boolean m(I i, C c) {
	    return i == c;
	}
    }

} {PASS}
Test Case: 15.21.3-type-4
In reference equality, the two types must be cast convertible

Expected Result: FAIL

Regression Test:

tcltest::test 15.21.3-type-4 { In reference equality, the two types must be
        cast convertible } {
    
    empty_class T15213t4 {
	interface I {}
	final class C {}
	boolean m(I i, C c) {
	    return i == c;
	}
    }

} {FAIL}
Test Case: 15.21.3-type-5
In reference equality, the two types must be cast convertible

Expected Result: PASS

Regression Test:

tcltest::test 15.21.3-type-5 { In reference equality, the two types must be
        cast convertible } {
    
    empty_class T15213t5 {
	interface I {}
	final class C {}
	boolean m(I i, C c) {
	    return (i == (Object) c) || ((Object) i == c);
	}
    }

} {PASS}
Test Case: 15.21.3-type-6
In reference equality, the two types must be cast convertible

Expected Result: FAIL

Regression Test:

tcltest::test 15.21.3-type-6 { In reference equality, the two types must be
        cast convertible } {
    
    empty_class T15213t6 {
	interface I1 {
	    void m();
	}
	interface I2 {
	    int m();
	}
	boolean m(I1 i1, I2 i2) {
	    return i1 == i2;
	}
    }

} {FAIL}
Test Case: 15.21.3-type-7
In reference equality, the two types must be cast convertible

Expected Result: PASS

Regression Test:

tcltest::test 15.21.3-type-7 { In reference equality, the two types must be
        cast convertible } {
    
    empty_class T15213t7 {
	interface I1 {
	    void m();
	}
	interface I2 {
	    int m();
	}
	boolean m(I1 i1, I2 i2) {
	    return ((Object) i1 == i2) || (i1 == (Object) i2);
	}
    }

} {PASS}
Test Case: 15.21.3-type-8
In reference equality, the two types must be cast convertible

Expected Result: PASS

Regression Test:

tcltest::test 15.21.3-type-8 { In reference equality, the two types must be
        cast convertible } {
    
    empty_class T15213t8 {
	interface I {
	    void m();
	}
	class C {
	    int m() { return 1; }
	}
	boolean m(I i, C c) {
	    // Note that no subclass of C can implement i!
	    return i == c;
	}
    }

} {PASS}
Test Case: 15.21.3-type-9
In reference equality, the two types must be cast convertible

Expected Result: PASS

Regression Test:

tcltest::test 15.21.3-type-9 { In reference equality, the two types must be
        cast convertible } {
    
    empty_class T15213t9 {
	boolean m(Cloneable c, int[] i) {
	    return c == i;
	}
    }

} {PASS}
Test Case: 15.21.3-type-10
In reference equality, the two types must be cast convertible

Expected Result: FAIL

Regression Test:

tcltest::test 15.21.3-type-10 { In reference equality, the two types must be
        cast convertible } {
    
    empty_class T15213t10 {
	interface I {}
	boolean m(I i, int[] a) {
	    return i == a;
	}
    }

} {FAIL}
Test Case: 15.21.3-type-11
In reference equality, the two types must be cast convertible

Expected Result: PASS

Regression Test:

tcltest::test 15.21.3-type-11 { In reference equality, the two types must be
        cast convertible } {
    
    empty_class T15213t11 {
	interface I {}
	boolean m(I i, int[] a) {
	    return ((Object)i == a) || (i == (Object) a);
	}
    }

} {PASS}

15.23

Directory : tests/jls/expressions/conditional-and-operator


Test Case: 15.23-optimize-1
Test that a compiler that optimizes && does so correctly

Expected Result: PASS

Regression Test:

tcltest::test 15.23-optimize-1 { Test that a compiler that optimizes && does
        so correctly } {
    
    empty_main T1523o1 {
	boolean b = true;
	if (b && true);
	if (!b && true);
	b = false;
    }

} {PASS}
Test Case: 15.23-optimize-2
Test that a compiler that optimizes && does so correctly

Expected Result: PASS

Regression Test:

tcltest::test 15.23-optimize-2 { Test that a compiler that optimizes && does
        so correctly } {
    
    empty_main T1523o2 {
	boolean b = true;
	if (true && b);
	if (true && !b);
	b = false;
    }

} {PASS}
Test Case: 15.23-optimize-3
Test that a compiler that optimizes && does so correctly

Expected Result: PASS

Regression Test:

tcltest::test 15.23-optimize-3 { Test that a compiler that optimizes && does
        so correctly } {
    
    empty_main T1523o3 {
	boolean b = true;
	if (b && false);
	if (!b && false);
	b = false;
    }

} {PASS}
Test Case: 15.23-optimize-4
Test that a compiler that optimizes && does so correctly

Expected Result: PASS

Regression Test:

tcltest::test 15.23-optimize-4 { Test that a compiler that optimizes && does
        so correctly } {
    
    empty_main T1523o4 {
	boolean b = true;
	if (false && b);
	if (false && !b);
	b = false;
    }

} {PASS}

15.24

Directory : tests/jls/expressions/conditional-or-operator


Test Case: 15.24-optimize-1
Test that a compiler that optimizes || does so correctly

Expected Result: PASS

Regression Test:

tcltest::test 15.24-optimize-1 { Test that a compiler that optimizes || does
        so correctly } {
    
    empty_main T1524o1 {
	boolean b = true;
	if (b || true);
	if (!b || true);
	b = false;
    }

} {PASS}
Test Case: 15.24-optimize-2
Test that a compiler that optimizes || does so correctly

Expected Result: PASS

Regression Test:

tcltest::test 15.24-optimize-2 { Test that a compiler that optimizes || does
        so correctly } {
    
    empty_main T1524o2 {
	boolean b = true;
	if (true || b);
	if (true || !b);
	b = false;
    }

} {PASS}
Test Case: 15.24-optimize-3
Test that a compiler that optimizes || does so correctly

Expected Result: PASS

Regression Test:

tcltest::test 15.24-optimize-3 { Test that a compiler that optimizes || does
        so correctly } {
    
    empty_main T1524o3 {
	boolean b = true;
	if (b || false);
	if (!b || false);
	b = false;
    }

} {PASS}
Test Case: 15.24-optimize-4
Test that a compiler that optimizes || does so correctly

Expected Result: PASS

Regression Test:

tcltest::test 15.24-optimize-4 { Test that a compiler that optimizes || does
        so correctly } {
    
    empty_main T1524o4 {
	boolean b = true;
	if (false || b);
	if (false || !b);
	b = false;
    }

} {PASS}

15.25

Directory : tests/jls/expressions/conditional-operator


Test Case: 15.25-basic-1
?: uses a boolean value to decide which of two other expressions should be evaluated

Expected Result: PASS

Regression Test:

tcltest::test 15.25-basic-1 { ?: uses a boolean value to decide which
        of two other expressions should be evaluated } {
    
    empty_main T1525b1 {String s = true ? "1" : "2";}

} {PASS}
Test Case: 15.25-basic-2
?: uses a boolean value to decide which of two other expressions should be evaluated

Expected Result: PASS

Regression Test:

tcltest::test 15.25-basic-2 { ?: uses a boolean value to decide which
        of two other expressions should be evaluated } {
    
    empty_main T1525b2 {String s = false ? "1" : "2";}

} {PASS}
Test Case: 15.25-syntax-1
conditional operator has three operands

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-syntax-1 { conditional operator has three operands } {
    
    empty_main T1525s1 {String s = false ? : "2";}

} {FAIL}
Test Case: 15.25-syntax-2
conditional operator has three operands

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-syntax-2 { conditional operator has three operands } {
    
    empty_main T1525s2 {String s = false ? "1" : ;}

} {FAIL}
Test Case: 15.25-syntax-3
conditional operator has three operands

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-syntax-3 { conditional operator has three operands } {
    
    empty_main T1525s3 {String s = false ? "1" "2" ;}

} {FAIL}
Test Case: 15.25-syntax-4
conditional operator has three operands

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-syntax-4 { conditional operator has three operands } {
    
    empty_main T1525s4 {String s = ? "1" : "2" ;}

} {FAIL}
Test Case: 15.25-syntax-5
conditional operator has three operands

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-syntax-5 { conditional operator has three operands } {
    
    empty_main T1525s5 {String s = true "1" : "2" ;}

} {FAIL}
Test Case: 15.25-not-boolean-1
first expression must be boolean type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-not-boolean-1 { first expression must be boolean type } {
    
    empty_main T1525nb1 {String s = (byte) 1 ? "1" : "2";}

} {FAIL}
Test Case: 15.25-not-boolean-2
first expression must be boolean type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-not-boolean-2 { first expression must be boolean type } {
    
    empty_main T1525nb2 {String s = (short) 1 ? "1" : "2";}

} {FAIL}
Test Case: 15.25-not-boolean-3
first expression must be boolean type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-not-boolean-3 { first expression must be boolean type } {
    
    empty_main T1525nb3 {String s = '1' ? "1" : "2";}

} {FAIL}
Test Case: 15.25-not-boolean-4
first expression must be boolean type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-not-boolean-4 { first expression must be boolean type } {
    
    empty_main T1525nb4 {String s = 1 ? "1" : "2";}

} {FAIL}
Test Case: 15.25-not-boolean-5
first expression must be boolean type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-not-boolean-5 { first expression must be boolean type } {
    
    empty_main T1525nb5 {String s = 1L ? "1" : "2";}

} {FAIL}
Test Case: 15.25-not-boolean-6
first expression must be boolean type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-not-boolean-6 { first expression must be boolean type } {
    
    empty_main T1525nb6 {String s = 1F ? "1" : "2";}

} {FAIL}
Test Case: 15.25-not-boolean-7
first expression must be boolean type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-not-boolean-7 { first expression must be boolean type } {
    
    empty_main T1525nb7 {String s = 1D ? "1" : "2";}

} {FAIL}
Test Case: 15.25-not-boolean-8
first expression must be boolean type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-not-boolean-8 { first expression must be boolean type } {
    
    empty_main T1525nb8 {String s = "true" ? "1" : "2";}

} {FAIL}
Test Case: 15.25-not-boolean-9
first expression must be boolean type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-not-boolean-9 { first expression must be boolean type } {
    
    empty_main T1525nb9 {String s = new Object() ? "1" : "2";}

} {FAIL}
Test Case: 15.25-not-boolean-10
first expression must be boolean type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-not-boolean-10 { first expression must be boolean type } {
    
    empty_main T1525nb10 {String s = null ? "1" : "2";}

} {FAIL}
Test Case: 15.25-not-boolean-11
first expression must be boolean type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-not-boolean-11 { first expression must be boolean type } {
    
    empty_main T1525nb11 {String s = System.out.println() ? "1" : "2";}

} {FAIL}
Test Case: 15.25-operand-type-1
second and third operands may be boolean

Expected Result: PASS

Regression Test:

tcltest::test 15.25-operand-type-1 { second and third operands may
        be boolean } {
    
    empty_main T1525ot1 {boolean b = true ? true : false;}

} {PASS}
Test Case: 15.25-operand-type-2
second and third operands may be null

Expected Result: PASS

Regression Test:

tcltest::test 15.25-operand-type-2 { second and third operands may be null } {
    
    empty_main T1525ot2 {String s = true ? null : null;}

} {PASS}
Test Case: 15.25-operand-type-3
second or third operands may be null

Expected Result: PASS

Regression Test:

tcltest::test 15.25-operand-type-3 { second or third operands may be null } {
    
    empty_main T1525ot3 {String s = true ? "" : null;}

} {PASS}
Test Case: 15.25-operand-type-4
second or third operands may be null

Expected Result: PASS

Regression Test:

tcltest::test 15.25-operand-type-4 { second or third operands may be null } {
    
    empty_main T1525ot4 {String s = true ? null : "";}

} {PASS}
Test Case: 15.25-operand-type-void-1
operand may not be void type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-operand-type-void-1 { operand may not be void type } {
    
    empty_class T1525otv1 {
        void foo() {}
        void bar() {
            String s = true ? foo() : foo();
        }
    }

} {FAIL}
Test Case: 15.25-operand-type-void-2
operand may not be void type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-operand-type-void-2 { operand may not be void type } {
    
    empty_class T1525otv2 {
        void foo() {}
        void bar() {
            String s = false ? foo() : "";
        }
    }

} {FAIL}
Test Case: 15.25-operand-type-void-3
operand may not be void type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-operand-type-void-3 { operand may not be void type } {
    
    empty_class T1525otv3 {
        void foo() {}
        void bar() {
            String s = true ? "" : foo();
        }
    }

} {FAIL}
Test Case: 15.25-operand-type-void-4
operand may not be void type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-operand-type-void-4 { operand may not be void type } {
    
    empty_class T1525otv4 {
        void foo() {}
        void bar() {
            String s = true ? null : foo();
        }
    }

} {FAIL}
Test Case: 15.25-operand-type-void-5
operand may not be void type

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-operand-type-void-5 { operand may not be void type } {
    
    empty_class T1525otv5 {
        void foo() {}
        void bar() {
            String s = false ? foo() : null;
        }
    }

} {FAIL}
Test Case: 15.25-byte-operand-type-mismatch-1
if one operand is of type byte and the other is a constant expression of type int whose value is representable as a byte, then the type of the conditional expression is byte

Expected Result: PASS

Regression Test:

tcltest::test 15.25-byte-operand-type-mismatch-1 { if one operand is of
        type byte and the other is a constant expression of type int
        whose value is representable as a byte, then the type of the
        conditional expression is byte } {
    
    empty_class T1525botm1 {
        void foo(byte b) {}
        void foo(int i) throws Exception {}
        void bar(boolean b) {
            foo(b ? (byte) 0 : 0);
            foo(b ? 0 : (byte) 0);
        }
    }

} {PASS}
Test Case: 15.25-byte-operand-type-mismatch-2
if one operand is of type byte and the other is a constant expression of type int whose value is representable as a byte, then the type of the conditional expression is byte, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-byte-operand-type-mismatch-2 { if one operand is of
        type byte and the other is a constant expression of type int
        whose value is representable as a byte, then the type of the
        conditional expression is byte, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525botm2 {
        void foo(byte b) throws Exception {}
        void foo(int i) {}
        void bar(boolean b, int i) {
            foo(b ? (byte) 0 : i);
            foo(b ? i : (byte) 0);
        }
    }

} {PASS}
Test Case: 15.25-byte-operand-type-mismatch-3
if one operand is of type byte and the other is a constant expression of type int whose value is representable as a byte, then the type of the conditional expression is byte, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-byte-operand-type-mismatch-3 { if one operand is of
        type byte and the other is a constant expression of type int
        whose value is representable as a byte, then the type of the
        conditional expression is byte, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525botm3 {
        void foo(byte b) throws Exception {}
        void foo(int i) {}
        void bar(boolean b) {
            foo(b ? (byte) 0 : 128);
            foo(b ? 128 : (byte) 0);
        }
    }

} {PASS}
Test Case: 15.25-byte-operand-type-mismatch-4
if one operand is of type byte and the other is a constant expression of type int whose value is representable as a byte, then the type of the conditional expression is byte, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-byte-operand-type-mismatch-4 { if one operand is of
        type byte and the other is a constant expression of type int
        whose value is representable as a byte, then the type of the
        conditional expression is byte, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525botm4 {
        void foo(byte b) throws Exception {}
        void foo(int i) {}
        void bar() {
            foo(true ? (byte) 0 : 128);
            foo(false ? (byte) 0 : 128);
            foo(true ? 128 : (byte) 0);
            foo(false ? 128 : (byte) 0);
        }
    }

} {PASS}
Test Case: 15.25-byte-operand-type-mismatch-5
if one operand is of type byte and the other is a constant expression of type int whose value is representable as a byte, then the type of the conditional expression is byte, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-byte-operand-type-mismatch-5 { if one operand is of
        type byte and the other is a constant expression of type int
        whose value is representable as a byte, then the type of the
        conditional expression is byte, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525botm5 {
        void foo(byte b) {}
        void foo(int i) throws Exception {}
        void bar(boolean b, byte b1) {
            foo(b ? b1 : 0);
            foo(b ? 0 : b1);
        }
    }

} {PASS}
Test Case: 15.25-byte-operand-type-mismatch-6
if one operand is of type byte and the other is a constant expression of type int whose value is representable as a byte, then the type of the conditional expression is byte, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-byte-operand-type-mismatch-6 { if one operand is of
        type byte and the other is a constant expression of type int
        whose value is representable as a byte, then the type of the
        conditional expression is byte, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525botm6 {
        void foo(byte b) {}
        void foo(int i) throws Exception {}
        void bar(byte b) {
            foo(true ? b : 0);
            foo(false ? b : 0);
            foo(true ? 0 : b);
            foo(false ? 0 : b);
        }
    }

} {PASS}
Test Case: 15.25-byte-operand-type-mismatch-7
if one operand is of type byte and the other is a constant expression of type int whose value is representable as a byte, then the type of the conditional expression is byte, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-byte-operand-type-mismatch-7 { if one operand is of
        type byte and the other is a constant expression of type int
        whose value is representable as a byte, then the type of the
        conditional expression is byte, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525botm7 {
        void foo(byte b) throws Exception {}
        void foo(int i) {}
        void bar(boolean b, byte b1, int i) {
            foo(b ? b1 : i);
            foo(b ? i : b1);
        }
    }

} {PASS}
Test Case: 15.25-byte-operand-type-mismatch-8
if one operand is of type byte and the other is a constant expression of type int whose value is representable as a byte, then the type of the conditional expression is byte, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-byte-operand-type-mismatch-8 { if one operand is of
        type byte and the other is a constant expression of type int
        whose value is representable as a byte, then the type of the
        conditional expression is byte, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525botm8 {
        void foo(byte b) throws Exception {}
        void foo(int i) {}
        void bar(byte b, int i) {
            foo(true ? b : i);
            foo(false ? b : i);
            foo(true ? i : b);
            foo(false ? i : b);
        }
    }

} {PASS}
Test Case: 15.25-byte-operand-type-mismatch-9
if one operand is of type byte and the other is a constant expression of type int whose value is representable as a byte, then the type of the conditional expression is byte, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-byte-operand-type-mismatch-9 { if one operand is of
        type byte and the other is a constant expression of type int
        whose value is representable as a byte, then the type of the
        conditional expression is byte, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525botm9 {
        void foo(byte b) throws Exception {}
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar(boolean b, byte b1) {
            foo(b ? b1 : '0');
            foo(b ? '0' : b1);
        }
    }

} {PASS}
Test Case: 15.25-byte-operand-type-mismatch-10
if one operand is of type byte and the other is a constant expression of type int whose value is representable as a byte, then the type of the conditional expression is byte, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-byte-operand-type-mismatch-10 { if one operand is of
        type byte and the other is a constant expression of type int
        whose value is representable as a byte, then the type of the
        conditional expression is byte, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525botm10 {
        void foo(byte b) throws Exception {}
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar(byte b) {
            foo(true ? b : '0');
            foo(false ? b : '0');
            foo(true ? '0' : b);
            foo(false ? '0' : b);
        }
    }

} {PASS}
Test Case: 15.25-byte-operand-type-mismatch-11
if one operand is of type byte and the other is a constant expression of type int whose value is representable as a byte, then the type of the conditional expression is byte, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-byte-operand-type-mismatch-11 { if one operand is of
        type byte and the other is a constant expression of type int
        whose value is representable as a byte, then the type of the
        conditional expression is byte, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525botm11 {
        void foo(byte b) throws Exception {}
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar(boolean b, byte b1, char c) {
            foo(b ? b1 : c);
            foo(b ? c : b1);
        }
    }

} {PASS}
Test Case: 15.25-byte-operand-type-mismatch-12
if one operand is of type byte and the other is a constant expression of type int whose value is representable as a byte, then the type of the conditional expression is byte, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-byte-operand-type-mismatch-12 { if one operand is of
        type byte and the other is a constant expression of type int
        whose value is representable as a byte, then the type of the
        conditional expression is byte, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525botm12 {
        void foo(byte b) throws Exception {}
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar(byte b, char c) {
            foo(true ? b : c);
            foo(false ? b : c);
            foo(true ? c : b);
            foo(false ? c : b);
        }
    }

} {PASS}
Test Case: 15.25-short-operand-type-mismatch-1
if one operand is of type byte and the other is of type short, then the type of the conditional expression is short

Expected Result: PASS

Regression Test:

tcltest::test 15.25-short-operand-type-mismatch-1 { if one operand is of
        type byte and the other is of type short, then the type of the
        conditional expression is short } {
    
    empty_class T1525sotm1 {
        void foo(short s) {}
        void foo(byte b) throws Exception {}
        void foo(int i) throws Exception {}
        void bar(boolean b) {
            foo(b ? (byte) 0 : (short) 0);
            foo(true ? (byte) 0 : (short) 0);
            foo(false ? (byte) 0 : (short) 0);
        }
    }

} {PASS}
Test Case: 15.25-short-operand-type-mismatch-2
if one operand is of type short and the other is a constant expression of type int whose value is representable as a short, then the type of the conditional expression is short

Expected Result: PASS

Regression Test:

tcltest::test 15.25-short-operand-type-mismatch-2 { if one operand is of
        type short and the other is a constant expression of type int
        whose value is representable as a short, then the type of the
        conditional expression is short } {
    
    empty_class T1525sotm2 {
        void foo(short s) {}
        void foo(int i) throws Exception {}
        void bar(boolean b) {
            foo(b ? (short) 0 : 0);
        }
    }

} {PASS}
Test Case: 15.25-short-operand-type-mismatch-3
if one operand is of type short and the other is a constant expression of type int whose value is representable as a short, then the type of the conditional expression is short, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-short-operand-type-mismatch-3 { if one operand is of
        type short and the other is a constant expression of type int
        whose value is representable as a short, then the type of the
        conditional expression is short, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525sotm3 {
        void foo(short s) throws Exception {}
        void foo(int i) {}
        void bar(boolean b, int i) {
            foo(b ? (short) 0 : i);
        }
    }

} {PASS}
Test Case: 15.25-short-operand-type-mismatch-4
if one operand is of type short and the other is a constant expression of type int whose value is representable as a short, then the type of the conditional expression is short, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-short-operand-type-mismatch-4 { if one operand is of
        type short and the other is a constant expression of type int
        whose value is representable as a short, then the type of the
        conditional expression is short, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525sotm4 {
        void foo(short s) throws Exception {}
        void foo(int i) {}
        void bar(boolean b) {
            foo(b ? (short) 0 : 32768);
        }
    }

} {PASS}
Test Case: 15.25-short-operand-type-mismatch-5
if one operand is of type short and the other is a constant expression of type int whose value is representable as a short, then the type of the conditional expression is short, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-short-operand-type-mismatch-5 { if one operand is of
        type short and the other is a constant expression of type int
        whose value is representable as a short, then the type of the
        conditional expression is short, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525sotm5 {
        void foo(short s) throws Exception {}
        void foo(int i) {}
        void bar() {
            foo(true ? (short) 0 : 32768);
            foo(false ? (short) 0 : 32768);
        }
    }

} {PASS}
Test Case: 15.25-short-operand-type-mismatch-6
if one operand is of type byte and the other is of type short, then the type of the conditional expression is short

Expected Result: PASS

Regression Test:

tcltest::test 15.25-short-operand-type-mismatch-6 { if one operand is of
        type byte and the other is of type short, then the type of the
        conditional expression is short } {
    
    empty_class T1525sotm6 {
        void foo(short s) {}
        void foo(byte b) throws Exception {}
        void foo(int i) throws Exception {}
        void bar(boolean b, byte b1) {
            foo(b ? b1 : (short) 0);
            foo(true ? b1 : (short) 0);
            foo(false ? b1 : (short) 0);
        }
    }

} {PASS}
Test Case: 15.25-short-operand-type-mismatch-7
if one operand is of type byte and the other is of type short, then the type of the conditional expression is short

Expected Result: PASS

Regression Test:

tcltest::test 15.25-short-operand-type-mismatch-7 { if one operand is of
        type byte and the other is of type short, then the type of the
        conditional expression is short } {
    
    empty_class T1525sotm7 {
        void foo(short s) {}
        void foo(byte b) throws Exception {}
        void foo(int i) throws Exception {}
        void bar(boolean b, short s) {
            foo(b ? (byte) 0 : s);
            foo(true ? (byte) 0 : s);
            foo(false ? (byte) 0 : s);
        }
    }

} {PASS}
Test Case: 15.25-short-operand-type-mismatch-8
if one operand is of type byte and the other is of type short, then the type of the conditional expression is short

Expected Result: PASS

Regression Test:

tcltest::test 15.25-short-operand-type-mismatch-8 { if one operand is of
        type byte and the other is of type short, then the type of the
        conditional expression is short } {
    
    empty_class T1525sotm8 {
        void foo(short s) {}
        void foo(byte b) throws Exception {}
        void foo(int i) throws Exception {}
        void bar(boolean b, byte b1, short s) {
            foo(b ? b1 : s);
            foo(true ? b1 : s);
            foo(false ? b1 : s);
        }
    }

} {PASS}
Test Case: 15.25-short-operand-type-mismatch-9
if one operand is of type short and the other is a constant expression of type int whose value is representable as a short, then the type of the conditional expression is short, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-short-operand-type-mismatch-9 { if one operand is of
        type short and the other is a constant expression of type int
        whose value is representable as a short, then the type of the
        conditional expression is short, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525sotm9 {
        void foo(short s) {}
        void foo(int i) throws Exception {}
        void bar(boolean b, short s) {
            foo(b ? s : 0);
            foo(b ? 0 : s);
        }
    }

} {PASS}
Test Case: 15.25-short-operand-type-mismatch-10
if one operand is of type short and the other is a constant expression of type int whose value is representable as a short, then the type of the conditional expression is short, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-short-operand-type-mismatch-10 { if one operand is of
        type short and the other is a constant expression of type int
        whose value is representable as a short, then the type of the
        conditional expression is short, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525sotm10 {
        void foo(short s) {}
        void foo(int i) throws Exception {}
        void bar(short s) {
            foo(true ? s : 0);
            foo(false ? s : 0);
            foo(true ? 0 : s);
            foo(false ? 0 : s);
        }
    }

} {PASS}
Test Case: 15.25-short-operand-type-mismatch-11
if one operand is of type short and the other is a constant expression of type int whose value is representable as a short, then the type of the conditional expression is short, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-short-operand-type-mismatch-11 { if one operand is of
        type short and the other is a constant expression of type int
        whose value is representable as a short, then the type of the
        conditional expression is short, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525sotm11 {
        void foo(short s) throws Exception {}
        void foo(int i) {}
        void bar(boolean b, short s, int i) {
            foo(b ? s : i);
            foo(b ? i : s);
        }
    }

} {PASS}
Test Case: 15.25-short-operand-type-mismatch-12
if one operand is of type short and the other is a constant expression of type int whose value is representable as a short, then the type of the conditional expression is short, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-short-operand-type-mismatch-12 { if one operand is of
        type short and the other is a constant expression of type int
        whose value is representable as a short, then the type of the
        conditional expression is short, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525sotm12 {
        void foo(short s) throws Exception {}
        void foo(int i) {}
        void bar(short s, int i) {
            foo(true ? s : i);
            foo(false ? s : i);
            foo(true ? i : s);
            foo(false ? i : s);
        }
    }

} {PASS}
Test Case: 15.25-char-operand-type-mismatch-1
if one operand is of type char and the other is a constant expression of type int whose value is representable as a char, then the type of the conditional expression is char

Expected Result: PASS

Regression Test:

tcltest::test 15.25-char-operand-type-mismatch-1 { if one operand is of
        type char and the other is a constant expression of type int
        whose value is representable as a char, then the type of the
        conditional expression is char } {
    
    empty_class T1525cotm1 {
        void foo(char c) {}
        void foo(int i) throws Exception {}
        void bar(boolean b) {
            foo(b ? '0' : 0);
            foo(b ? 0 : '0');
        }
    }

} {PASS}
Test Case: 15.25-char-operand-type-mismatch-2
if one operand is of type char and the other is a constant expression of type int whose value is representable as a char, then the type of the conditional expression is char, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-char-operand-type-mismatch-2 { if one operand is of
        type char and the other is a constant expression of type int
        whose value is representable as a char, then the type of the
        conditional expression is char, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525cotm2 {
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar(boolean b, int i) {
            foo(b ? '0' : i);
            foo(b ? i : '0');
        }
    }

} {PASS}
Test Case: 15.25-char-operand-type-mismatch-3
if one operand is of type char and the other is a constant expression of type int whose value is representable as a char, then the type of the conditional expression is char, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-char-operand-type-mismatch-3 { if one operand is of
        type char and the other is a constant expression of type int
        whose value is representable as a char, then the type of the
        conditional expression is char, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525cotm3 {
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar(boolean b) {
            foo(b ? '0' : -1);
            foo(b ? -1 : '0');
        }
    }

} {PASS}
Test Case: 15.25-char-operand-type-mismatch-4
if one operand is of type char and the other is a constant expression of type int whose value is representable as a char, then the type of the conditional expression is char, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-char-operand-type-mismatch-4 { if one operand is of
        type char and the other is a constant expression of type int
        whose value is representable as a char, then the type of the
        conditional expression is char, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525cotm4 {
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar() {
            foo(true ? '0' : -1);
            foo(false ? '0' : -1);
            foo(true ? -1 : '0');
            foo(false ? -1 : '0');
        }
    }

} {PASS}
Test Case: 15.25-char-operand-type-mismatch-5
if one operand is of type char and the other is a constant expression of type int whose value is representable as a char, then the type of the conditional expression is char, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-char-operand-type-mismatch-5 { if one operand is of
        type char and the other is a constant expression of type int
        whose value is representable as a char, then the type of the
        conditional expression is char, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525cotm5 {
        void foo(char c) {}
        void foo(int i) throws Exception {}
        void bar(boolean b, char c) {
            foo(b ? c : 0);
            foo(b ? 0 : c);
        }
    }

} {PASS}
Test Case: 15.25-char-operand-type-mismatch-6
if one operand is of type char and the other is a constant expression of type int whose value is representable as a char, then the type of the conditional expression is char, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-char-operand-type-mismatch-6 { if one operand is of
        type char and the other is a constant expression of type int
        whose value is representable as a char, then the type of the
        conditional expression is char, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525cotm6 {
        void foo(char c) {}
        void foo(int i) throws Exception {}
        void bar(char c) {
            foo(true ? c : 0);
            foo(false ? c : 0);
            foo(true ? 0 : c);
            foo(false ? 0 : c);
        }
    }

} {PASS}
Test Case: 15.25-char-operand-type-mismatch-7
if one operand is of type char and the other is a constant expression of type int whose value is representable as a char, then the type of the conditional expression is char, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-char-operand-type-mismatch-7 { if one operand is of
        type char and the other is a constant expression of type int
        whose value is representable as a char, then the type of the
        conditional expression is char, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525cotm7 {
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar(boolean b, char c, int i) {
            foo(b ? c : i);
            foo(b ? i : c);
        }
    }

} {PASS}
Test Case: 15.25-char-operand-type-mismatch-8
if one operand is of type char and the other is a constant expression of type int whose value is representable as a char, then the type of the conditional expression is char, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-char-operand-type-mismatch-8 { if one operand is of
        type char and the other is a constant expression of type int
        whose value is representable as a char, then the type of the
        conditional expression is char, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525cotm8 {
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar(char c, int i) {
            foo(true ? c : i);
            foo(false ? c : i);
            foo(true ? i : c);
            foo(false ? i : c);
        }
    }

} {PASS}
Test Case: 15.25-char-operand-type-mismatch-9
if one operand is of type char and the other is a constant expression of type int whose value is representable as a char, then the type of the conditional expression is char, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-char-operand-type-mismatch-9 { if one operand is of
        type char and the other is a constant expression of type int
        whose value is representable as a char, then the type of the
        conditional expression is char, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525cotm9 {
        void foo(short s) throws Exception {}
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar(boolean b, char c) {
            foo(b ? c : (short) 0);
            foo(b ? (short) 0 : c);
        }
    }

} {PASS}
Test Case: 15.25-char-operand-type-mismatch-10
if one operand is of type char and the other is a constant expression of type int whose value is representable as a char, then the type of the conditional expression is char, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-char-operand-type-mismatch-10 { if one operand is of
        type char and the other is a constant expression of type int
        whose value is representable as a char, then the type of the
        conditional expression is char, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525cotm10 {
        void foo(short s) throws Exception {}
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar(char c) {
            foo(true ? c : (short) 0);
            foo(false ? c : (short) 0);
            foo(true ? (short) 0 : c);
            foo(false ? (short) 0 : c);
        }
    }

} {PASS}
Test Case: 15.25-char-operand-type-mismatch-11
if one operand is of type char and the other is a constant expression of type int whose value is representable as a char, then the type of the conditional expression is char, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-char-operand-type-mismatch-11 { if one operand is of
        type char and the other is a constant expression of type int
        whose value is representable as a char, then the type of the
        conditional expression is char, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525cotm11 {
        void foo(short s) throws Exception {}
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar(boolean b, char c, short s) {
            foo(b ? c : s);
            foo(b ? s : c);
        }
    }

} {PASS}
Test Case: 15.25-char-operand-type-mismatch-12
if one operand is of type char and the other is a constant expression of type int whose value is representable as a char, then the type of the conditional expression is char, Otherwise, binary numeric promotion is applied to the operand types

Expected Result: PASS

Regression Test:

tcltest::test 15.25-char-operand-type-mismatch-12 { if one operand is of
        type char and the other is a constant expression of type int
        whose value is representable as a char, then the type of the
        conditional expression is char, Otherwise, binary numeric
        promotion is applied to the operand types } {
    
    empty_class T1525cotm12 {
        void foo(short s) throws Exception {}
        void foo(char c) throws Exception {}
        void foo(int i) {}
        void bar(char c, short s) {
            foo(true ? c : s);
            foo(false ? c : s);
            foo(true ? s : c);
            foo(false ? s : c);
        }
    }

} {PASS}
Test Case: 15.25-operand-type-mismatch-1
binary numeric promotion is applied to mismatched primitive operand types if no special cases apply

Expected Result: PASS

Regression Test:

tcltest::test 15.25-operand-type-mismatch-1 { binary numeric promotion
        is applied to mismatched primitive operand types if no
        special cases apply } {
    
    empty_main T1525otm1 {float f = true ? 0 : 0F;}

} {PASS}
Test Case: 15.25-operand-type-mismatch-2
binary numeric promotion is applied to mismatched primitive operand types if no special cases apply

Expected Result: PASS

Regression Test:

tcltest::test 15.25-operand-type-mismatch-2 { binary numeric promotion
        is applied to mismatched primitive operand types if no
        special cases apply } {
    
    empty_main T1525otm2 {double d = false ? 'c' : 0D;}

} {PASS}
Test Case: 15.25-operand-type-mismatch-3
binary numeric promotion is applied to mismatched primitive operand types if no special cases apply

Expected Result: PASS

Regression Test:

tcltest::test 15.25-operand-type-mismatch-3 { binary numeric promotion
        is applied to mismatched primitive operand types if no
        special cases apply } {
    
    empty_main T1525otm3 {long l = true ? (byte) 0 : 0L;}

} {PASS}
Test Case: 15.25-operand-type-mismatch-4
reference operand types must match or they must support assignment conversion

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-operand-type-mismatch-4 { reference operand types
        must match or they must support assignment conversion } {
    
    empty_main T1525otm4  {Object o = true ? new Integer(0) : new Double(0D);}

} {FAIL}
Test Case: 15.25-operand-type-mismatch-5
reference operand types must match or they must support assignment conversion

Expected Result: PASS

Regression Test:

tcltest::test 15.25-operand-type-mismatch-5 { reference operand types
        must match or they must support assignment conversion } {
    
    empty_class T1525otm5 {
        class C1 {}
        class C2 extends C1 {}
        void foo() {
            Object o = true ? new C1() : new C2();
        }
    }

} {PASS}
Test Case: 15.25-operand-type-mismatch-6
primitive and reference types don't mix

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-operand-type-mismatch-6 { primitive and reference
        types don't mix } {
    
    empty_main T1525otm6 {Object o = true ? "" : 42;}

} {FAIL}
Test Case: 15.25-operand-type-mismatch-7
primitive and reference types don't mix

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-operand-type-mismatch-7 { primitive and reference
        types don't mix } {
    
    empty_main T1525otm7 {Object o = true ? 42 : "";}

} {FAIL}
Test Case: 15.25-operand-type-mismatch-8
primitive and reference types don't mix, even in a method invocation

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-operand-type-mismatch-8 { primitive and reference
        types don't mix, even in a method invocation } {
    
    empty_class T1525otm8 {
        void foo(String s) {}
        void foo(int i) {}
        void bar() {
            foo(true ? "" : 42);
        }
    }

} {FAIL}
Test Case: 15.25-operand-type-mismatch-9
reference operand types must match or they must support assignment conversion

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-operand-type-mismatch-9 { reference operand types
        must match or they must support assignment conversion } {
    
    empty_class T1525otm9 {
        class C1 {}
        class C2 extends C1 {}
        void foo() {
	    C2 c = true ? new C2() : new C1();
	    c = false ? new C1() : new C2();
        }
    }

} {FAIL}
Test Case: 15.25-operand-type-mismatch-10
reference array types mix iff the component types are assignable

Expected Result: FAIL

Regression Test:

tcltest::test 15.25-operand-type-mismatch-10 { reference array types mix iff the
        component types are assignable } {
    
    empty_main T1525otm10 {
	Object o = true ? new int[1] : new short[1];
    }

} {FAIL}
Test Case: 15.25-operand-type-mismatch-11
reference array types mix iff the component types are assignable

Expected Result: PASS

Regression Test:

tcltest::test 15.25-operand-type-mismatch-11 { reference array types mix iff the
        component types are assignable } {
    
    empty_main T1525otm11 {
	Object o = true ? new Integer[1] : new Number[1];
    }

} {PASS}
Test Case: 15.25-error-1
Check for compiler error optimizing the following conditional operator

Expected Result: PASS

Regression Test:

tcltest::test 15.25-error-1 { Check for compiler error optimizing the
        following conditional operator } {
    
    empty_class T1525e1 {
        boolean isNeg(int i) {
            return (i < 0) ? true : false;
        }
    }

} {PASS}

15.26.2

Directory : tests/jls/expressions/assignment-operators/compound-assignment-operators


Test Case: 15.26.2-string-1
String += null is valid

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-string-1 { String += null is valid } {
    
    compile [saveas T15262s1.java {
class T15262s1 {
    void foo() {
	String s = "";
	s += null;
    }
}
    }]

} {PASS}
Test Case: 15.26.2-string-2
String += void method is invalid

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-string-2 { String += void method is invalid } {
    
  compile [saveas T15262s2.java {
class T15262s2 {
    void foo() {
	String s = "";
	s += System.out.println();
    }
}
    }]

} {FAIL}
Test Case: 15.26.2-string-3
left-hand side of += should be String

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-string-3 { left-hand side of += should be String } {
    
    # Sun seems to have relaxed this to left-hand side of += should be
    # assignment compatible if right-hand side is type String (or null)
    compile [saveas T15262s3.java {
class T15262s3 {
    void foo() {
	Object o = null;
	o += "";
    }
}
    }]

} {FAIL}
Test Case: 15.26.2-string-4
left-hand side of += should be String

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-string-4 { left-hand side of += should be String } {
    
    # Sun seems to have relaxed this to left-hand side of += should be
    # assignment compatible if right-hand side is type String (or null)
    compile [saveas T15262s4.java {
class T15262s4 {
    void foo() {
	Comparable[] c = new Integer[1];
	c[0] += "";
    }
}
    }]

} {FAIL}
Test Case: 15.26.2-string-5
test String += when right side is not String, jikes bug 3066

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-string-5 { test String += when right side is not String,
        jikes bug 3066 } {
    
    empty_main T15262s5 {
	String s = "";
	s += true;
	s += 1;
	s += '1';
	s += 1L;
	s += 1.0f;
	s += 1.0;
    }

} {PASS}
Test Case: 15.26.2-string-6
test String += when right side is not String, jikes bug 3066

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-string-6 { test String += when right side is not String,
        jikes bug 3066 } {
    
    empty_main T15262s5 {
	String s = "";
	s += true + s;
	s += 1 + s;
	s += '1' + s;
	s += 1L + s;
	s += 1.0f + s;
	s += 1.0 + s;
    }

} {PASS}
Test Case: 15.26.2-mult-1
test legal identity *= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-mult-1 { test legal identity *= assignments } {
    
    empty_main T15262mult1 {
	byte b = 1;
	b *= 1;
	short s = 1;
	s *= 1;
	char c = 1;
	c *= 1;
	int i = 1;
	i *= 1;
	long l = 1;
	l *= 1;
	float f = 1;
	f *= 1;
	double d = 1;
	d *= 1;
    }

} {PASS}
Test Case: 15.26.2-mult-2
test illegal *= assignments: boolean argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mult-2 { test illegal *= assignments: boolean argument } {
    
    empty_main T15262mult2 {
	int i = 1;
	i *= false;
    }

} {FAIL}
Test Case: 15.26.2-mult-3
test illegal *= assignments: void argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mult-3 { test illegal *= assignments: void argument } {
    
    empty_class T15262mult3 {
	void foo() {}
	void bar() {
	    int i = 1;
	    i *= foo();
	}
    }

} {FAIL}
Test Case: 15.26.2-mult-4
test illegal *= assignments: Object argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mult-4 { test illegal *= assignments: Object argument } {
    
    empty_main T15262mult4 {
	int i = 1;
	i *= new Object();
    }

} {FAIL}
Test Case: 15.26.2-mult-5
test illegal *= assignments: String argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mult-5 { test illegal *= assignments: String argument } {
    
    empty_main T15262mult5 {
	int i = 1;
	i *= "";
    }

} {FAIL}
Test Case: 15.26.2-mult-6
test illegal *= assignments: null argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mult-6 { test illegal *= assignments: null argument } {
    
    empty_main T15262mult6 {
	int i = 1;
	i *= null;
    }

} {FAIL}
Test Case: 15.26.2-mult-7
test illegal *= assignments: Object variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mult-7 { test illegal *= assignments: Object variable } {
    
    empty_main T15262mult7 {
	Object o = new Object();
	o *= 1;
    }

} {FAIL}
Test Case: 15.26.2-mult-8
test illegal *= assignments: String variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mult-8 { test illegal *= assignments: String variable } {
    
    empty_main T15262mult8 {
	String s = "";
	s *= 1;
    }

} {FAIL}
Test Case: 15.26.2-mult-9
test illegal *= assignments: null variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mult-9 { test illegal *= assignments: null variable } {
    
    empty_main T15262mult9 {
	null *= 1;
    }

} {FAIL}
Test Case: 15.26.2-mult-10
test illegal *= assignments: boolean variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mult-10 { test illegal *= assignments: boolean variable } {
    
    empty_main T15262mult10 {
	boolean b = true;
	b *= true;
    }

} {FAIL}
Test Case: 15.26.2-mult-11
test illegal *= assignments: non-variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mult-11 { test illegal *= assignments: non-variable } {
    
    empty_main T15262mult11 {
	1 *= 1;
    }

} {FAIL}
Test Case: 15.26.2-mult-12
test illegal *= assignments: parenthesized expressions can now be variables

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-mult-12 { test illegal *= assignments: parenthesized
        expressions can now be variables } {
    
    ok_pass_or_warn [empty_main T15262mult12 {
	int i = 1;
	(i) *= 1;
    }]

} {OK}
Test Case: 15.26.2-mult-13
test widening *= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-mult-13 { test widening *= assignments } {
    
    empty_main T15262mult13 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	float f = 1;
	double d = 1;
	s *= b;
	i *= b;
	i *= s;
	i *= c;
	l *= b;
	l *= s;
	l *= c;
	l *= i;
	f *= b;
	f *= s;
	f *= c;
	f *= i;
	f *= l;
	d *= b;
	d *= s;
	d *= c;
	d *= i;
	d *= l;
	d *= f;
    }

} {PASS}
Test Case: 15.26.2-mult-14
test narrowing *= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-mult-14 { test narrowing *= assignments } {
    
    empty_main T15262mult14 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	float f = 1;
	double d = 1;
	b *= s;
	b *= c;
	b *= i;
	b *= l;
	b *= f;
	b *= d;
	s *= c;
	s *= i;
	s *= l;
	s *= f;
	s *= d;
	c *= b;
	c *= s;
	c *= i;
	c *= l;
	c *= f;
	c *= d;
	i *= l;
	i *= f;
	i *= d;
	l *= f;
	l *= d;
	f *= d;
    }

} {PASS}
Test Case: 15.26.2-div-1
test legal identity /= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-div-1 { test legal identity /= assignments } {
    
    empty_main T15262div1 {
	byte b = 1;
	b /= 1;
	short s = 1;
	s /= 1;
	char c = 1;
	c /= 1;
	int i = 1;
	i /= 1;
	long l = 1;
	l /= 1;
	float f = 1;
	f /= 1;
	double d = 1;
	d /= 1;
    }

} {PASS}
Test Case: 15.26.2-div-2
test illegal /= assignments: boolean argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-div-2 { test illegal /= assignments: boolean argument } {
    
    empty_main T15262div2 {
	int i = 1;
	i /= false;
    }

} {FAIL}
Test Case: 15.26.2-div-3
test illegal /= assignments: void argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-div-3 { test illegal /= assignments: void argument } {
    
    empty_class T15262div3 {
	void foo() {}
	void bar() {
	    int i = 1;
	    i /= foo();
	}
    }

} {FAIL}
Test Case: 15.26.2-div-4
test illegal /= assignments: Object argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-div-4 { test illegal /= assignments: Object argument } {
    
    empty_main T15262div4 {
	int i = 1;
	i /= new Object();
    }

} {FAIL}
Test Case: 15.26.2-div-5
test illegal /= assignments: String argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-div-5 { test illegal /= assignments: String argument } {
    
    empty_main T15262div5 {
	int i = 1;
	i /= "";
    }

} {FAIL}
Test Case: 15.26.2-div-6
test illegal /= assignments: null argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-div-6 { test illegal /= assignments: null argument } {
    
    empty_main T15262div6 {
	int i = 1;
	i /= null;
    }

} {FAIL}
Test Case: 15.26.2-div-7
test illegal /= assignments: Object variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-div-7 { test illegal /= assignments: Object variable } {
    
    empty_main T15262div7 {
	Object o = new Object();
	o /= 1;
    }

} {FAIL}
Test Case: 15.26.2-div-8
test illegal /= assignments: String variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-div-8 { test illegal /= assignments: String variable } {
    
    empty_main T15262div8 {
	String s = "";
	s /= 1;
    }

} {FAIL}
Test Case: 15.26.2-div-9
test illegal /= assignments: null variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-div-9 { test illegal /= assignments: null variable } {
    
    empty_main T15262div9 {
	null /= 1;
    }

} {FAIL}
Test Case: 15.26.2-div-10
test illegal /= assignments: boolean variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-div-10 { test illegal /= assignments: boolean variable } {
    
    empty_main T15262div10 {
	boolean b = true;
	b /= true;
    }

} {FAIL}
Test Case: 15.26.2-div-11
test illegal /= assignments: non-variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-div-11 { test illegal /= assignments: non-variable } {
    
    empty_main T15262div11 {
	1 /= 1;
    }

} {FAIL}
Test Case: 15.26.2-div-12
test illegal /= assignments: parenthesized expressions can now be variables

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-div-12 { test illegal /= assignments: parenthesized
        expressions can now be variables } {
    
    ok_pass_or_warn [empty_main T15262div12 {
	int i = 1;
	(i) /= 1;
    }]

} {OK}
Test Case: 15.26.2-div-13
test widening /= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-div-13 { test widening /= assignments } {
    
    empty_main T15262div13 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	float f = 1;
	double d = 1;
	s /= b;
	i /= b;
	i /= s;
	i /= c;
	l /= b;
	l /= s;
	l /= c;
	l /= i;
	f /= b;
	f /= s;
	f /= c;
	f /= i;
	f /= l;
	d /= b;
	d /= s;
	d /= c;
	d /= i;
	d /= l;
	d /= f;
    }

} {PASS}
Test Case: 15.26.2-div-14
test narrowing /= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-div-14 { test narrowing /= assignments } {
    
    empty_main T15262div14 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	float f = 1;
	double d = 1;
	b /= s;
	b /= c;
	b /= i;
	b /= l;
	b /= f;
	b /= d;
	s /= c;
	s /= i;
	s /= l;
	s /= f;
	s /= d;
	c /= b;
	c /= s;
	c /= i;
	c /= l;
	c /= f;
	c /= d;
	i /= l;
	i /= f;
	i /= d;
	l /= f;
	l /= d;
	f /= d;
    }

} {PASS}
Test Case: 15.26.2-div-zero-1
test integer /= by integer 0 (warning recommended)

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-div-zero-1 { test integer /= by integer 0
        (warning recommended) } {
    
    ok_pass_or_warn [empty_class T15262dz1 {
        int i = 1;
        void foo() {
            i /= 0;
            i /= 0L;
        }
    }]

} {OK}
Test Case: 15.26.2-div-zero-2
test integer /= by integer 0 (warning recommended)

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-div-zero-2 { test integer /= by integer 0
        (warning recommended) } {
    
    ok_pass_or_warn [empty_class T15262dz2 {
        long l = 1;
        void foo() {
            l /= 0;
            l /= 0L;
        }
    }]

} {OK}
Test Case: 15.26.2-div-zero-3
test integer /= by floating 0 (no warning needed)

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-div-zero-3 { test integer /= by floating 0
       (no warning needed) } {
    
    empty_main T15262dz3 {
	int i = 1;
	long l = 1;
	i /= 0.0f;
	i /= 0.0d;
	l /= 0.0f;
	l /= 0.0d;
    }

} {PASS}
Test Case: 15.26.2-div-zero-4
test floating /= by integer 0 (no warning needed)

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-div-zero-4 { test floating /= by integer 0
        (no warning needed) } {
    
    empty_main T15262dz4 {
	float f = 1;
	double d = 1;
	f /= 0;
	f /= 0L;
	d /= 0;
	d /= 0L;
    }

} {PASS}
Test Case: 15.26.2-div-zero-5
test floating /= by floating 0 (no warning needed)

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-div-zero-5 { test floating /= by floating 0
        (no warning needed) } {
    
    empty_main T15262dz5 {
	float f = 1;
	double d = 1;
	f /= 0.0f;
	d /= 0.0d;
    }

} {PASS}
Test Case: 15.26.2-mod-1
test legal identity %= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-mod-1 { test legal identity %= assignments } {
    
    empty_main T15262mod1 {
	byte b = 1;
	b %= 1;
	short s = 1;
	s %= 1;
	char c = 1;
	c %= 1;
	int i = 1;
	i %= 1;
	long l = 1;
	l %= 1;
	float f = 1;
	f %= 1;
	double d = 1;
	d %= 1;
    }

} {PASS}
Test Case: 15.26.2-mod-2
test illegal %= assignments: boolean argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mod-2 { test illegal %= assignments: boolean argument } {
    
    empty_main T15262mod2 {
	int i = 1;
	i %= false;
    }

} {FAIL}
Test Case: 15.26.2-mod-3
test illegal %= assignments: void argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mod-3 { test illegal %= assignments: void argument } {
    
    empty_class T15262mod3 {
	void foo() {}
	void bar() {
	    int i = 1;
	    i %= foo();
	}
    }

} {FAIL}
Test Case: 15.26.2-mod-4
test illegal %= assignments: Object argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mod-4 { test illegal %= assignments: Object argument } {
    
    empty_main T15262mod4 {
	int i = 1;
	i %= new Object();
    }

} {FAIL}
Test Case: 15.26.2-mod-5
test illegal %= assignments: String argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mod-5 { test illegal %= assignments: String argument } {
    
    empty_main T15262mod5 {
	int i = 1;
	i %= "";
    }

} {FAIL}
Test Case: 15.26.2-mod-6
test illegal %= assignments: null argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mod-6 { test illegal %= assignments: null argument } {
    
    empty_main T15262mod6 {
	int i = 1;
	i %= null;
    }

} {FAIL}
Test Case: 15.26.2-mod-7
test illegal %= assignments: Object variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mod-7 { test illegal %= assignments: Object variable } {
    
    empty_main T15262mod7 {
	Object o = new Object();
	o %= 1;
    }

} {FAIL}
Test Case: 15.26.2-mod-8
test illegal %= assignments: String variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mod-8 { test illegal %= assignments: String variable } {
    
    empty_main T15262mod8 {
	String s = "";
	s %= 1;
    }

} {FAIL}
Test Case: 15.26.2-mod-9
test illegal %= assignments: null variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mod-9 { test illegal %= assignments: null variable } {
    
    empty_main T15262mod9 {
	null %= 1;
    }

} {FAIL}
Test Case: 15.26.2-mod-10
test illegal %= assignments: boolean variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mod-10 { test illegal %= assignments: boolean variable } {
    
    empty_main T15262mod10 {
	boolean b = true;
	b %= true;
    }

} {FAIL}
Test Case: 15.26.2-mod-11
test illegal %= assignments: non-variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-mod-11 { test illegal %= assignments: non-variable } {
    
    empty_main T15262mod11 {
	1 %= 1;
    }

} {FAIL}
Test Case: 15.26.2-mod-12
test illegal %= assignments: parenthesized expressions can now be variables

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-mod-12 { test illegal %= assignments: parenthesized
        expressions can now be variables } {
    
    ok_pass_or_warn [empty_main T15262mod12 {
	int i = 1;
	(i) %= 1;
    }]

} {OK}
Test Case: 15.26.2-mod-13
test widening %= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-mod-13 { test widening %= assignments } {
    
    empty_main T15262mod13 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	float f = 1;
	double d = 1;
	s %= b;
	i %= b;
	i %= s;
	i %= c;
	l %= b;
	l %= s;
	l %= c;
	l %= i;
	f %= b;
	f %= s;
	f %= c;
	f %= i;
	f %= l;
	d %= b;
	d %= s;
	d %= c;
	d %= i;
	d %= l;
	d %= f;
    }

} {PASS}
Test Case: 15.26.2-mod-14
test narrowing %= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-mod-14 { test narrowing %= assignments } {
    
    empty_main T15262mod14 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	float f = 1;
	double d = 1;
	b %= s;
	b %= c;
	b %= i;
	b %= l;
	b %= f;
	b %= d;
	s %= c;
	s %= i;
	s %= l;
	s %= f;
	s %= d;
	c %= b;
	c %= s;
	c %= i;
	c %= l;
	c %= f;
	c %= d;
	i %= l;
	i %= f;
	i %= d;
	l %= f;
	l %= d;
	f %= d;
    }

} {PASS}
Test Case: 15.26.2-mod-zero-1
test integer %= by integer 0 (warning recommended)

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-mod-zero-1 { test integer %= by integer 0
        (warning recommended) } {
    
    ok_pass_or_warn [empty_class T15262dz1 {
        int i = 1;
        void foo() {
            i %= 0;
            i %= 0L;
        }
    }]

} {OK}
Test Case: 15.26.2-mod-zero-2
test integer %= by integer 0 (warning recommended)

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-mod-zero-2 { test integer %= by integer 0
        (warning recommended) } {
    
    ok_pass_or_warn [empty_class T15262dz2 {
        long l = 1;
        void foo() {
            l %= 0;
            l %= 0L;
        }
    }]

} {OK}
Test Case: 15.26.2-mod-zero-3
test integer %= by floating 0 (no warning needed)

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-mod-zero-3 { test integer %= by floating 0
       (no warning needed) } {
    
    empty_main T15262dz3 {
	int i = 1;
	long l = 1;
	i %= 0.0f;
	i %= 0.0d;
	l %= 0.0f;
	l %= 0.0d;
    }

} {PASS}
Test Case: 15.26.2-mod-zero-4
test floating %= by integer 0 (no warning needed)

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-mod-zero-4 { test floating %= by integer 0
        (no warning needed) } {
    
    empty_main T15262dz4 {
	float f = 1;
	double d = 1;
	f %= 0;
	f %= 0L;
	d %= 0;
	d %= 0L;
    }

} {PASS}
Test Case: 15.26.2-mod-zero-5
test floating %= by floating 0 (no warning needed)

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-mod-zero-5 { test floating %= by floating 0
        (no warning needed) } {
    
    empty_main T15262dz5 {
	float f = 1;
	double d = 1;
	f %= 0.0f;
	d %= 0.0d;
    }

} {PASS}
Test Case: 15.26.2-add-1
test legal identity += assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-add-1 { test legal identity += assignments } {
    
    empty_main T15262add1 {
	byte b = 1;
	b += 1;
	short s = 1;
	s += 1;
	char c = 1;
	c += 1;
	int i = 1;
	i += 1;
	long l = 1;
	l += 1;
	float f = 1;
	f += 1;
	double d = 1;
	d += 1;
    }

} {PASS}
Test Case: 15.26.2-add-2
test illegal += assignments: boolean argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-add-2 { test illegal += assignments: boolean argument } {
    
    empty_main T15262add2 {
	int i = 1;
	i += false;
    }

} {FAIL}
Test Case: 15.26.2-add-3
test illegal += assignments: void argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-add-3 { test illegal += assignments: void argument } {
    
    empty_class T15262add3 {
	void foo() {}
	void bar() {
	    int i = 1;
	    i += foo();
	}
    }

} {FAIL}
Test Case: 15.26.2-add-4
test illegal += assignments: Object argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-add-4 { test illegal += assignments: Object argument } {
    
    empty_main T15262add4 {
	int i = 1;
	i += new Object();
    }

} {FAIL}
Test Case: 15.26.2-add-5
test illegal += assignments: String argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-add-5 { test illegal += assignments: String argument } {
    
    empty_main T15262add5 {
	int i = 1;
	i += "";
    }

} {FAIL}
Test Case: 15.26.2-add-6
test illegal += assignments: null argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-add-6 { test illegal += assignments: null argument } {
    
    empty_main T15262add6 {
	int i = 1;
	i += null;
    }

} {FAIL}
Test Case: 15.26.2-add-7
test illegal += assignments: Object variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-add-7 { test illegal += assignments: Object variable } {
    
    empty_main T15262add7 {
	Object o = new Object();
	o += 1;
    }

} {FAIL}
Test Case: 15.26.2-add-8
special case: test legal += assignments: String variable

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-add-8 { special case: test legal += assignments:
        String variable } {
    
    empty_main T15262add8 {
	String s = "";
	s += 1;
    }

} {PASS}
Test Case: 15.26.2-add-9
test illegal += assignments: null variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-add-9 { test illegal += assignments: null variable } {
    
    empty_main T15262add9 {
	null += 1;
    }

} {FAIL}
Test Case: 15.26.2-add-10
test illegal += assignments: boolean variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-add-10 { test illegal += assignments: boolean variable } {
    
    empty_main T15262add10 {
	boolean b = true;
	b += true;
    }

} {FAIL}
Test Case: 15.26.2-add-11
test illegal += assignments: non-variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-add-11 { test illegal += assignments: non-variable } {
    
    empty_main T15262add11 {
	1 += 1;
    }

} {FAIL}
Test Case: 15.26.2-add-12
test illegal += assignments: parenthesized expressions can now be variables

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-add-12 { test illegal += assignments: parenthesized
        expressions can now be variables } {
    
    ok_pass_or_warn [empty_main T15262add12 {
	int i = 1;
	(i) += 1;
    }]

} {OK}
Test Case: 15.26.2-add-13
test widening += assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-add-13 { test widening += assignments } {
    
    empty_main T15262add13 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	float f = 1;
	double d = 1;
	s += b;
	i += b;
	i += s;
	i += c;
	l += b;
	l += s;
	l += c;
	l += i;
	f += b;
	f += s;
	f += c;
	f += i;
	f += l;
	d += b;
	d += s;
	d += c;
	d += i;
	d += l;
	d += f;
    }

} {PASS}
Test Case: 15.26.2-add-14
test narrowing += assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-add-14 { test narrowing += assignments } {
    
    empty_main T15262add14 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	float f = 1;
	double d = 1;
	b += s;
	b += c;
	b += i;
	b += l;
	b += f;
	b += d;
	s += c;
	s += i;
	s += l;
	s += f;
	s += d;
	c += b;
	c += s;
	c += i;
	c += l;
	c += f;
	c += d;
	i += l;
	i += f;
	i += d;
	l += f;
	l += d;
	f += d;
    }

} {PASS}
Test Case: 15.26.2-sub-1
test legal identity -= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-sub-1 { test legal identity -= assignments } {
    
    empty_main T15262sub1 {
	byte b = 1;
	b -= 1;
	short s = 1;
	s -= 1;
	char c = 1;
	c -= 1;
	int i = 1;
	i -= 1;
	long l = 1;
	l -= 1;
	float f = 1;
	f -= 1;
	double d = 1;
	d -= 1;
    }

} {PASS}
Test Case: 15.26.2-sub-2
test illegal -= assignments: boolean argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-sub-2 { test illegal -= assignments: boolean argument } {
    
    empty_main T15262sub2 {
	int i = 1;
	i -= false;
    }

} {FAIL}
Test Case: 15.26.2-sub-3
test illegal -= assignments: void argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-sub-3 { test illegal -= assignments: void argument } {
    
    empty_class T15262sub3 {
	void foo() {}
	void bar() {
	    int i = 1;
	    i -= foo();
	}
    }

} {FAIL}
Test Case: 15.26.2-sub-4
test illegal -= assignments: Object argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-sub-4 { test illegal -= assignments: Object argument } {
    
    empty_main T15262sub4 {
	int i = 1;
	i -= new Object();
    }

} {FAIL}
Test Case: 15.26.2-sub-5
test illegal -= assignments: String argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-sub-5 { test illegal -= assignments: String argument } {
    
    empty_main T15262sub5 {
	int i = 1;
	i -= "";
    }

} {FAIL}
Test Case: 15.26.2-sub-6
test illegal -= assignments: null argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-sub-6 { test illegal -= assignments: null argument } {
    
    empty_main T15262sub6 {
	int i = 1;
	i -= null;
    }

} {FAIL}
Test Case: 15.26.2-sub-7
test illegal -= assignments: Object variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-sub-7 { test illegal -= assignments: Object variable } {
    
    empty_main T15262sub7 {
	Object o = new Object();
	o -= 1;
    }

} {FAIL}
Test Case: 15.26.2-sub-8
test illegal -= assignments: String variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-sub-8 { test illegal -= assignments: String variable } {
    
    empty_main T15262sub8 {
	String s = "";
	s -= 1;
    }

} {FAIL}
Test Case: 15.26.2-sub-9
test illegal -= assignments: null variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-sub-9 { test illegal -= assignments: null variable } {
    
    empty_main T15262sub9 {
	null -= 1;
    }

} {FAIL}
Test Case: 15.26.2-sub-10
test illegal -= assignments: boolean variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-sub-10 { test illegal -= assignments: boolean variable } {
    
    empty_main T15262sub10 {
	boolean b = true;
	b -= true;
    }

} {FAIL}
Test Case: 15.26.2-sub-11
test illegal -= assignments: non-variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-sub-11 { test illegal -= assignments: non-variable } {
    
    empty_main T15262sub11 {
	1 -= 1;
    }

} {FAIL}
Test Case: 15.26.2-sub-12
test illegal -= assignments: parenthesized expressions can now be variables

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-sub-12 { test illegal -= assignments: parenthesized
        expressions can now be variables } {
    
    ok_pass_or_warn [empty_main T15262sub12 {
	int i = 1;
	(i) -= 1;
    }]

} {OK}
Test Case: 15.26.2-sub-13
test widening -= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-sub-13 { test widening -= assignments } {
    
    empty_main T15262sub13 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	float f = 1;
	double d = 1;
	s -= b;
	i -= b;
	i -= s;
	i -= c;
	l -= b;
	l -= s;
	l -= c;
	l -= i;
	f -= b;
	f -= s;
	f -= c;
	f -= i;
	f -= l;
	d -= b;
	d -= s;
	d -= c;
	d -= i;
	d -= l;
	d -= f;
    }

} {PASS}
Test Case: 15.26.2-sub-14
test narrowing -= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-sub-14 { test narrowing -= assignments } {
    
    empty_main T15262sub14 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	float f = 1;
	double d = 1;
	b -= s;
	b -= c;
	b -= i;
	b -= l;
	b -= f;
	b -= d;
	s -= c;
	s -= i;
	s -= l;
	s -= f;
	s -= d;
	c -= b;
	c -= s;
	c -= i;
	c -= l;
	c -= f;
	c -= d;
	i -= l;
	i -= f;
	i -= d;
	l -= f;
	l -= d;
	f -= d;
    }

} {PASS}
Test Case: 15.26.2-left-shift-1
test legal identity <<= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-left-shift-1 { test legal identity <<= assignments } {
    
    empty_main T15262ls1 {
	byte b = 1;
	b <<= 1;
	short s = 1;
	s <<= 1;
	char c = 1;
	c <<= 1;
	int i = 1;
	i <<= 1;
	long l = 1;
	l <<= 1;
    }

} {PASS}
Test Case: 15.26.2-left-shift-2
test illegal <<= assignments: boolean argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-2 { test illegal <<= assignments: boolean argument } {
    
    empty_main T15262ls2 {
	int i = 1;
	i <<= false;
    }

} {FAIL}
Test Case: 15.26.2-left-shift-3
test illegal <<= assignments: void argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-3 { test illegal <<= assignments: void argument } {
    
    empty_class T15262ls3 {
	void foo() {}
	void bar() {
	    int i = 1;
	    i <<= foo();
	}
    }

} {FAIL}
Test Case: 15.26.2-left-shift-4
test illegal <<= assignments: Object argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-4 { test illegal <<= assignments: Object argument } {
    
    empty_main T15262ls4 {
	int i = 1;
	i <<= new Object();
    }

} {FAIL}
Test Case: 15.26.2-left-shift-5
test illegal <<= assignments: String argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-5 { test illegal <<= assignments: String argument } {
    
    empty_main T15262ls5 {
	int i = 1;
	i <<= "";
    }

} {FAIL}
Test Case: 15.26.2-left-shift-6
test illegal <<= assignments: null argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-6 { test illegal <<= assignments: null argument } {
    
    empty_main T15262ls6 {
	int i = 1;
	i <<= null;
    }

} {FAIL}
Test Case: 15.26.2-left-shift-7
test illegal <<= assignments: Object variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-7 { test illegal <<= assignments: Object variable } {
    
    empty_main T15262ls7 {
	Object o = new Object();
	o <<= 1;
    }

} {FAIL}
Test Case: 15.26.2-left-shift-8
test illegal <<= assignments: String variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-8 { test illegal <<= assignments: String variable } {
    
    empty_main T15262ls8 {
	String s = "";
	s <<= 1;
    }

} {FAIL}
Test Case: 15.26.2-left-shift-9
test illegal <<= assignments: null variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-9 { test illegal <<= assignments: null variable } {
    
    empty_main T15262ls9 {
	null <<= 1;
    }

} {FAIL}
Test Case: 15.26.2-left-shift-10
test illegal <<= assignments: boolean variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-10 { test illegal <<= assignments: boolean variable } {
    
    empty_main T15262ls10 {
	boolean b = true;
	b <<= true;
    }

} {FAIL}
Test Case: 15.26.2-left-shift-11
test illegal <<= assignments: non-variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-11 { test illegal <<= assignments: non-variable } {
    
    empty_main T15262ls11 {
	1 <<= 1;
    }

} {FAIL}
Test Case: 15.26.2-left-shift-12
test illegal <<= assignments: parenthesized expressions can now be variables

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-left-shift-12 { test illegal <<= assignments: parenthesized
        expressions can now be variables } {
    
    ok_pass_or_warn [empty_main T15262ls12 {
	int i = 1;
	(i) <<= 1;
    }]

} {OK}
Test Case: 15.26.2-left-shift-13
test widening <<= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-left-shift-13 { test widening <<= assignments } {
    
    empty_main T15262ls13 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	s <<= b;
	i <<= b;
	i <<= s;
	i <<= c;
	l <<= b;
	l <<= s;
	l <<= c;
	l <<= i;
    }

} {PASS}
Test Case: 15.26.2-left-shift-14
test narrowing <<= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-left-shift-14 { test narrowing <<= assignments } {
    
    empty_main T15262ls14 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	b <<= s;
	b <<= c;
	b <<= i;
	b <<= l;
	s <<= c;
	s <<= i;
	s <<= l;
	c <<= b;
	c <<= s;
	c <<= i;
	c <<= l;
	i <<= l;
    }

} {PASS}
Test Case: 15.26.2-left-shift-15
test illegal <<= assignments: float argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-15 { test illegal <<= assignments: float argument } {
    
    empty_main T15262ls15 {
	int i = 1;
	i <<= 1.0f;
    }

} {FAIL}
Test Case: 15.26.2-left-shift-16
test illegal <<= assignments: double argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-16 { test illegal <<= assignments: double argument } {
    
    empty_main T15262ls16 {
	int i = 1;
	i <<= 1.0d;
    }

} {FAIL}
Test Case: 15.26.2-left-shift-17
test illegal <<= assignments: float variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-17 { test illegal <<= assignments: float variable } {
    
    empty_main T15262ls17 {
	float f = 1;
	f <<= 1;
    }

} {FAIL}
Test Case: 15.26.2-left-shift-18
test illegal <<= assignments: double variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-left-shift-18 { test illegal <<= assignments: double variable } {
    
    empty_main T15262ls18 {
	double d = 1;
	d <<= 1;
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-1
test legal identity >>= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-signed-right-shift-1 { test legal identity >>= assignments } {
    
    empty_main T15262srs1 {
	byte b = 1;
	b >>= 1;
	short s = 1;
	s >>= 1;
	char c = 1;
	c >>= 1;
	int i = 1;
	i >>= 1;
	long l = 1;
	l >>= 1;
    }

} {PASS}
Test Case: 15.26.2-signed-right-shift-2
test illegal >>= assignments: boolean argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-2 { test illegal >>= assignments: boolean argument } {
    
    empty_main T15262srs2 {
	int i = 1;
	i >>= false;
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-3
test illegal >>= assignments: void argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-3 { test illegal >>= assignments: void argument } {
    
    empty_class T15262srs3 {
	void foo() {}
	void bar() {
	    int i = 1;
	    i >>= foo();
	}
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-4
test illegal >>= assignments: Object argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-4 { test illegal >>= assignments: Object argument } {
    
    empty_main T15262srs4 {
	int i = 1;
	i >>= new Object();
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-5
test illegal >>= assignments: String argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-5 { test illegal >>= assignments: String argument } {
    
    empty_main T15262srs5 {
	int i = 1;
	i >>= "";
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-6
test illegal >>= assignments: null argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-6 { test illegal >>= assignments: null argument } {
    
    empty_main T15262srs6 {
	int i = 1;
	i >>= null;
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-7
test illegal >>= assignments: Object variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-7 { test illegal >>= assignments: Object variable } {
    
    empty_main T15262srs7 {
	Object o = new Object();
	o >>= 1;
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-8
test illegal >>= assignments: String variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-8 { test illegal >>= assignments: String variable } {
    
    empty_main T15262srs8 {
	String s = "";
	s >>= 1;
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-9
test illegal >>= assignments: null variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-9 { test illegal >>= assignments: null variable } {
    
    empty_main T15262srs9 {
	null >>= 1;
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-10
test illegal >>= assignments: boolean variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-10 { test illegal >>= assignments: boolean variable } {
    
    empty_main T15262srs10 {
	boolean b = true;
	b >>= true;
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-11
test illegal >>= assignments: non-variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-11 { test illegal >>= assignments: non-variable } {
    
    empty_main T15262srs11 {
	1 >>= 1;
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-12
test illegal >>= assignments: parenthesized expressions can now be variables

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-signed-right-shift-12 { test illegal >>= assignments: parenthesized
        expressions can now be variables } {
    
    ok_pass_or_warn [empty_main T15262srs12 {
	int i = 1;
	(i) >>= 1;
    }]

} {OK}
Test Case: 15.26.2-signed-right-shift-13
test widening >>= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-signed-right-shift-13 { test widening >>= assignments } {
    
    empty_main T15262srs13 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	s >>= b;
	i >>= b;
	i >>= s;
	i >>= c;
	l >>= b;
	l >>= s;
	l >>= c;
	l >>= i;
    }

} {PASS}
Test Case: 15.26.2-signed-right-shift-14
test narrowing >>= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-signed-right-shift-14 { test narrowing >>= assignments } {
    
    empty_main T15262srs14 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	b >>= s;
	b >>= c;
	b >>= i;
	b >>= l;
	s >>= c;
	s >>= i;
	s >>= l;
	c >>= b;
	c >>= s;
	c >>= i;
	c >>= l;
	i >>= l;
    }

} {PASS}
Test Case: 15.26.2-signed-right-shift-15
test illegal >>= assignments: float argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-15 { test illegal >>= assignments: float argument } {
    
    empty_main T15262srs15 {
	int i = 1;
	i >>= 1.0f;
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-16
test illegal >>= assignments: double argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-16 { test illegal >>= assignments: double argument } {
    
    empty_main T15262srs16 {
	int i = 1;
	i >>= 1.0d;
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-17
test illegal >>= assignments: float variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-17 { test illegal >>= assignments: float variable } {
    
    empty_main T15262srs17 {
	float f = 1;
	f >>= 1;
    }

} {FAIL}
Test Case: 15.26.2-signed-right-shift-18
test illegal >>= assignments: double variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-signed-right-shift-18 { test illegal >>= assignments: double variable } {
    
    empty_main T15262srs18 {
	double d = 1;
	d >>= 1;
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-1
test legal identity >>>= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-1 { test legal identity >>>= assignments } {
    
    empty_main T15262urs1 {
	byte b = 1;
	b >>>= 1;
	short s = 1;
	s >>>= 1;
	char c = 1;
	c >>>= 1;
	int i = 1;
	i >>>= 1;
	long l = 1;
	l >>>= 1;
    }

} {PASS}
Test Case: 15.26.2-unsigned-right-shift-2
test illegal >>>= assignments: boolean argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-2 { test illegal >>>= assignments: boolean argument } {
    
    empty_main T15262urs2 {
	int i = 1;
	i >>>= false;
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-3
test illegal >>>= assignments: void argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-3 { test illegal >>>= assignments: void argument } {
    
    empty_class T15262urs3 {
	void foo() {}
	void bar() {
	    int i = 1;
	    i >>>= foo();
	}
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-4
test illegal >>>= assignments: Object argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-4 { test illegal >>>= assignments: Object argument } {
    
    empty_main T15262urs4 {
	int i = 1;
	i >>>= new Object();
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-5
test illegal >>>= assignments: String argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-5 { test illegal >>>= assignments: String argument } {
    
    empty_main T15262urs5 {
	int i = 1;
	i >>>= "";
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-6
test illegal >>>= assignments: null argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-6 { test illegal >>>= assignments: null argument } {
    
    empty_main T15262urs6 {
	int i = 1;
	i >>>= null;
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-7
test illegal >>>= assignments: Object variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-7 { test illegal >>>= assignments: Object variable } {
    
    empty_main T15262urs7 {
	Object o = new Object();
	o >>>= 1;
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-8
test illegal >>>= assignments: String variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-8 { test illegal >>>= assignments: String variable } {
    
    empty_main T15262urs8 {
	String s = "";
	s >>>= 1;
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-9
test illegal >>>= assignments: null variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-9 { test illegal >>>= assignments: null variable } {
    
    empty_main T15262urs9 {
	null >>>= 1;
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-10
test illegal >>>= assignments: boolean variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-10 { test illegal >>>= assignments: boolean variable } {
    
    empty_main T15262urs10 {
	boolean b = true;
	b >>>= true;
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-11
test illegal >>>= assignments: non-variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-11 { test illegal >>>= assignments: non-variable } {
    
    empty_main T15262urs11 {
	1 >>>= 1;
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-12
test illegal >>>= assignments: parenthesized expressions can now be variables

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-12 { test illegal >>>= assignments: parenthesized
        expressions can now be variables } {
    
    ok_pass_or_warn [empty_main T15262urs12 {
	int i = 1;
	(i) >>>= 1;
    }]

} {OK}
Test Case: 15.26.2-unsigned-right-shift-13
test widening >>>= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-13 { test widening >>>= assignments } {
    
    empty_main T15262urs13 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	s >>>= b;
	i >>>= b;
	i >>>= s;
	i >>>= c;
	l >>>= b;
	l >>>= s;
	l >>>= c;
	l >>>= i;
    }

} {PASS}
Test Case: 15.26.2-unsigned-right-shift-14
test narrowing >>>= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-14 { test narrowing >>>= assignments } {
    
    empty_main T15262urs14 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	b >>>= s;
	b >>>= c;
	b >>>= i;
	b >>>= l;
	s >>>= c;
	s >>>= i;
	s >>>= l;
	c >>>= b;
	c >>>= s;
	c >>>= i;
	c >>>= l;
	i >>>= l;
    }

} {PASS}
Test Case: 15.26.2-unsigned-right-shift-15
test illegal >>>= assignments: float argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-15 { test illegal >>>= assignments: float argument } {
    
    empty_main T15262urs15 {
	int i = 1;
	i >>>= 1.0f;
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-16
test illegal >>>= assignments: double argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-16 { test illegal >>>= assignments: double argument } {
    
    empty_main T15262urs16 {
	int i = 1;
	i >>>= 1.0d;
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-17
test illegal >>>= assignments: float variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-17 { test illegal >>>= assignments: float variable } {
    
    empty_main T15262urs17 {
	float f = 1;
	f >>>= 1;
    }

} {FAIL}
Test Case: 15.26.2-unsigned-right-shift-18
test illegal >>>= assignments: double variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-unsigned-right-shift-18 { test illegal >>>= assignments: double variable } {
    
    empty_main T15262urs18 {
	double d = 1;
	d >>>= 1;
    }

} {FAIL}
Test Case: 15.26.2-and-1
test legal identity &= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-and-1 { test legal identity &= assignments } {
    
    empty_main T15262and1 {
	boolean z = true;
	z &= true;
	byte b = 1;
	b &= 1;
	short s = 1;
	s &= 1;
	char c = 1;
	c &= 1;
	int i = 1;
	i &= 1;
	long l = 1;
	l &= 1;
    }

} {PASS}
Test Case: 15.26.2-and-2
test illegal &= assignments: mix int and boolean

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-2 { test illegal &= assignments: mix int and boolean } {
    
    empty_main T15262and2 {
	int i = 1;
	i &= false;
    }

} {FAIL}
Test Case: 15.26.2-and-3
test illegal &= assignments: void argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-3 { test illegal &= assignments: void argument } {
    
    empty_class T15262and3 {
	void foo() {}
	void bar() {
	    int i = 1;
	    i &= foo();
	}
    }

} {FAIL}
Test Case: 15.26.2-and-4
test illegal &= assignments: Object argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-4 { test illegal &= assignments: Object argument } {
    
    empty_main T15262and4 {
	int i = 1;
	i &= new Object();
    }

} {FAIL}
Test Case: 15.26.2-and-5
test illegal &= assignments: String argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-5 { test illegal &= assignments: String argument } {
    
    empty_main T15262and5 {
	int i = 1;
	i &= "";
    }

} {FAIL}
Test Case: 15.26.2-and-6
test illegal &= assignments: null argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-6 { test illegal &= assignments: null argument } {
    
    empty_main T15262and6 {
	int i = 1;
	i &= null;
    }

} {FAIL}
Test Case: 15.26.2-and-7
test illegal &= assignments: Object variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-7 { test illegal &= assignments: Object variable } {
    
    empty_main T15262and7 {
	Object o = new Object();
	o &= 1;
    }

} {FAIL}
Test Case: 15.26.2-and-8
test illegal &= assignments: String variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-8 { test illegal &= assignments: String variable } {
    
    empty_main T15262and8 {
	String s = "";
	s &= 1;
    }

} {FAIL}
Test Case: 15.26.2-and-9
test illegal &= assignments: null variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-9 { test illegal &= assignments: null variable } {
    
    empty_main T15262and9 {
	null &= 1;
    }

} {FAIL}
Test Case: 15.26.2-and-10
test illegal &= assignments: mix int and boolean

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-10 { test illegal &= assignments: mix int and boolean } {
    
    empty_main T15262and10 {
	boolean b = true;
	b &= 1;
    }

} {FAIL}
Test Case: 15.26.2-and-11
test illegal &= assignments: non-variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-11 { test illegal &= assignments: non-variable } {
    
    empty_main T15262and11 {
	1 &= 1;
    }

} {FAIL}
Test Case: 15.26.2-and-12
test illegal &= assignments: parenthesized expressions can now be variables

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-and-12 { test illegal &= assignments: parenthesized
        expressions can now be variables } {
    
    ok_pass_or_warn [empty_main T15262and12 {
	int i = 1;
	(i) &= 1;
    }]

} {OK}
Test Case: 15.26.2-and-13
test widening &= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-and-13 { test widening &= assignments } {
    
    empty_main T15262and13 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	s &= b;
	i &= b;
	i &= s;
	i &= c;
	l &= b;
	l &= s;
	l &= c;
	l &= i;
    }

} {PASS}
Test Case: 15.26.2-and-14
test narrowing &= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-and-14 { test narrowing &= assignments } {
    
    empty_main T15262and14 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	b &= s;
	b &= c;
	b &= i;
	b &= l;
	s &= c;
	s &= i;
	s &= l;
	c &= b;
	c &= s;
	c &= i;
	c &= l;
	i &= l;
    }

} {PASS}
Test Case: 15.26.2-and-15
test illegal &= assignments: float argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-15 { test illegal &= assignments: float argument } {
    
    empty_main T15262and15 {
	int i = 1;
	i &= 1.0f;
    }

} {FAIL}
Test Case: 15.26.2-and-16
test illegal &= assignments: double argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-16 { test illegal &= assignments: double argument } {
    
    empty_main T15262and16 {
	int i = 1;
	i &= 1.0d;
    }

} {FAIL}
Test Case: 15.26.2-and-17
test illegal &= assignments: float variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-17 { test illegal &= assignments: float variable } {
    
    empty_main T15262and17 {
	float f = 1;
	f &= 1;
    }

} {FAIL}
Test Case: 15.26.2-and-18
test illegal &= assignments: double variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-and-18 { test illegal &= assignments: double variable } {
    
    empty_main T15262and18 {
	double d = 1;
	d &= 1;
    }

} {FAIL}
Test Case: 15.26.2-xor-1
test legal identity ^= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-xor-1 { test legal identity ^= assignments } {
    
    empty_main T15262xor1 {
	boolean z = true;
	z ^= true;
	byte b = 1;
	b ^= 1;
	short s = 1;
	s ^= 1;
	char c = 1;
	c ^= 1;
	int i = 1;
	i ^= 1;
	long l = 1;
	l ^= 1;
    }

} {PASS}
Test Case: 15.26.2-xor-2
test illegal ^= assignments: mix int and boolean

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-2 { test illegal ^= assignments: mix int and boolean } {
    
    empty_main T15262xor2 {
	int i = 1;
	i ^= false;
    }

} {FAIL}
Test Case: 15.26.2-xor-3
test illegal ^= assignments: void argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-3 { test illegal ^= assignments: void argument } {
    
    empty_class T15262xor3 {
	void foo() {}
	void bar() {
	    int i = 1;
	    i ^= foo();
	}
    }

} {FAIL}
Test Case: 15.26.2-xor-4
test illegal ^= assignments: Object argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-4 { test illegal ^= assignments: Object argument } {
    
    empty_main T15262xor4 {
	int i = 1;
	i ^= new Object();
    }

} {FAIL}
Test Case: 15.26.2-xor-5
test illegal ^= assignments: String argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-5 { test illegal ^= assignments: String argument } {
    
    empty_main T15262xor5 {
	int i = 1;
	i ^= "";
    }

} {FAIL}
Test Case: 15.26.2-xor-6
test illegal ^= assignments: null argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-6 { test illegal ^= assignments: null argument } {
    
    empty_main T15262xor6 {
	int i = 1;
	i ^= null;
    }

} {FAIL}
Test Case: 15.26.2-xor-7
test illegal ^= assignments: Object variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-7 { test illegal ^= assignments: Object variable } {
    
    empty_main T15262xor7 {
	Object o = new Object();
	o ^= 1;
    }

} {FAIL}
Test Case: 15.26.2-xor-8
test illegal ^= assignments: String variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-8 { test illegal ^= assignments: String variable } {
    
    empty_main T15262xor8 {
	String s = "";
	s ^= 1;
    }

} {FAIL}
Test Case: 15.26.2-xor-9
test illegal ^= assignments: null variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-9 { test illegal ^= assignments: null variable } {
    
    empty_main T15262xor9 {
	null ^= 1;
    }

} {FAIL}
Test Case: 15.26.2-xor-10
test illegal ^= assignments: mix int and boolean

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-10 { test illegal ^= assignments: mix int and boolean } {
    
    empty_main T15262xor10 {
	boolean b = true;
	b ^= 1;
    }

} {FAIL}
Test Case: 15.26.2-xor-11
test illegal ^= assignments: non-variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-11 { test illegal ^= assignments: non-variable } {
    
    empty_main T15262xor11 {
	1 ^= 1;
    }

} {FAIL}
Test Case: 15.26.2-xor-12
test illegal ^= assignments: parenthesized expressions can now be variables

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-xor-12 { test illegal ^= assignments: parenthesized
        expressions can now be variables } {
    
    ok_pass_or_warn [empty_main T15262xor12 {
	int i = 1;
	(i) ^= 1;
    }]

} {OK}
Test Case: 15.26.2-xor-13
test widening ^= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-xor-13 { test widening ^= assignments } {
    
    empty_main T15262xor13 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	s ^= b;
	i ^= b;
	i ^= s;
	i ^= c;
	l ^= b;
	l ^= s;
	l ^= c;
	l ^= i;
    }

} {PASS}
Test Case: 15.26.2-xor-14
test narrowing ^= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-xor-14 { test narrowing ^= assignments } {
    
    empty_main T15262xor14 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	b ^= s;
	b ^= c;
	b ^= i;
	b ^= l;
	s ^= c;
	s ^= i;
	s ^= l;
	c ^= b;
	c ^= s;
	c ^= i;
	c ^= l;
	i ^= l;
    }

} {PASS}
Test Case: 15.26.2-xor-15
test illegal ^= assignments: float argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-15 { test illegal ^= assignments: float argument } {
    
    empty_main T15262xor15 {
	int i = 1;
	i ^= 1.0f;
    }

} {FAIL}
Test Case: 15.26.2-xor-16
test illegal ^= assignments: double argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-16 { test illegal ^= assignments: double argument } {
    
    empty_main T15262xor16 {
	int i = 1;
	i ^= 1.0d;
    }

} {FAIL}
Test Case: 15.26.2-xor-17
test illegal ^= assignments: float variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-17 { test illegal ^= assignments: float variable } {
    
    empty_main T15262xor17 {
	float f = 1;
	f ^= 1;
    }

} {FAIL}
Test Case: 15.26.2-xor-18
test illegal ^= assignments: double variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-xor-18 { test illegal ^= assignments: double variable } {
    
    empty_main T15262xor18 {
	double d = 1;
	d ^= 1;
    }

} {FAIL}
Test Case: 15.26.2-or-1
test legal identity |= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-or-1 { test legal identity |= assignments } {
    
    empty_main T15262or1 {
	boolean z = true;
	z |= true;
	byte b = 1;
	b |= 1;
	short s = 1;
	s |= 1;
	char c = 1;
	c |= 1;
	int i = 1;
	i |= 1;
	long l = 1;
	l |= 1;
    }

} {PASS}
Test Case: 15.26.2-or-2
test illegal |= assignments: mix int and boolean

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-2 { test illegal |= assignments: mix int and boolean } {
    
    empty_main T15262or2 {
	int i = 1;
	i |= false;
    }

} {FAIL}
Test Case: 15.26.2-or-3
test illegal |= assignments: void argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-3 { test illegal |= assignments: void argument } {
    
    empty_class T15262or3 {
	void foo() {}
	void bar() {
	    int i = 1;
	    i |= foo();
	}
    }

} {FAIL}
Test Case: 15.26.2-or-4
test illegal |= assignments: Object argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-4 { test illegal |= assignments: Object argument } {
    
    empty_main T15262or4 {
	int i = 1;
	i |= new Object();
    }

} {FAIL}
Test Case: 15.26.2-or-5
test illegal |= assignments: String argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-5 { test illegal |= assignments: String argument } {
    
    empty_main T15262or5 {
	int i = 1;
	i |= "";
    }

} {FAIL}
Test Case: 15.26.2-or-6
test illegal |= assignments: null argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-6 { test illegal |= assignments: null argument } {
    
    empty_main T15262or6 {
	int i = 1;
	i |= null;
    }

} {FAIL}
Test Case: 15.26.2-or-7
test illegal |= assignments: Object variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-7 { test illegal |= assignments: Object variable } {
    
    empty_main T15262or7 {
	Object o = new Object();
	o |= 1;
    }

} {FAIL}
Test Case: 15.26.2-or-8
test illegal |= assignments: String variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-8 { test illegal |= assignments: String variable } {
    
    empty_main T15262or8 {
	String s = "";
	s |= 1;
    }

} {FAIL}
Test Case: 15.26.2-or-9
test illegal |= assignments: null variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-9 { test illegal |= assignments: null variable } {
    
    empty_main T15262or9 {
	null |= 1;
    }

} {FAIL}
Test Case: 15.26.2-or-10
test illegal |= assignments: mix int and boolean

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-10 { test illegal |= assignments: mix int and boolean } {
    
    empty_main T15262or10 {
	boolean b = true;
	b |= 1;
    }

} {FAIL}
Test Case: 15.26.2-or-11
test illegal |= assignments: non-variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-11 { test illegal |= assignments: non-variable } {
    
    empty_main T15262or11 {
	1 |= 1;
    }

} {FAIL}
Test Case: 15.26.2-or-12
test illegal |= assignments: parenthesized expressions can now be variables

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-or-12 { test illegal |= assignments: parenthesized
        expressions can now be variables } {
    
    ok_pass_or_warn [empty_main T15262or12 {
	int i = 1;
	(i) |= 1;
    }]

} {OK}
Test Case: 15.26.2-or-13
test widening |= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-or-13 { test widening |= assignments } {
    
    empty_main T15262or13 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	s |= b;
	i |= b;
	i |= s;
	i |= c;
	l |= b;
	l |= s;
	l |= c;
	l |= i;
    }

} {PASS}
Test Case: 15.26.2-or-14
test narrowing |= assignments

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-or-14 { test narrowing |= assignments } {
    
    empty_main T15262or14 {
	byte b = 1;
	short s = 1;
	char c = 1;
	int i = 1;
	long l = 1;
	b |= s;
	b |= c;
	b |= i;
	b |= l;
	s |= c;
	s |= i;
	s |= l;
	c |= b;
	c |= s;
	c |= i;
	c |= l;
	i |= l;
    }

} {PASS}
Test Case: 15.26.2-or-15
test illegal |= assignments: float argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-15 { test illegal |= assignments: float argument } {
    
    empty_main T15262or15 {
	int i = 1;
	i |= 1.0f;
    }

} {FAIL}
Test Case: 15.26.2-or-16
test illegal |= assignments: double argument

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-16 { test illegal |= assignments: double argument } {
    
    empty_main T15262or16 {
	int i = 1;
	i |= 1.0d;
    }

} {FAIL}
Test Case: 15.26.2-or-17
test illegal |= assignments: float variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-17 { test illegal |= assignments: float variable } {
    
    empty_main T15262or17 {
	float f = 1;
	f |= 1;
    }

} {FAIL}
Test Case: 15.26.2-or-18
test illegal |= assignments: double variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-or-18 { test illegal |= assignments: double variable } {
    
    empty_main T15262or18 {
	double d = 1;
	d |= 1;
    }

} {FAIL}
Test Case: 15.26.2-variable-1
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-1 { the left-hand side must be a variable } {
    
    empty_main T15262var1 {
        int.class += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-2
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-2 { the left-hand side must be a variable } {
    
    empty_main T15262var2 {
        (int.class) += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-3
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-3 { the left-hand side must be a variable } {
    
    empty_main T15262var3 {
        this += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-4
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-4 { the left-hand side must be a variable } {
    
    empty_main T15262var4 {
        (this) += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-5
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-5 { the left-hand side must be a variable } {
    
    empty_main T15262var5 {
        new String() += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-6
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-6 { the left-hand side must be a variable } {
    
    empty_main T15262var6 {
        (new String()) += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-7
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-7 { the left-hand side must be a variable } {
    
    empty_main T15262var7 {
        java.lang.String += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-8
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-8 { the left-hand side must be a variable } {
    
    empty_main T15262var8 {
        (java.lang.String) += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-9
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-9 { the left-hand side must be a variable } {
    
    empty_class T15262var9 {
        void bar() {}
        void foo() {
            bar() += "oops";
        }
    }

} {FAIL}
Test Case: 15.26.2-variable-10
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-10 { the left-hand side must be a variable } {
    
    empty_class T15262var10 {
        void bar() {}
        void foo() {
            (bar()) += "oops";
        }
    }

} {FAIL}
Test Case: 15.26.2-variable-11
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-11 { the left-hand side must be a variable } {
    
    empty_class T15262var11 {
        String bar() { return ""; }
        void foo() {
            bar() += "oops";
        }
    }

} {FAIL}
Test Case: 15.26.2-variable-12
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-12 { the left-hand side must be a variable } {
    
    empty_class T15262var12 {
        String bar() { return ""; }
        void foo() {
            (bar()) += "oops";
        }
    }

} {FAIL}
Test Case: 15.26.2-variable-13
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-13 { the left-hand side must be a variable } {
    
    empty_main T15262var13 {
        int i = 1;
        i++ += 1;
    }

} {FAIL}
Test Case: 15.26.2-variable-14
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-14 { the left-hand side must be a variable } {
    
    empty_main T15262var14 {
        int i = 1;
        (i++) += 1;
    }

} {FAIL}
Test Case: 15.26.2-variable-15
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-15 { the left-hand side must be a variable } {
    
    empty_main T15262var15 {
        int i = 1;
        --i += 1;
    }

} {FAIL}
Test Case: 15.26.2-variable-16
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-16 { the left-hand side must be a variable } {
    
    empty_main T15262var16 {
        intn i = 1;
        (--i) += 1;
    }

} {FAIL}
Test Case: 15.26.2-variable-17
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-17 { the left-hand side must be a variable } {
    
    empty_main T15262var17 {
        "" instanceof String += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-18
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-18 { the left-hand side must be a variable } {
    
    empty_main T15262var18 {
        ("" instanceof String) += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-19
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-19 { the left-hand side must be a variable } {
    
    empty_main T15262var19 {
        int i = 1;
        i + i += 1;
    }

} {FAIL}
Test Case: 15.26.2-variable-20
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-20 { the left-hand side must be a variable } {
    
    empty_main T15262var20 {
        int i = 1;
        (i + i) += 1;
    }

} {FAIL}
Test Case: 15.26.2-variable-21
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-21 { the left-hand side must be a variable } {
    
    empty_main T15262var21 {
        int i = 1;
        (i += 1) += 1;
    }

} {FAIL}
Test Case: 15.26.2-variable-22
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-22 { the left-hand side must be a variable } {
    
    empty_main T15262var22 {
        1 += 1;
    }

} {FAIL}
Test Case: 15.26.2-variable-23
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-23 { the left-hand side must be a variable } {
    
    empty_main T15262var23 {
        (1) += 1;
    }

} {FAIL}
Test Case: 15.26.2-variable-24
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-24 { the left-hand side must be a variable } {
    
    empty_main T15262var24 {
        null += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-25
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-25 { the left-hand side must be a variable } {
    
    empty_main T15262var25 {
        (null) += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-26
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-26 { the left-hand side must be a variable } {
    
    empty_main T15262var26 {
        true += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-27
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-27 { the left-hand side must be a variable } {
    
    empty_main T15262var27 {
        (true) += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-28
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-28 { the left-hand side must be a variable } {
    
    empty_main T15262var28 {
        "" += "oops";
    }

} {FAIL}
Test Case: 15.26.2-variable-29
the left-hand side must be a variable

Expected Result: FAIL

Regression Test:

tcltest::test 15.26.2-variable-29 { the left-hand side must be a variable } {
    
    empty_main T15262var29 {
        ("") += "oops";
    }

} {FAIL}
Test Case: 15.26.2-associative-1
assignment is right-associative

Expected Result: PASS

Regression Test:

tcltest::test 15.26.2-associative-1 { assignment is right-associative } {
    
    empty_main T15262assoc1 {
        int i = 1;
        i += i += 1;
        i += (i += 1);
    }

} {PASS}

15.28

Directory : tests/jls/expressions/constant-expression


Test Case: 15.28-primitive-1
literals are constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-1 { literals are constant expressions } {
    
    switch_labels T1528p1 int {case 1: case '1':}

} {PASS}
Test Case: 15.28-primitive-2
literals are constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-2 { literals are constant expressions } {
    
    constant_expression T1528p2 {1L == 1L} {1f == 1f} {1.0 == 1.0} {true}

} {PASS}
Test Case: 15.28-primitive-3
casts can form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-3 { casts can form constant expressions } {
    
    constant_expression T1528p3 {(boolean) true}  {(int) 1L == (float) 1.0}  {(char) 0x61 == 'a'}  {(char) 97.0D == 'a'}  {(double) 'a' == 97.0D}  {(int) 97L == (int) 'a'}

} {PASS}
Test Case: 15.28-primitive-4
Unary +, -, ~, ! form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-4 { Unary +, -, ~, ! form constant expressions } {
    
    constant_expression T1528p4 {+2 == 2} {-0x80000000 == 0x80000000}  {~0 == 0xffffffff} {!false}

} {PASS}
Test Case: 15.28-primitive-5
++ and -- are not constant expressions

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-primitive-5 { ++ and -- are not constant expressions } {
    
    empty_class T1528p5 {
        void foo(int i) {
            switch (i) {
                case i++:
            }
        }
    }

} {FAIL}
Test Case: 15.28-primitive-6
++ and -- are not constant expressions

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-primitive-6 { ++ and -- are not constant expressions } {
    
    empty_class T1528p6 {
        void foo(int i) {
            switch (i) {
                case i--:
            }
        }
    }

} {FAIL}
Test Case: 15.28-primitive-7
*, /, and % form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-7 { *, /, and % form constant expressions } {
    
    constant_expression T1528p7 {5 * 3 == 15} {5 / 3 == 1} {5 % 3 == 2}

} {PASS}
Test Case: 15.28-primitive-8
+ and - form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-8 { + and - form constant expressions } {
    
    constant_expression T1528p8 {1 + 2 == 3} {1 - 2 == -1}

} {PASS}
Test Case: 15.28-primitive-9
<<, >>, and >>> form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-9 { <<, >>, and >>> form constant expressions } {
    
    constant_expression T1528p9 {2 << 1 == 4} {2 >> 1 == 1} {-2 >>> 1 == 0x7fffffff}

} {PASS}
Test Case: 15.28-primitive-10
<, <=, >, and >= form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-10 { <, <=, >, and >= form constant expressions } {
    
    constant_expression T1528p10 {1 < 2} {2 <= 2} {2 > 1} {1 >= 1}

} {PASS}
Test Case: 15.28-primitive-11
== and != form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-11 { == and != form constant expressions } {
    
    constant_expression T1528p11 {1 == 1} {1 != 2}  {true == true} {true != false}  {'a' == 'a'} {'a' != 'b'}

} {PASS}
Test Case: 15.28-primitive-12
bitwise &, ^, and | form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-12 { bitwise &, ^, and | form constant expressions } {
    
    constant_expression T1528p12 {(0xaa & 0xa5) == 0xa0}  {(0xaa ^ 0xa5) == 0x0f}  {(0xaa | 0xa5) == 0xaf}

} {PASS}
Test Case: 15.28-primitive-13
logical &, ^, and | form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-13 { logical &, ^, and | form constant expressions } {
    
    constant_expression T1528p13 {true & true} {true ^ false} {false | true}

} {PASS}
Test Case: 15.28-primitive-14
&& and || form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-14 { && and || form constant expressions } {
    
    constant_expression T1528p14 {true && true} {true || false}

} {PASS}
Test Case: 15.28-primitive-15
short-circuited portion of && or || must still be constant expressions

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-primitive-15 { short-circuited portion of && or || must
        still be constant expressions } {
    
    empty_main T1528p15 {
        boolean t = true, f = false;
        switch (args.length) {
            case 0:
            case ((false && t) ? 0 : 1):
            case ((true || f) ? 2 : 0):
        }
    }

} {FAIL}
Test Case: 15.28-primitive-16
?: forms a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-primitive-16 { ?: forms a constant expression } {
    
    constant_expression T1528p16 {true ? true : false}

} {PASS}
Test Case: 15.28-primitive-17
unused portion of ?: must still be a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-primitive-17 { unused portion of ?: must still
        be a constant expression } {
    
    empty_main T1528p17 {
        int i1 = 1, i2 = 2;
        switch (args.length) {
            case 0:
            case (true ? 1 : i1):
            case (false ? i2 : 2):
        }
    }

} {FAIL}
Test Case: 15.28-simple-name-1
a final variable initialized by a constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-name-1 { a final variable initialized
        by a constant expression is a constant expression } {
    
    empty_class T1528sn1 {
        static final int i = 1;
        void foo (int j) {
            switch (j) {
                case i:
            }
        }
    }

} {PASS}
Test Case: 15.28-simple-name-2
a final variable initialized by a constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-name-2 { a final variable initialized
        by a constant expression is a constant expression } {
    
    empty_class T1528sn2 {
        final int i = 1;
        void foo (int j) {
            switch (j) {
                case i:
            }
        }
    }

} {PASS}
Test Case: 15.28-simple-name-3
a final variable initialized by a constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-name-3 { a final variable initialized
        by a constant expression is a constant expression } {
    
    empty_class T1528sn3 {
        void foo (int j) {
            final int i = 1;
            switch (j) {
                case i:
            }
        }
    }

} {PASS}
Test Case: 15.28-simple-name-4
a final variable initialized by a constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-name-4 { a final variable initialized
        by a constant expression is a constant expression } {
    
    empty_class T1528sn4 {
        static final int i = 1 + 1;
        void foo (int j) {
            switch (j) {
                case i:
            }
        }
    }

} {PASS}
Test Case: 15.28-simple-name-5
a final variable initialized by a constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-name-5 { a final variable initialized
        by a constant expression is a constant expression } {
    
    empty_class T1528sn5 {
        final int i = 1 - 1;
        void foo (int j) {
            switch (j) {
                case i:
            }
        }
    }

} {PASS}
Test Case: 15.28-simple-name-6
a final variable initialized by a constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-name-6 { a final variable initialized
        by a constant expression is a constant expression } {
    
    empty_class T1528sn6 {
        void foo (int j) {
            final int i = true ? 1 : 0;
            switch (j) {
                case i:
            }
        }
    }

} {PASS}
Test Case: 15.28-simple-name-7
a final variable initialized by a final variable that is initialized by constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-name-7 { a final variable initialized
        by a final variable that is initialized by constant expression
        is a constant expression } {
    
    empty_class T1528sn7 {
        static final int i1 = 1;
        static final int i2 = i1;
        void foo (int j) {
            switch (j) {
                case i2:
            }
        }
    }

} {PASS}
Test Case: 15.28-simple-name-8
a final variable initialized by a final variable that is initialized by constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-name-8 { a final variable initialized
        by a final variable that is initialized by constant expression
        is a constant expression } {
    
    empty_class T1528sn8 {
        final int i1 = 2 / 1;
        final int i2 = i1;
        void foo (int j) {
            switch (j) {
                case i2:
            }
        }
    }

} {PASS}
Test Case: 15.28-simple-name-9
a final variable initialized by a final variable that is initialized by constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-name-9 { a final variable initialized
        by a final variable that is initialized by constant expression
        is a constant expression } {
    
    empty_class T1528sn9 {
        void foo (int j) {
            final int i1 = 2 * 2;
            final int i2 = i1;
            switch (j) {
                case i2:
            }
        }
    }

} {PASS}
Test Case: 15.28-nonconst-simple-name-1
a non-final variable initialized by a constant expression is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-nonconst-simple-name-1 { a non-final variable initialized
        by a constant expression is not a constant expression } {
    
    empty_class T1528nsn1 {
        int i = 1;
        void foo (int j) {
            switch (j) {
                case i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-nonconst-simple-name-2
a final variable initialized by a non-final variable is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-nonconst-simple-name-2 { a final variable initialized
        by a non-final variable is not a constant expression } {
    
    empty_class T1528nsn2 {
        int i1 = 1;
        final int i2 = i1;
        void foo (int j) {
            switch (j) {
                case i2:
            }
        }
    }

} {FAIL}
Test Case: 15.28-nonconst-simple-name-3
a final variable initialized by a non-constant expression is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-nonconst-simple-name-3 { a final variable initialized
        by a non-constant expression is not a constant expression } {
    
    empty_class T1528nsn3 {
        int i1 = 0;
        final int i2 = i1++;
        void foo (int j) {
            switch (j) {
                case i2:
            }
        }
    }

} {FAIL}
Test Case: 15.28-nonconst-simple-name-4
an argument variable with the final modifier is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-nonconst-simple-name-4 { an argument variable with
        the final modifier is not a constant expression } {
    
    empty_class T1528nsn4 {
        void foo (final int i) {
            switch (i) {
                case i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-nonconst-simple-name-5
a final variable initialized by an argument variable with the final modifier is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-nonconst-simple-name-5 { a final variable initialized by
        an argument variable with the final modifier is not a constant expression } {
    
    empty_class T1528nsn5 {
        void foo (final int i) {
            final int j = i;
            switch (i) {
                case j:
            }
        }
    }

} {FAIL}
Test Case: 15.28-nonconst-simple-name-6
a final variable initialized by a function invocation is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-nonconst-simple-name-6 { a final variable initialized by
        a function invocation is not a constant expression } {
    
    empty_class T1528nsn6 {
        void foo (int i) {
            final int j = Integer.parseInt("1");
            switch (i) {
                case j:
            }
        }
    }

} {FAIL}
Test Case: 15.28-nonconst-simple-name-7
a final variable initialized by a ternary conditional operator with a non-constant value is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-nonconst-simple-name-7 { a final variable initialized by
        a ternary conditional operator with a non-constant value is not
        a constant expression } {
    
    empty_class T1528nsn7 {
        void foo (int i) {
            final int j = true ? 1 : Integer.parseInt("1");
            switch (i) {
                case j:
            }
        }
    }

} {FAIL}
Test Case: 15.28-uninitialized-simple-name-1
a final variable that does not have an initializer is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-uninitialized-simple-name-1 { a final variable that does
        not have an initializer is not a constant expression } {
    
    empty_class T1528usn1 {
        static final int i;
        static { i = 1; }
        void foo (int j) {
            switch (j) {
                case i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-uninitialized-simple-name-2
a final variable that does not have an initializer is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-uninitialized-simple-name-2 { a final variable that does
        not have an initializer is not a constant expression } {
    
    empty_class T1528usn2 {
        static final int i;
        static { i = Integer.parseInt("1"); }
        void foo (int j) {
            switch (j) {
                case i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-uninitialized-simple-name-3
a final variable that does not have an initializer is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-uninitialized-simple-name-3 { a final variable that does
        not have an initializer is not a constant expression } {
    
    empty_class T1528usn3 {
        void foo (int j) {
            final int i;
            i = 1;
            switch (j) {
                case i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-uninitialized-simple-name-4
a final variable that does not have an initializer is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-uninitialized-simple-name-4 { a final variable that does
        not have an initializer is not a constant expression } {
    
    empty_class T1528usn4 {
        void foo (int j) {
            final int i;
            i = Integer.parseInt("1");
            switch (j) {
                case i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-cast-simple-name-1
a final variable initialized by a constant expression and then cast to a primitive is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-cast-simple-name-1 { a final variable initialized
        by a constant expression and then cast to a primitive is a
        constant expression } {
    
    empty_class T1528csn1 {
        final long l1 = 1L;
        final long l2 = Long.MAX_VALUE;
        void foo (int j) {
            switch (j) {
                case (int) l1:
                case (int) l2:
            }
        }
    }

} {PASS}
Test Case: 15.28-cast-simple-name-2
a final variable initialized by a constant expression and then cast to a primitive is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-cast-simple-name-2 { a final variable initialized
        by a constant expression and then cast to a primitive is a
        constant expression } {
    
    empty_class T1528csn2 {
        final boolean t = true;
        void foo (int j) {
            switch (j) {
                case 0:
                case ((boolean) t ? 1 : 0):
            }
        }
    }

} {PASS}
Test Case: 15.28-cast-simple-name-3
any number of casts can be applied to a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-cast-simple-name-3 { any number of casts
        can be applied to a constant expression } {
    
    empty_class T1528csn3 {
        final byte b = (byte) (float) 1.0D;
        final char c = (char) b;
        final short s = (short) c;
        final int i = (int) s;
        final long l = (long) i;
        void foo (int j) {
            switch (j) {
                case 0:
                case (((double) l == 1.0D) ? (int) l : 0):
                case 2:
            }
        }
    }

} {PASS}
Test Case: 15.28-qualified-name-1
qualified references of final constant fields are constant

Expected Result: PASS

Regression Test:

tcltest::test 15.28-qualified-name-1 { qualified references
        of final constant fields are constant } {
    
    empty_class T1528qn1 {
        static final int i = 1;
        void foo(int j) {
            switch (j) {
                case T1528qn1.i:
                case Integer.MAX_VALUE:
            }
        }
    }

} {PASS}
Test Case: 15.28-qualified-name-2
qualified references of final constant fields are constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-name-2 { qualified references
        of final constant fields are constant } {
    
    empty_class T1528qn2 {
        static int i = 1;
        void foo(int j) {
            switch (j) {
                case T1528qn2.i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-name-3
qualified references of final constant fields are constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-name-3 { qualified references
        of final constant fields are constant } {
    
    empty_class T1528qn3 {
        static int i = 1;
        static final int i1 = i;
        void foo(int j) {
            switch (j) {
                case T1528qn3.i1:
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-name-4
qualified references of final constant fields are constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-name-4 { qualified references
        of final constant fields are constant } {
    
    empty_class T1528qn4 {
        static final int i;
        static {i = 1;}
        void foo(int j) {
            switch (j) {
                case T1528qn4.i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-name-5
qualified references of final constant fields must fit the form TypeName.Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-name-5 { qualified references
        of final constant fields must fit the form TypeName.Identifier } {
    
    empty_class T1528qn5 {
        static final T1528qn5 t = new T1528qn5();
        final int i = 1;
        void foo(int j) {
            switch (j) {
                case T1528qn5.t.i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-name-6
qualified references of final constant fields must fit the form TypeName.Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-name-6 { qualified references
        of final constant fields must fit the form TypeName.Identifier } {
    
    empty_class T1528qn6 {
        static final T1528qn6 t = new T1528qn6();
        final int i = 1;
        void foo(int j) {
            switch (j) {
                case t.i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-name-7
qualified references of final constant fields must fit the form TypeName.Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-name-7 { qualified references
        of final constant fields must fit the form TypeName.Identifier } {
    
    empty_class T1528qn7 {
        static final T1528qn7 t = new T1528qn7();
        final int i = 1;
        void foo(int j) {
            switch (j) {
                case T1528qn7.t.i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-name-8
qualified references of final constant fields must fit the form TypeName.Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-name-8 { qualified references
        of final constant fields must fit the form TypeName.Identifier } {
    
    empty_class T1528qn8 {
        static final T1528qn8 t = new T1528qn8();
        static final int i = 1;
        void foo(int j) {
            switch (j) {
                case t.i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-name-9
qualified references of final constant fields must fit the form TypeName.Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-name-9 { qualified references
        of final constant fields must fit the form TypeName.Identifier } {
    
    empty_class T1528qn9 {
        static final int i = 1;
        void foo(int j) {
            final T1528qn9 t = new T1528qn9();
            switch (j) {
                case t.i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-name-10
qualified references of final constant fields must fit the form TypeName.Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-name-10 { qualified references
        of final constant fields must fit the form TypeName.Identifier } {
    
    empty_class T1528qn10 {
        final int i = 1;
        void foo(int j) {
            final T1528qn10 t = new T1528qn10();
            switch (j) {
                case t.i:
            }
        }
    }

} {FAIL}
Test Case: 15.28-string-1
literals are constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-1 { literals are constant expressions } {
    
    constant_expression T1528s1 {"" == ""} {"hello, world" == "hello, world"}

} {PASS}
Test Case: 15.28-string-2
literals are constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-2 { literals are constant expressions } {
    
    constant_expression T1528s2 {"" + 1 == "1"}  {"" + 1L == "1"}  {"" + 1f == "1.0"}  {"" + 1.0 == "1.0"}  {"" + '1' == "1"}  {"" + true == "true"}

} {PASS}
Test Case: 15.28-string-3
casts to type String are constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-3 { casts to type String are
        constant expressions } {
    
    constant_expression T1528s3 {(String) "" == ""}

} {PASS}
Test Case: 15.28-string-4
casts to primitive types are constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-4 { casts to primitive types are
        constant expressions } {
    
    constant_expression T1528s3 {"" + (boolean) true == "true"}  {"" + (int) 1.5 == "1"}

} {PASS}
Test Case: 15.28-string-5
Unary +, -, ~, ! form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-5 { Unary +, -, ~, ! form constant expressions } {
    
    constant_expression T1528s5 {"" + +2 == "2"} {"" + -0x80000000 == "-2147483648"}  {"" + ~0 == "-1"}  {"" + !false == "true"}

} {PASS}
Test Case: 15.28-string-6
*, /, and % form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-6 { *, /, and % form constant expressions } {
    
    constant_expression T1528s6 {"" + 5 * 3 == "15"}  {"" + 5 / 3 == "1"}  {"" + 5 % 3 == "2"}

} {PASS}
Test Case: 15.28-string-7
String + forms constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-7 { String + forms constant expressions } {
    
    constant_expression T1528s7 {"" + "test" + "ing" == "testing"}  {"a" + "b" == "\u0061b"}  {"" + ("1" + '2' + 3 +4L) == "1234"}

} {PASS}
Test Case: 15.28-string-8
+ and - form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-8 { + and - form constant expressions } {
    
    constant_expression T1528s8 {"" + (1 + 2) == "3"}  {"" + (1 - 2) == "-1"}

} {PASS}
Test Case: 15.28-string-9
<<, >>, and >>> form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-9 { <<, >>, and >>> form constant expressions } {
    
    constant_expression T1528s9 {"" + (2 << 1) == "4"}  {"" + (2 >> 1) == "1"}  {"" + (-2 >>> 1) == "2147483647"}

} {PASS}
Test Case: 15.28-string-10
<, <=, >, and >= form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-10 { <, <=, >, and >= form constant expressions} {
    
    constant_expression T1528s10 {"" + (1 < 2) == "true"}  {"" + (2 <= 2) == "true"}  {"" + (2 > 1) == "true"}  {"" + (1 >= 1) == "true"}

} {PASS}
Test Case: 15.28-string-11
== and != form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-11 { == and != form constant expressions } {
    
    constant_expression T1528s11 {"1" == "1"} {"1" != "2"}

} {PASS}
Test Case: 15.28-string-12
bitwise &, ^, and | form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-12 { bitwise &, ^, and | form constant expressions } {
    
    constant_expression T1528s12 {"" + (0xaa & 0xa5) == "160"}  {"" + (0xaa ^ 0xa5) == "15"}  {"" + (0xaa | 0xa5) == "175"}

} {PASS}
Test Case: 15.28-string-13
logical &, ^, and | form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-13 { logical &, ^, and | form constant expressions} {
    
    constant_expression T1528s13 {"" + (true & true) == "true"}  {"" + (true ^ false) == "true"}  {"" + (false | true) == "true"}

} {PASS}
Test Case: 15.28-string-14
&& and || form constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-14 { && and || form constant expressions } {
    
    constant_expression T1528s14 {"" + (true && true) == "true"}  {"" + (true || false) == "true"}

} {PASS}
Test Case: 15.28-string-15
?: forms constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-15 { ?: forms constant expressions } {
    
    constant_expression T1528s15 {"" + (true ? 1 : 2) == "1"}

} {PASS}
Test Case: 15.28-string-16
?: forms constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-16 { ?: forms constant expressions } {
    
    constant_expression T1528s16 {(true ? "1" : "") == "1"}

} {PASS}
Test Case: 15.28-string-17
?: forms constant expressions

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-17 { ?: forms constant expressions } {
    
    constant_expression T1528s17 {"" + (true ? "foo" : "bar") == "foo"}  {"" + (false ? "foo" : "bar") == "bar"}  
} {PASS}
Test Case: 15.28-string-18
String concatenation form constants

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-18 { String concatenation form constants } {
    
    empty_class T1528s18 {
        static final String a = "a";
        static final String b = "b";
        void foo(int i) {
            final String s = a + b;
            switch (i) {
                case 0:
                case ((s == "ab") ? 1 : 0):
            }
        }
    }

} {PASS}
Test Case: 15.28-string-19
test various uses of a constant String expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-string-19 { test various uses of a constant String
        expression } {
    
    empty_class T1528s19 {
	void m() {
	    ("1" + 2).toString();
	    ("1" + 2).valueOf(1);
	}
    }

} {PASS}
Test Case: 15.28-simple-namestr-1
a final variable initialized by a constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-namestr-1 { a final variable initialized
        by a constant expression is a constant expression } {
    
    empty_class T1528sns1 {
        void foo (int j) {
            final String s = "1";
            switch (j) {
                case 0:
                case ((s == "1") ? 1 : 0):
            }
        }
    }

} {PASS}
Test Case: 15.28-simple-namestr-2
a final variable initialized by a constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-namestr-2 { a final variable initialized
        by a constant expression is a constant expression } {
    
    empty_class T1528sns2 {
        void foo (int j) {
            final String s = "1" + "2";
            switch (j) {
                case 0:
                case ((s == "12") ? 1 : 0):
            }
        }
    }

} {PASS}
Test Case: 15.28-simple-namestr-3
a final variable initialized by a constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-namestr-3 { a final variable initialized
        by a constant expression is a constant expression } {
    
    empty_class T1528sns3 {
        void foo (int j) {
            final String s = "1" + (int) 2.0D;
            switch (j) {
                case 0:
                case ((s == "12") ? 1 : 0):
            }
        }
    }

} {PASS}
Test Case: 15.28-simple-namestr-4
a final variable initialized by a final variable that is initialized by constant expression is a constant expression

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-namestr-4 { a final variable initialized
        by a final variable that is initialized by constant expression
        is a constant expression } {
    
    empty_class T1528sns4 {
        void foo (int j) {
            final String s1 = "1";
            final String s2 = s1;
            switch (j) {
                case 0:
                case ((s2 == "1") ? 1 : 0):
            }
        }
    }

} {PASS}
Test Case: 15.28-simple-namestr-5
test various uses of a constant String

Expected Result: PASS

Regression Test:

tcltest::test 15.28-simple-namestr-5 { test various uses of a constant
        String } {
    
    compile [saveas T1528sn5a.java {
class T1528sn5a {
    static final String s = "a";
}
class T1528sn5b {
    void m() {
	class Local extends T1528sn5a {
	    void m() {
		s.toString();
		s.valueOf(1);
	    }
	}
    }
}
    }]

} {PASS}
Test Case: 15.28-nonconst-simple-namestr-1
a non-final variable initialized by a constant expression is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-nonconst-simple-namestr-1 { a non-final variable initialized
        by a constant expression is not a constant expression } {
    
    empty_class T1528nsns1 {
        String s = "1";
        void foo (int j) {
            switch (j) {
                case 0:
                case ((s == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-nonconst-simple-namestr-2
a final variable initialized by a non-final variable is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-nonconst-simple-namestr-2 { a final variable initialized
        by a non-final variable is not a constant expression } {
    
    empty_class T1528nsns2 {
        String s1 = "1";
        final String s2 = s1;
        void foo (int j) {
            switch (j) {
                case 0:
                case ((s2 == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-nonconst-simple-namestr-3
a final variable initialized by a function invocation is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-nonconst-simple-namestr-3 { a final variable initialized
        by a function invocation is not a constant expression } {
    
    empty_class T1528nsns3 {
        final String s = String.valueOf(0L);
        void foo (int j) {
            switch (j) {
                case 0:
                case ((s == "0") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-namestr-1
qualified references of final constant fields are constant

Expected Result: PASS

Regression Test:

tcltest::test 15.28-qualified-namestr-1 { qualified
        references of final constant fields are constant } {
    
    empty_class T1528qns1 {
        static final String s = "1";
        void foo(int j) {
            switch (j) {
                case 0:
                case ((T1528qns1.s == "1") ? 1 : 0):
            }
        }
    }

} {PASS}
Test Case: 15.28-qualified-namestr-2
qualified references of final constant fields are constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-namestr-2 { qualified
        references of final constant fields are constant } {
    
    empty_class T1528qns2 {
        static String s = "1";
        void foo(int j) {
            switch (j) {
                case 0:
                case ((T1528qns2.s == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-namestr-3
qualified references of final constant fields are constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-namestr-3 { qualified
        references of final constant fields are constant } {
    
    empty_class T1528qns3 {
        static String s = "1";
        static final String s1 = s;
        void foo(int j) {
            switch (j) {
                case 0:
                case ((T1528qns3.s1 == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-namestr-4
qualified references of final constant fields are constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-namestr-4 { qualified
        references of final constant fields are constant } {
    
    empty_class T1528qns4 {
        static final String s;
        static {s = "1";}
        void foo(int j) {
            switch (j) {
                case 0:
                case ((T1528qns4.s == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-namestr-5
qualified references of final constant must fit the form TypeName.Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-namestr-5 { qualified references
        of final constant must fit the form TypeName.Identifier } {
    
    empty_class T1528qns5 {
        static final T1528qns5 t = new T1528qns5();
        final String s = "1";
        void foo(int j) {
            switch (j) {
                case 0:
                case ((T1528qns5.t.s == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-namestr-6
qualified references of final constant must fit the form TypeName.Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-namestr-6 { qualified references
        of final constant must fit the form TypeName.Identifier } {
    
    empty_class T1528qns6 {
        static final T1528qns6 t = new T1528qns6();
        final String s = "1";
        void foo(int j) {
            switch (j) {
                case 0:
                case ((t.s == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-namestr-7
qualified references of final constant must fit the form TypeName.Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-namestr-7 { qualified references
        of final constant must fit the form TypeName.Identifier } {
    
    empty_class T1528qns7 {
        static final T1528qns7 t = new T1528qns7();
        static final String s = "1";
        void foo(int j) {
            switch (j) {
                case 0:
                case ((t.s == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-namestr-8
qualified references of final constant must fit the form TypeName.Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-namestr-8 { qualified references
        of final constant must fit the form TypeName.Identifier } {
    
    empty_class T1528qns8 {
        static final T1528qns8 t = new T1528qns8();
        static final String s = "1";
        void foo(int j) {
            switch (j) {
                case 0:
                case ((t.s == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-namestr-9
qualified references of final constant must fit the form TypeName.Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-namestr-9 { qualified references
        of final constant must fit the form TypeName.Identifier } {
    
    empty_class T1528qns9 {
        static final String s = "1";
        void foo(int j) {
            final T1528qns9 t = new T1528qns9();
            switch (j) {
                case 0:
                case ((t.s == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-qualified-namestr-10
qualified references of final constant must fit the form TypeName.Identifier

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-qualified-namestr-10 { qualified references
        of final constant must fit the form TypeName.Identifier } {
    
    empty_class T1528qns10 {
        final String s = "1";
        void foo(int j) {
            final T1528qns10 t = new T1528qns10();
            switch (j) {
                case 0:
                case ((t.s == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-notstring-1
casting a String to anything other than string makes is not a constant expression, casting back to String does not reverse the process

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-notstring-1 { casting a String to anything
        other than string makes is not a constant expression,
        casting back to String does not reverse the process } {
    
    constant_expression T1528nots1 {(String) (Object) "" == ""}

} {FAIL}
Test Case: 15.28-notstring-2
anything other than type String is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-notstring-2 { anything other than type String
        is not a constant expression } {
    
    empty_class T1528nots2 {
        final Object o = "1";
        void foo (int j) {
            switch (j) {
                case 0:
                case ((o == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-notstring-3
anything other than type String is not a constant expression, casting to String does not help

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-notstring-3 { anything other than type String
        is not a constant expression, casting to String does not help } {
    
    empty_class T1528nots3 {
        final Object o = "1";
        void foo (int j) {
            switch (j) {
                case 0:
                case (((String) o == "1") ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-notstring-4
anything other than type String is not a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-notstring-4 { anything other than type String
        is not a constant expression } {
    
    constant_expression T1528nots4 {"" + ((Object) "") == ""}

} {FAIL}
Test Case: 15.28-null-1
The null literal is NOT a compile-time constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-null-1 { The null literal is NOT a compile-time constant } {
    
    constant_expression T1528null1 {null == null}

} {FAIL}
Test Case: 15.28-null-2
The null literal is NOT a compile-time constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-null-2 { The null literal is NOT a compile-time constant } {
    
    constant_expression T1528null2 {null != ""}

} {FAIL}
Test Case: 15.28-null-3
The null literal is NOT a compile-time constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-null-3 { The null literal is NOT a compile-time constant } {
    
    constant_expression T1528null3 {"" + null == "null"}

} {FAIL}
Test Case: 15.28-null-4
The null literal is NOT a compile-time constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-null-4 { The null literal is NOT a compile-time constant } {
    
    constant_expression T1528null4 {(String)null + (String)null == "nullnull"}

} {FAIL}
Test Case: 15.28-null-5
The null literal is NOT a compile-time constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-null-5 { The null literal is NOT a compile-time constant } {
    
    empty_class T1528null5 {
        static final String s = null;
        void foo(int i) {
            switch (i) {
                case 0:
                case (("" != s) ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-null-6
The null literal is NOT a compile-time constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-null-6 { The null literal is NOT a compile-time constant } {
    
    empty_class T1528null6 {
        void foo(int i) {
            final String s = null;
            switch (i) {
                case 0:
                case (("" != s) ? 1 : 0):
            }
        }
    }

} {FAIL}
Test Case: 15.28-null-7
The null literal is NOT a compile-time constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-null-7 { The null literal is NOT a compile-time constant } {
    
    constant_expression T1528null7 {"" + (true ? null : null) == "null"}

} {FAIL}
Test Case: 15.28-example-1
Example constants

Expected Result: PASS

Regression Test:

tcltest::test 15.28-example-1 { Example constants } {
    
    constant_expression T1528e1 {true} {(short)(1*2*3*4*5*6) == 720}  {Integer.MAX_VALUE / 2 == 0x3fffffff}  {2.0 * Math.PI == 6.283185307179586}

} {PASS}
Test Case: 15.28-example-2
Example constant

Expected Result: PASS

Regression Test:

tcltest::test 15.28-example-2 { Example constant } {
    
    constant_expression T1528e2 {"The integer " + Long.MAX_VALUE +
    " is mighty big." == "The integer 9223372036854775807 is mighty big."}

} {PASS}
Test Case: 15.28-instanceof-1
The expression argument of instanceof may be constant

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-instanceof-1 { The expression argument of instanceof may be constant } {
    
    constant_expression T1528i1 {null instanceof Object}

} {FAIL}
Test Case: 15.28-instanceof-2
instanceof does not form a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-instanceof-2 { instanceof does not form a constant expression } {
    
    constant_expression T1528i2 {"" instanceof String}

} {FAIL}
Test Case: 15.28-instanceof-3
instanceof does not form a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-instanceof-3 { instanceof does not form a constant expression } {
    
    constant_expression T1528i3 {"" + (null instanceof Object) == "false"}

} {FAIL}
Test Case: 15.28-instanceof-4
instanceof does not form a constant expression

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-instanceof-4 { instanceof does not form a constant expression } {
    
    constant_expression T1528i4 {"" + ("" instanceof String) == "true"}

} {FAIL}
Test Case: 15.28-instanceof-5
use of a constant with instanceof

Expected Result: PASS

Regression Test:

tcltest::test 15.28-instanceof-5 { use of a constant with instanceof } {
    
    compile [saveas T1528i5a.java {
class T1528i5a {
    static final String s = "a";
}
class T1528i5b {
    void m() {
	class Local extends T1528i5a {
	    void m() {
		boolean b = s instanceof String;
	    }
	}
    }
}
    }]

} {PASS}
Test Case: 15.28-div0-1
divide by zero is not a compile time constant because it completes abruptly

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-div0-1 { divide by zero is not a compile time constant
        because it completes abruptly } {
    
    constant_expression T1528div01 {"" + (5/0) == "0"}

} {FAIL}
Test Case: 15.28-div0-2
divide by zero is not a compile time constant because it completes abruptly

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-div0-2 { divide by zero is not a compile time constant
        because it completes abruptly } {
    
    constant_expression T1528div02 {"" + (0%0) == "0"}

} {FAIL}
Test Case: 15.28-div0-3
divide by zero is not a compile time constant because it completes abruptly

Expected Result: FAIL

Regression Test:

tcltest::test 15.28-div0-3 { divide by zero is not a compile time constant
        because it completes abruptly } {
    
    constant_expression T1528div03 {"" + (8/(1-1)) == "0"}

} {FAIL}
Test Case: 15.28-paren-1
A parenthesized constant expression is constant

Expected Result: PASS

Regression Test:

tcltest::test 15.28-paren-1 { A parenthesized constant expression is
        constant } {
    
    constant_expression T1528paren1 { ((((1)+2)+3)+4 == 10) }

} {PASS}

16

Directory : tests/jls/definite-assignment


Test Case: 16-static-1
A blank final field may only be assigned by simple name

Expected Result: FAIL

Regression Test:

tcltest::test 16-static-1 { A blank final field may only be assigned by
        simple name } {
    
    empty_class T16s1 {
        static final int i;
        static {
            T16s1.i = 1;
        }
    }

} {FAIL}
Test Case: 16-static-2
A blank final field may only be assigned by simple name

Expected Result: FAIL

Regression Test:

tcltest::test 16-static-2 { A blank final field may only be assigned by
        simple name } {
    
    empty_class T16s2 {
        static final int i;
        static {
            new T16s2().i = 1;
        }
    }

} {FAIL}
Test Case: 16-static-3
A blank final field may only be assigned by simple name

Expected Result: PASS

Regression Test:

tcltest::test 16-static-3 { A blank final field may only be assigned by
        simple name } {
    
    empty_class T16s3 {
        static final int i;
        static {
            i = 1;
        }
    }

} {PASS}
Test Case: 16-instance-1
A blank final field may only be assigned by simple name or this.name

Expected Result: FAIL

Regression Test:

tcltest::test 16-instance-1 { A blank final field may only be assigned by
        simple name or this.name } {
    
    empty_class T16i1 {
        final int i;
        {
            new T16i1().i = 1;
        }
    }

} {FAIL}
Test Case: 16-instance-2
A blank final field may only be assigned by simple name or this.name

Expected Result: FAIL

Regression Test:

tcltest::test 16-instance-2 { A blank final field may only be assigned by
        simple name or this.name } {
    
    empty_class T16i2 {
        final T16i2 t, x;
        {
            (true ? x = new T16i2() : null).t = null;
        }
    }

} {FAIL}
Test Case: 16-instance-3
A blank final field may only be assigned by simple name or this.name

Expected Result: PASS

Regression Test:

tcltest::test 16-instance-3 { A blank final field may only be assigned by
        simple name or this.name } {
    
    empty_class T16i3 {
        final int i;
        {
            i = 1;
        }
    }

} {PASS}
Test Case: 16-instance-4
A blank final field may only be assigned by simple name or this.name

Expected Result: PASS

Regression Test:

tcltest::test 16-instance-4 { A blank final field may only be assigned by
        simple name or this.name } {
    
    empty_class T16i4 {
        final int i;
        {
            this.i = 1;
        }
    }

} {PASS}
Test Case: 16-instance-5
A blank final field may only be assigned by simple name or this.name

Expected Result: FAIL

Regression Test:

tcltest::test 16-instance-5 { A blank final field may only be assigned by
        simple name or this.name } {
    
    empty_class T16i5 {
        final int i;
        {
            T16i5.this.i = 1;
        }
    }

} {FAIL}
Test Case: 16-instance-6
A blank final field may only be assigned by simple name or this.name

Expected Result: FAIL

Regression Test:

tcltest::test 16-instance-6 { A blank final field may only be assigned by
        simple name or this.name } {
    
    empty_class T16i6 {
        final int i;
        {
            (this).i = 1;
        }
    }

} {FAIL}
Test Case: 16-instance-7
A blank final field may only be assigned by simple name or this.name

Expected Result: FAIL

Regression Test:

tcltest::test 16-instance-7 { A blank final field may only be assigned by
        simple name or this.name } {
    
    empty_class T16i7 {
        final int i;
        {
            (T16i7.this).i = 1;
        }
    }

} {FAIL}

16.1.2

Directory : tests/jls/definite-assignment/expressions/boolean-conditional-and


Test Case: 16.1.2-definite-assignment-fail-1
V is DA after a && b when true iff V is DA after b when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-assignment-fail-1 { V is DA after a && b when
        true iff V is DA after b when true } {
    
    empty_main T1612daf1 {
        boolean x, y = true;
        if (y && y)
            y = x;
    }

} {FAIL}
Test Case: 16.1.2-definite-assignment-fail-2
V is DA after a && b when false iff V is DA after a when false and V is DA after b when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-assignment-fail-2 { V is DA after a && b when
        false iff V is DA after a when false and V is DA after b when false } {
    
    empty_main T1612daf2 {
        boolean x, y = true;
        if (y && true); // DA after b, but not after a
        else y = x;
    }

} {FAIL}
Test Case: 16.1.2-definite-assignment-fail-3
V is DA after a && b when false iff V is DA after a when false and V is DA after b when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-assignment-fail-3 { V is DA after a && b when
        false iff V is DA after a when false and V is DA after b when false } {
    
    empty_main T1612daf3 {
        boolean x, y = true;
        if (true && y); // DA after a, but not after b
        else y = x;
    }

} {FAIL}
Test Case: 16.1.2-definite-assignment-fail-4
V is DA before a iff V is DA before a && b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-assignment-fail-4 { V is DA before a iff V is
        DA before a && b } {
    
    empty_main T1612daf4 {
        boolean x;
        boolean y = x && true;
    }

} {FAIL}
Test Case: 16.1.2-definite-assignment-fail-5
V is DA before b iff V is DA after a when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-assignment-fail-5 { V is DA before b iff V is
        DA after a when true } {
    
    empty_main T1612daf5 {
        boolean x, y = true;
        y = y && x;
    }

} {FAIL}
Test Case: 16.1.2-definite-assignment-fail-6
V is DA after a && b iff V is DA after a && b when true and when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-assignment-fail-6 { V is DA after a && b iff
        V is DA after a && b when true and when false } {
    
    empty_main T1612daf6 {
        boolean x, y = true;
        y = y && (x = true) // DA after a && b when true, but not when false
        y = x;
    }

} {FAIL}
Test Case: 16.1.2-definite-assignment-fail-7
V is DA after a && b iff V is DA after a && b when true and when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-assignment-fail-7 { V is DA after a && b iff
        V is DA after a && b when true and when false } {
    
    empty_main T1612daf7 {
        boolean x, y = true;
        y = true && (true ? true : y) // DA after a && b when false,
                                      // but not when true
        y = x;
    }

} {FAIL}
Test Case: 16.1.2-definite-assignment-pass-1
V is DA after a && b when true iff V is DA after b when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.2-definite-assignment-pass-1 { V is DA after a && b when
        true iff V is DA after b when true } {
    
    empty_main T1612dap1 {
        boolean x, y = true;
        if (y && false)
            y = x;
    }

} {PASS}
Test Case: 16.1.2-definite-assignment-pass-2
V is DA after a && b when true iff V is DA after b when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.2-definite-assignment-pass-2 { V is DA after a && b when
        true iff V is DA after b when true } {
    
    empty_main T1612dap2 {
        boolean x, y = true;
        if (false && y)
            y = x;
    }

} {PASS}
Test Case: 16.1.2-definite-assignment-pass-3
V is DA after a && b when false iff V is DA after a when false and V is DA after b when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.2-definite-assignment-pass-3 { V is DA after a && b when
        false iff V is DA after a when false and V is DA after b when false } {
    
    empty_main T1612dap3 {
        boolean x, y = true;
        if (true && (true ? true : y));
        else y = x;
    }

} {PASS}
Test Case: 16.1.2-definite-assignment-pass-4
V is DA before a iff V is DA before a && b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.2-definite-assignment-pass-4 { V is DA before a iff V is
        DA before a && b } {
    
    empty_main T1612dap4 {
        boolean x = false;
        boolean y = x && true;
    }

} {PASS}
Test Case: 16.1.2-definite-assignment-pass-5
V is DA before b iff V is DA after a when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.2-definite-assignment-pass-5 { V is DA before b iff V is
        DA after a when true } {
    
    empty_main T1612dap5 {
        boolean x;
        boolean y = false && x;
    }

} {PASS}
Test Case: 16.1.2-definite-assignment-pass-6
V is DA after a && b iff V is DA after a && b when true and when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.2-definite-assignment-pass-6 { V is DA after a && b iff
        V is DA after a && b when true and when false } {
    
    empty_main T1612dap6 {
        boolean x, y = true;
        y = (x = true) && y;
        y = x;
    }

} {PASS}
Test Case: 16.1.2-definite-unassignment-fail-1
V is DU after a && b when true iff V is DU after b when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-unassignment-fail-1 { V is DU after a && b when
        true iff V is DU after b when true } {
    
    empty_main T1612duf1 {
        final boolean x;
        boolean y = x = true;
        if (y && true)
            x = y;
    }

} {FAIL}
Test Case: 16.1.2-definite-unassignment-fail-2
V is DU after a && b when false iff V is DU after a when false and V is DU after b when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-unassignment-fail-2 { V is DU after a && b when
        false iff V is DU after a when false and V is DU after b when false } {
    
    empty_main T1612duf2 {
        final boolean x;
        boolean y = true;
        if ((x = true) && true); // DU after b, but not after a
        else x = y;
    }

} {FAIL}
Test Case: 16.1.2-definite-unassignment-fail-3
V is DU after a && b when false iff V is DU after a when false and V is DU after b when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-unassignment-fail-3 { V is DU after a && b when
        false iff V is DU after a when false and V is DU after b when false } {
    
    empty_main T1612duf3 {
        final boolean x, y;
        if (true && (x = false)); // DU after a, but not after b
        else x = y;
    }

} {FAIL}
Test Case: 16.1.2-definite-unassignment-fail-4
V is DU before a iff V is DU before a && b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-unassignment-fail-4 { V is DU before a iff V is
        DU before a && b } {
    
    empty_main T1612duf4 {
        final boolean x;
        x = true;
        boolean y = (x = true) && true;
    }

} {FAIL}
Test Case: 16.1.2-definite-unassignment-fail-5
V is DU before b iff V is DU after a when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-unassignment-fail-5 { V is DU before b iff V is
        DU after a when true } {
    
    empty_main T1612duf5 {
        final boolean x;
        boolean y = (x = false) && (x = true);
    }

} {FAIL}
Test Case: 16.1.2-definite-unassignment-fail-6
V is DU after a && b iff V is DU after a && b when true and when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-unassignment-fail-6 { V is DU after a && b iff
        V is DU after a && b when true and when false } {
    
    empty_main T1612duf6 {
        final boolean x;
        boolean y = false && ((x = true) || true);
        // DU after a && b when false, but not when true
        x = y;
    }

} {FAIL}
Test Case: 16.1.2-definite-unassignment-fail-7
V is DU after a && b iff V is DU after a && b when true and when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.2-definite-unassignment-fail-7 { V is DU after a && b iff
        V is DU after a && b when true and when false } {
    
    empty_main T1612duf7 {
        final boolean x;
        boolean y = (x = true) && false;
        // DU after a && b when true, but not when false
        x = y;
    }

} {FAIL}
Test Case: 16.1.2-definite-unassignment-pass-1
V is DU after a && b when true iff V is DU after b when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.2-definite-unassignment-pass-1 { V is DU after a && b when
        true iff V is DU after b when true } {
    
    empty_main T1612dup1 {
        final boolean x;
        if ((x = true) && false)
            x = true;
    }

} {PASS}
Test Case: 16.1.2-definite-unassignment-pass-2
V is DU after a && b when false iff V is DU after a when false and V is DU after b when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.2-definite-unassignment-pass-2 { V is DU after a && b when
        false iff V is DU after a when false and V is DU after b when false } {
    
    empty_main T1612dup2 {
        final boolean x;
        if (true && ((x = false) || true));
        else x = true;
    }

} {PASS}
Test Case: 16.1.2-definite-unassignment-pass-3
V is DU before a iff V is DU before a && b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.2-definite-unassignment-pass-3 { V is DU before a iff V is
        DU before a && b } {
    
    empty_main T1612dup3 {
        final boolean x;
        boolean y = (x = true) && true;
    }

} {PASS}
Test Case: 16.1.2-definite-unassignment-pass-4
V is DU before b iff V is DU after a when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.2-definite-unassignment-pass-4 { V is DU before b iff V is
        DU after a when true } {
    
    empty_main T1612dup4 {
        final boolean x;
        x = true;
        boolean y = false && (x = false);
    }

} {PASS}
Test Case: 16.1.2-definite-unassignment-pass-5
V is DU after a && b iff V is DU after a && b when true and when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.2-definite-unassignment-pass-5 { V is DU after a && b iff
        V is DU after a && b when true and when false } {
    
    empty_main T1612dup5 {
        final boolean x;
        boolean y = false;
        y = true && y;
        x = y;
    }

} {PASS}

16.1.3

Directory : tests/jls/definite-assignment/expressions/boolean-conditional-or


Test Case: 16.1.3-definite-assignment-fail-1
V is DA after a || b when false iff V is DA after b when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-assignment-fail-1 { V is DA after a || b when
        false iff V is DA after b when false } {
    
    empty_main T1613daf1 {
        boolean x, y = false;
        if (y || y);
        else y = x;
    }

} {FAIL}
Test Case: 16.1.3-definite-assignment-fail-2
V is DA after a || b when true iff V is DA after a when true and V is DA after b when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-assignment-fail-2 { V is DA after a || b when
        true iff V is DA after a when true and V is DA after b when true } {
    
    empty_main T1613daf2 {
        boolean x, y = false;
        if (y || false) // DA after b, but not after a
            y = x;
    }

} {FAIL}
Test Case: 16.1.3-definite-assignment-fail-3
V is DA after a || b when true iff V is DA after a when true and V is DA after b when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-assignment-fail-3 { V is DA after a || b when
        true iff V is DA after a when true and V is DA after b when true } {
    
    empty_main T1613daf3 {
        boolean x, y = false;
        if (false || y) // DA after a, but not after b
            y = x;
    }

} {FAIL}
Test Case: 16.1.3-definite-assignment-fail-4
V is DA before a iff V is DA before a || b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-assignment-fail-4 { V is DA before a iff V is
        DA before a || b } {
    
    empty_main T1613daf4 {
        boolean x;
        boolean y = x || false;
    }

} {FAIL}
Test Case: 16.1.3-definite-assignment-fail-5
V is DA before b iff V is DA after a when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-assignment-fail-5 { V is DA before b iff V is
        DA after a when false } {
    
    empty_main T1613daf5 {
        boolean x, y = false;
        y = y || x;
    }

} {FAIL}
Test Case: 16.1.3-definite-assignment-fail-6
V is DA after a || b iff V is DA after a || b when true and when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-assignment-fail-6 { V is DA after a || b iff
        V is DA after a || b when true and when false } {
    
    empty_main T1613daf6 {
        boolean x, y = false;
        y = y || (x = false) // DA after a || b when false, but not when true
        y = x;
    }

} {FAIL}
Test Case: 16.1.3-definite-assignment-fail-7
V is DA after a || b iff V is DA after a || b when true and when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-assignment-fail-7 { V is DA after a || b iff
        V is DA after a || b when true and when false } {
    
    empty_main T1613daf7 {
        boolean x, y = true;
        y = false || (false ? y : false) // DA after a || b when true,
                                         // but not when false
        y = x;
    }

} {FAIL}
Test Case: 16.1.3-definite-assignment-pass-1
V is DA after a || b when false iff V is DA after b when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.3-definite-assignment-pass-1 { V is DA after a || b when
        false iff V is DA after b when false } {
    
    empty_main T1613dap1 {
        boolean x, y = false;
        if (y || true);
        else y = x;
    }

} {PASS}
Test Case: 16.1.3-definite-assignment-pass-2
V is DA after a || b when false iff V is DA after b when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.3-definite-assignment-pass-2 { V is DA after a || b when
        false iff V is DA after b when false } {
    
    empty_main T1613dap2 {
        boolean x, y = false;
        if (true || y);
        else y = x;
    }

} {PASS}
Test Case: 16.1.3-definite-assignment-pass-3
V is DA after a || b when true iff V is DA after a when true and V is DA after b when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.3-definite-assignment-pass-3 { V is DA after a || b when
        true iff V is DA after a when true and V is DA after b when true } {
    
    empty_main T1613dap3 {
        boolean x, y = false;
        if (false || (false ? y : false))
            y = x;
    }

} {PASS}
Test Case: 16.1.3-definite-assignment-pass-4
V is DA before a iff V is DA before a || b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.3-definite-assignment-pass-4 { V is DA before a iff V is
        DA before a || b } {
    
    empty_main T1613dap4 {
        boolean x = true;
        boolean y = x || false;
    }

} {PASS}
Test Case: 16.1.3-definite-assignment-pass-5
V is DA before b iff V is DA after a when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.3-definite-assignment-pass-5 { V is DA before b iff V is
        DA after a when false } {
    
    empty_main T1613dap5 {
        boolean x;
        boolean y = true || x;
    }

} {PASS}
Test Case: 16.1.3-definite-assignment-pass-6
V is DA after a || b iff V is DA after a || b when true and when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.3-definite-assignment-pass-6 { V is DA after a || b iff
        V is DA after a || b when true and when false } {
    
    empty_main T1613dap6 {
        boolean x, y = false;
        y = (x = false) || y;
        y = x;
    }

} {PASS}
Test Case: 16.1.3-definite-unassignment-fail-1
V is DU after a || b when false iff V is DU after b when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-unassignment-fail-1 { V is DU after a || b when
        false iff V is DU after b when false } {
    
    empty_main T1613duf1 {
        final boolean x;
        boolean y = x = false;
        if (y || false);
        else x = y;
    }

} {FAIL}
Test Case: 16.1.3-definite-unassignment-fail-2
V is DU after a || b when true iff V is DU after a when true and V is DU after b when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-unassignment-fail-2 { V is DU after a || b when
        true iff V is DU after a when true and V is DU after b when true } {
    
    empty_main T1613duf2 {
        final boolean x;
        boolean y = false;
        if ((x = false) || false) // DU after b, but not after a
            x = y;
    }

} {FAIL}
Test Case: 16.1.3-definite-unassignment-fail-3
V is DU after a || b when true iff V is DU after a when true and V is DU after b when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-unassignment-fail-3 { V is DU after a || b when
        true iff V is DU after a when true and V is DU after b when true } {
    
    empty_main T1613duf3 {
        final boolean x, y;
        if (false || (x = true)) // DU after a, but not after b
            x = y;
    }

} {FAIL}
Test Case: 16.1.3-definite-unassignment-fail-4
V is DU before a iff V is DU before a || b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-unassignment-fail-4 { V is DU before a iff V is
        DU before a || b } {
    
    empty_main T1613duf4 {
        final boolean x;
        x = false;
        boolean y = (x = false) || false;
    }

} {FAIL}
Test Case: 16.1.3-definite-unassignment-fail-5
V is DU before b iff V is DU after a when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-unassignment-fail-5 { V is DU before b iff V is
        DU after a when false } {
    
    empty_main T1613duf5 {
        final boolean x;
        boolean y = (x = true) || (x = false);
    }

} {FAIL}
Test Case: 16.1.3-definite-unassignment-fail-6
V is DU after a || b iff V is DU after a || b when true and when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-unassignment-fail-6 { V is DU after a || b iff
        V is DU after a || b when true and when false } {
    
    empty_main T1613duf6 {
        final boolean x;
        boolean y = true || ((x = false) && false);
        // DU after a || b when true, but not when false
        x = y;
    }

} {FAIL}
Test Case: 16.1.3-definite-unassignment-fail-7
V is DU after a || b iff V is DU after a || b when true and when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.3-definite-unassignment-fail-7 { V is DU after a || b iff
        V is DU after a || b when true and when false } {
    
    empty_main T1613duf7 {
        final boolean x;
        boolean y = (x = false) || true;
        // DU after a || b when false, but not when true
        x = y;
    }

} {FAIL}
Test Case: 16.1.3-definite-unassignment-pass-1
V is DU after a || b when false iff V is DU after b when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.3-definite-unassignment-pass-1 { V is DU after a || b when
        false iff V is DU after b when false } {
    
    empty_main T1613dup1 {
        final boolean x;
        if ((x = false) || true);
        else x = false;
    }

} {PASS}
Test Case: 16.1.3-definite-unassignment-pass-2
V is DU after a || b when true iff V is DU after a when true and V is DU after b when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.3-definite-unassignment-pass-2 { V is DU after a || b when
        true iff V is DU after a when true and V is DU after b when true } {
    
    empty_main T1613dup2 {
        final boolean x;
        if (false || ((x = true) && false))
            x = true;
    }

} {PASS}
Test Case: 16.1.3-definite-unassignment-pass-3
V is DU before a iff V is DU before a || b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.3-definite-unassignment-pass-3 { V is DU before a iff V is
        DU before a || b } {
    
    empty_main T1613dup3 {
        final boolean x;
        boolean y = (x = false) || false;
    }

} {PASS}
Test Case: 16.1.3-definite-unassignment-pass-4
V is DU before b iff V is DU after a when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.3-definite-unassignment-pass-4 { V is DU before b iff V is
        DU after a when false } {
    
    empty_main T1613dup4 {
        final boolean x;
        x = false;
        boolean y = true || (x = true);
    }

} {PASS}
Test Case: 16.1.3-definite-unassignment-pass-5
V is DU after a || b iff V is DU after a || b when true and when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.3-definite-unassignment-pass-5 { V is DU after a || b iff
        V is DU after a || b when true and when false } {
    
    empty_main T1613dup5 {
        final boolean x;
        boolean y = true;
        y = false || y;
        x = y;
    }

} {PASS}

16.1.5

Directory : tests/jls/definite-assignment/expressions/boolean-conditional-operator


Test Case: 16.1.5-definite-assignment-fail-1
V is DA before a iff V is DA before boolean a?b:c

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-1 { V is DA before
        a iff V is DA before boolean a?b:c } {
    
    empty_main T1615daf1 {
	boolean x;
	if (x ? true : false);
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-2
V is DA before b iff V is DA after a when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-2 { V is DA before
        b iff V is DA after a when true } {
    
    empty_main T1615daf2 {
	boolean a = true, x;
	if (a ? x : false);
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-3
V is DA before b iff V is DA after a when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-3 { V is DA before
        b iff V is DA after a when true } {
    
    empty_main T1615daf3 {
	boolean x;
	if (true ? x : false);
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-4
V is DA before c iff V is DA after a when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-4 { V is DA before
        c iff V is DA after a when false } {
    
    empty_main T1615daf4 {
	boolean a = true, x;
	if (a ? true : x);
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-5
V is DA before c iff V is DA after a when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-5 { V is DA before
        c iff V is DA after a when false } {
    
    empty_main T1615daf5 {
	boolean x;
	if (false ? true : x);
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-6
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-6 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615daf6 {
	boolean a = true, x;
	if (a ? true : true)
	    a = x;
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-7
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-7 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615daf7 {
	boolean a = true, x;
	if (a ? x = true : true)
	    a = x;
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-8
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-8 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615daf8 {
	boolean a = false, x;
	if (a ? true : (x = true))
	    a = x;
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-9
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-9 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615daf9 {
	boolean a = true, x;
	if (a ? false : false);
	else a = x;
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-10
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-10 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615daf10 {
	boolean a = true, x;
	if (a ? x = false : false);
	else a = x;
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-11
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-11 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615daf11 {
	boolean a = false, x;
	if (a ? false : (x = false));
	else a = x;
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-12
V is DA after boolean a?b:c iff V is DA after boolean a?b:c when true and V is DA after boolean a?b:c when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-12 { V is DA after
        boolean a?b:c iff V is DA after boolean a?b:c when true
        and V is DA after boolean a?b:c when false } {
    
    empty_main T1615daf12 {
	boolean a = true, x;
	if (a ? true : true);
	a = x;
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-13
V is DA after boolean a?b:c iff V is DA after boolean a?b:c when true and V is DA after boolean a?b:c when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-13 { V is DA after
        boolean a?b:c iff V is DA after boolean a?b:c when true
        and V is DA after boolean a?b:c when false } {
    
    empty_main T1615daf13 {
	boolean a = true, x;
	if (a ? x = true : true);
	a = x;
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-fail-14
V is DA after boolean a?b:c iff V is DA after boolean a?b:c when true and V is DA after boolean a?b:c when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-assignment-fail-14 { V is DA after
        boolean a?b:c iff V is DA after boolean a?b:c when true
        and V is DA after boolean a?b:c when false } {
    
    empty_main T1615daf14 {
	boolean a = false, x;
	if (a ? true : (x = true));
	a = x;
    }

} {FAIL}
Test Case: 16.1.5-definite-assignment-pass-1
V is DA before a iff V is DA before boolean a?b:c

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-1 { V is DA before
        a iff V is DA before boolean a?b:c } {
    
    empty_main T1615dap1 {
	boolean x = true;
	if (x ? true : false);
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-2
V is DA before b iff V is DA after a when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-2 { V is DA before
        b iff V is DA after a when true } {
    
    empty_main T1615dap2 {
	boolean a = true, x = true;
	if (a ? x : false);
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-3
V is DA before b iff V is DA after a when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-3 { V is DA before
        b iff V is DA after a when true } {
    
    empty_main T1615dap3 {
	boolean x = true;
	if (true ? x : false);
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-4
V is DA before b iff V is DA after a when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-4 { V is DA before
        b iff V is DA after a when true } {
    
    empty_main T1615dap4 {
	boolean x;
	if (false ? x : false);
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-5
V is DA before b iff V is DA after a when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-5 { V is DA before
        b iff V is DA after a when true } {
    
    empty_main T1615dap5 {
	boolean x;
	if ((x = true) ? x : false);
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-6
V is DA before c iff V is DA after a when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-6 { V is DA before
        c iff V is DA after a when false } {
    
    empty_main T1615dap6 {
	boolean a = true, x = true;
	if (a ? true : x);
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-7
V is DA before c iff V is DA after a when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-7 { V is DA before
        c iff V is DA after a when false } {
    
    empty_main T1615dap7 {
	boolean x = true;
	if (false ? true : x);
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-8
V is DA before c iff V is DA after a when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-8 { V is DA before
        c iff V is DA after a when false } {
    
    empty_main T1615dap8 {
	boolean x;
	if (true ? true : x);
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-9
V is DA before c iff V is DA after a when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-9 { V is DA before
        c iff V is DA after a when false } {
    
    empty_main T1615dap9 {
	boolean x;
	if ((x = false) ? true : x);
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-10
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-10 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615dap10 {
	boolean a = true, x = true;
	if (a ? true : true)
	    a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-11
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-11 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615dap11 {
	boolean a = true, x;
	if (a ? false : (x = true))
	    a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-12
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-12 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615dap12 {
	boolean a, x;
	if (true ? false : (x = true))
	    a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-13
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-13 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615dap13 {
	boolean a = false, x;
	if (a ? x = true : false)
	    a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-14
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-14 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615dap14 {
	boolean a, x;
	if (false ? x = true : false)
	    a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-15
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-15 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615dap15 {
	boolean a = true, x;
	if (a ? x = true : (x = true))
	    a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-16
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-16 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615dap16 {
	boolean a, x;
	if (true ? x = true : (x = true))
	    a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-17
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-17 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615dap17 {
	boolean a = true, x;
	if (false ? x = true : (x = true))
	    a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-18
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-18 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615dap18 {
	boolean a, x;
	if (true ? x = true : true)
	    a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-19
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-19 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615dap19 {
	boolean a, x;
	if (false ? true : (x = true))
	    a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-20
V is DA after boolean a?b:c when true iff V is DA after b when true and V is DA after c when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-20 { V is DA after
        boolean a?b:c when true iff V is DA after b when true
        and V is DA after c when true } {
    
    empty_main T1615dap20 {
	boolean a, x;
	if ((x = true) ? true : true)
	    a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-21
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-21 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615dap21 {
	boolean a = true, x = true;
	if (a ? false : false);
	else a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-22
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-22 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615dap22 {
	boolean a = true, x;
	if (a ? true : (x = false));
	else a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-23
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-23 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615dap23 {
	boolean a, x;
	if (true ? true : (x = false));
	else a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-24
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-24 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615dap24 {
	boolean a = false, x;
	if (a ? x = false : true);
	else a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-25
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-25 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615dap25 {
	boolean a, x;
	if (false ? x = false : true);
	else a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-26
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-26 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615dap26 {
	boolean a = true, x;
	if (a ? x = false : (x = false));
	else a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-27
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-27 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615dap27 {
	boolean a, x;
	if (true ? x = false : (x = false));
	else a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-28
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-28 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615dap28 {
	boolean a = true, x;
	if (false ? x = false : (x = false));
	else a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-29
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-29 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615dap29 {
	boolean a, x;
	if (true ? x = false : false);
	else a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-30
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-30 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615dap30 {
	boolean a, x;
	if (false ? false : (x = false));
	else a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-31
V is DA after boolean a?b:c when false iff V is DA after b when false and V is DA after c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-31 { V is DA after
        boolean a?b:c when false iff V is DA after b when false
        and V is DA after c when false } {
    
    empty_main T1615dap31 {
	boolean a, x;
	if ((x = false) ? false : false);
	else a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-32
V is DA after boolean a?b:c iff V is DA after boolean a?b:c when true and V is DA after boolean a?b:c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-32 { V is DA after
        boolean a?b:c iff V is DA after boolean a?b:c when true
        and V is DA after boolean a?b:c when false } {
    
    empty_main T1615dap32 {
	boolean a = true, x = true;
	if (a ? true : true);
	a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-33
V is DA after boolean a?b:c iff V is DA after boolean a?b:c when true and V is DA after boolean a?b:c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-33 { V is DA after
        boolean a?b:c iff V is DA after boolean a?b:c when true
        and V is DA after boolean a?b:c when false } {
    
    empty_main T1615dap33 {
	boolean a, x;
	if ((x = true) ? true : true);
	a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-34
V is DA after boolean a?b:c iff V is DA after boolean a?b:c when true and V is DA after boolean a?b:c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-34 { V is DA after
        boolean a?b:c iff V is DA after boolean a?b:c when true
        and V is DA after boolean a?b:c when false } {
    
    empty_main T1615dap34 {
	boolean a = true, x;
	if (a ? x = true : (x = true));
	a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-35
V is DA after boolean a?b:c iff V is DA after boolean a?b:c when true and V is DA after boolean a?b:c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-35 { V is DA after
        boolean a?b:c iff V is DA after boolean a?b:c when true
        and V is DA after boolean a?b:c when false } {
    
    empty_main T1615dap35 {
	boolean a, x;
	if (true ? x = true : false);
	a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-assignment-pass-36
V is DA after boolean a?b:c iff V is DA after boolean a?b:c when true and V is DA after boolean a?b:c when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-assignment-pass-36 { V is DA after
        boolean a?b:c iff V is DA after boolean a?b:c when true
        and V is DA after boolean a?b:c when false } {
    
    empty_main T1615dap36 {
	boolean a, x;
	if (false ? true : (x = true));
	a = x;
    }

} {PASS}
Test Case: 16.1.5-definite-unassignment-fail-1
V is DU before a iff V is DU before boolean a?b:c

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-unassignment-fail-1 { V is DU before
        a iff V is DU before boolean a?b:c } {
    
    empty_main T1615duf1 {
	final boolean x;
	x = true;
	if ((x = true) ? true : false);
    }

} {FAIL}
Test Case: 16.1.5-definite-unassignment-fail-2
V is DU before b iff V is DU after a when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-unassignment-fail-2 { V is DU before
        b iff V is DU after a when true } {
    
    empty_main T1615duf2 {
	final boolean x;
	boolean a = x = true;
	if (a ? x = true : false);
    }

} {FAIL}
Test Case: 16.1.5-definite-unassignment-fail-3
V is DU before b iff V is DU after a when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-unassignment-fail-3 { V is DU before
        b iff V is DU after a when true } {
    
    empty_main T1615duf3 {
	final boolean x;
	x = true;
	if (true ? x = true : false);
    }

} {FAIL}
Test Case: 16.1.5-definite-unassignment-fail-4
V is DU before b iff V is DU after a when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-unassignment-fail-4 { V is DU before
        b iff V is DU after a when true } {
    
    empty_main T1615duf4 {
	final boolean x;
	if ((x = false) ? x = true : false);
    }

} {FAIL}
Test Case: 16.1.5-definite-unassignment-fail-5
V is DU before c iff V is DU after a when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-unassignment-fail-5 { V is DU before
        c iff V is DU after a when false } {
    
    empty_main T1615duf5 {
	final boolean x;
	boolean a = x = true;
	if (a ? true : (x = true));
    }

} {FAIL}
Test Case: 16.1.5-definite-unassignment-fail-6
V is DU before c iff V is DU after a when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-unassignment-fail-6 { V is DU before
        c iff V is DU after a when false } {
    
    empty_main T1615duf6 {
	final boolean x;
	x = true;
	if (false ? true : (x = true));
    }

} {FAIL}
Test Case: 16.1.5-definite-unassignment-fail-7
V is DU before c iff V is DU after a when false

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-definite-unassignment-fail-7 { V is DU before
        c iff V is DU after a when false } {
    
    empty_main T1615duf7 {
	final boolean x;
	if ((x = true) ? true : (x = true));
    }

} {FAIL}
Test Case: 16.1.5-definite-unassignment-pass-1
V is DU before a iff V is DU before boolean a?b:c

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-unassignment-pass-1 { V is DU before
        a iff V is DU before boolean a?b:c } {
    
    empty_main T1615dup1 {
	final boolean x;
	if ((x = true) ? true : false);
    }

} {PASS}
Test Case: 16.1.5-definite-unassignment-pass-2
V is DU before b iff V is DU after a when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-unassignment-pass-2 { V is DU before
        b iff V is DU after a when true } {
    
    empty_main T1615dup2 {
	final boolean x;
	boolean a = true;
	if (a ? x = true : false);
    }

} {PASS}
Test Case: 16.1.5-definite-unassignment-pass-3
V is DU before b iff V is DU after a when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-unassignment-pass-3 { V is DU before
        b iff V is DU after a when true } {
    
    empty_main T1615dup3 {
	final boolean x;
	if (true ? x = true : false);
    }

} {PASS}
Test Case: 16.1.5-definite-unassignment-pass-4
V is DU before b iff V is DU after a when true

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-unassignment-pass-4 { V is DU before
        b iff V is DU after a when true } {
    
    empty_main T1615dup4 {
	final boolean x;
	x = true;
	if (false ? x = true : false);
    }

} {PASS}
Test Case: 16.1.5-definite-unassignment-pass-5
V is DU before c iff V is DU after a when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-unassignment-pass-5 { V is DU before
        c iff V is DU after a when false } {
    
    empty_main T1615dup5 {
	final boolean x;
	boolean a = true;
	if (a ? true : (x = true));
    }

} {PASS}
Test Case: 16.1.5-definite-unassignment-pass-6
V is DU before c iff V is DU after a when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-unassignment-pass-6 { V is DU before
        c iff V is DU after a when false } {
    
    empty_main T1615dup6 {
	final boolean x;
	if (false ? true : (x = true));
    }

} {PASS}
Test Case: 16.1.5-definite-unassignment-pass-7
V is DU before c iff V is DU after a when false

Expected Result: PASS

Regression Test:

tcltest::test 16.1.5-definite-unassignment-pass-7 { V is DU before
        c iff V is DU after a when false } {
    
    empty_main T1615dup7 {
	final boolean x;
	x = true;
	if (true ? true : (x = true));
    }

} {PASS}
Test Case: 16.1.5-not-assignable-1
DU only applies to blank finals; initialized fields cannot be assigned

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-not-assignable-1 { DU only applies to blank
        finals; initialized fields cannot be assigned } {
    
    empty_main T1615na1 {
	final boolean x = true; // constant
	if (true ? true : (x = true));
    }

} {FAIL}
Test Case: 16.1.5-not-assignable-2
DU only applies to blank finals; initialized fields cannot be assigned

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-not-assignable-2 { DU only applies to blank
        finals; initialized fields cannot be assigned } {
    
    empty_main T1615na2 {
	final boolean x = true; // constant
	if (false ? x = true : false);
    }

} {FAIL}
Test Case: 16.1.5-not-assignable-3
DU only applies to blank finals; initialized fields cannot be assigned

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-not-assignable-3 { DU only applies to blank
        finals; initialized fields cannot be assigned } {
    
    empty_main T1615na3 {
	final boolean x = Boolean.TRUE.booleanValue(); // non-constant
	if (true ? true : (x = true));
    }

} {FAIL}
Test Case: 16.1.5-not-assignable-4
DU only applies to blank finals; initialized fields cannot be assigned

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-not-assignable-4 { DU only applies to blank
        finals; initialized fields cannot be assigned } {
    
    empty_main T1615na4 {
	final boolean x = Boolean.TRUE.booleanValue(); // non-constant
	if (false ? x = true : false);
    }

} {FAIL}
Test Case: 16.1.5-not-assignable-5
DU only applies to blank finals; initialized fields cannot be assigned

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-not-assignable-5 { DU only applies to blank
        finals; initialized fields cannot be assigned } {
    
    empty_class T1615na5 {
	void foo(final boolean x) {
	    if (true ? true : (x = true));
	}
    }

} {FAIL}
Test Case: 16.1.5-not-assignable-6
DU only applies to blank finals; initialized fields cannot be assigned

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-not-assignable-6 { DU only applies to blank
        finals; initialized fields cannot be assigned } {
    
    empty_class T1615na6 {
	void foo(final boolean x) {
	    if (false ? x = true : false);
	}
    }

} {FAIL}
Test Case: 16.1.5-not-assignable-7
DU only applies to blank finals; initialized fields cannot be assigned

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-not-assignable-7 { DU only applies to blank
        finals; initialized fields cannot be assigned } {
    
    empty_main T1615na7 {
	try {
	    throw new Exception();
	} catch (final Exception x) {
	    if (true ? true : ((x = null) == null));
	}
    }

} {FAIL}
Test Case: 16.1.5-not-assignable-8
DU only applies to blank finals; initialized fields cannot be assigned

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-not-assignable-8 { DU only applies to blank
        finals; initialized fields cannot be assigned } {
    
    empty_main T1615na8 {
	try {
	    throw new Exception();
	} catch (final Exception x) {
	    if (false ? (x = null) == null : false);
	}
    }

} {FAIL}
Test Case: 16.1.5-not-assignable-9
Blank final fields cannot be assigned outside constructor/initializer.

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-not-assignable-9 { Blank final fields cannot be
        assigned outside constructor/initializer. } {
    
    empty_class T1615na9 {
	static final boolean x;
	static { x = true; }
	void foo() {
	    if (true ? true : (x = true));
	}
    }

} {FAIL}
Test Case: 16.1.5-not-assignable-10
Blank final fields cannot be assigned outside constructor/initializer.

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-not-assignable-10 { Blank final fields cannot be
        assigned outside constructor/initializer. } {
    
    empty_class T1615na10 {
	static final boolean x;
	static { x = true; }
	void foo() {
	    if (false ? x = true : true);
	}
    }

} {FAIL}
Test Case: 16.1.5-not-assignable-11
Blank final fields cannot be assigned outside constructor/initializer.

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-not-assignable-11 { Blank final fields cannot be
        assigned outside constructor/initializer. } {
    
    empty_class T1615na11 {
	final boolean x;
	{ x = true; }
	void foo() {
	    if (true ? true : (x = true));
	}
    }

} {FAIL}
Test Case: 16.1.5-not-assignable-12
Blank final fields cannot be assigned outside constructor/initializer.

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.5-not-assignable-12 { Blank final fields cannot be
        assigned outside constructor/initializer. } {
    
    empty_class T1615na12 {
	final boolean x;
	{ x = true; }
	void foo() {
	    if (false ? x = true : true);
	}
    }

} {FAIL}

16.1.7

Directory : tests/jls/definite-assignment/expressions/assignment-expressions


Test Case: 16.1.7-compound-assign-1
final variables cannot be assigned with compound assignment

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-assign-1 { final variables cannot be assigned
        with compound assignment } {
    
    empty_main T1617ca1 {
	final int i;
	i += 1;
    }

} {FAIL}
Test Case: 16.1.7-compound-assign-2
final variables cannot be assigned with compound assignment

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-assign-2 { final variables cannot be assigned
        with compound assignment } {
    
    empty_main T1617ca2 {
	final int i;
	i += 1L;
    }

} {FAIL}
Test Case: 16.1.7-compound-assign-3
final variables cannot be assigned with compound assignment

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-assign-3 { final variables cannot be assigned
        with compound assignment } {
    
    empty_main T1617ca3 {
	final String s = "";
	s += "";
    }

} {FAIL}
Test Case: 16.1.7-compound-assign-4
final variables cannot be assigned with compound assignment

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-assign-4 { final variables cannot be assigned
        with compound assignment } {
    
    empty_main T1617ca4 {
	final String s = "";
	s += 1;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-assignment-fail-1
V is DA after a=b iff either a is V or V is DA after b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-fail-1 { V is DA after
        a=b iff either a is V or V is DA after b } {
    
    empty_main T1617sdaf1 {
	int i, x;
	i = 1;
	x++;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-assignment-fail-2
V is DA after a=b iff either a is V or V is DA after b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-fail-2 { V is DA after
        a=b iff either a is V or V is DA after b } {
    
    empty_main T1617sdaf2 {
	int i, x;
	boolean b = true;
	i = (b ? x = 1 : 1);
	x++;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-assignment-fail-3
V is DA before the subexpressions of a iff V is DA before a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-fail-3 { V is DA before
        the subexpressions of a iff V is DA before a=b } {
    
    empty_main T1617sdaf3 {
	int ia[] = {0}, i, x;
	ia[i = x]++;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-assignment-fail-4
V is DA before the subexpressions of a iff V is DA before a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-fail-4 { V is DA before
        the subexpressions of a iff V is DA before a=b } {
    
    empty_class T1617sdaf4 {
        T1617sdaf4 t;
        void foo() {
            T1617sdaf4 x;
	    x.t = new T1617sdaf4();
	}
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-assignment-fail-5
V is DA before b iff V is DA after the subexpressions of a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-fail-5 { V is DA before
        b iff V is DA after the subexpressions of a in a=b } {
    
    empty_main T1617sdaf5 {
	int i, x;
	i = x;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-assignment-fail-6
V is DA before b iff V is DA after the subexpressions of a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-fail-6 { V is DA before
        b iff V is DA after the subexpressions of a in a=b } {
    
    empty_main T1617sdaf6 {
	int ia[] = {0}, x;
	boolean b = true;
	ia[b ? x = 0 : 0] = x;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-assignment-fail-7
V is DA before b iff V is DA after the subexpressions of a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-fail-7 { V is DA before
        b iff V is DA after the subexpressions of a in a=b } {
    
    empty_class T1617sdaf7 {
        T1617sdaf7 t;
	void foo() {
            T1617sdaf7 x;
	    boolean b = true;
	    (b ? x = new T1617sdaf7() : null).t = x;
	}
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-assignment-fail-8
V is DA after boolean a=b when true iff V is DA after a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-fail-8 { V is DA after
        boolean a=b when true iff V is DA after a=b } {
    
    empty_main T1617sdaf8 {
	boolean b;
	int x;
	if (b = false)
	    x++;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-assignment-fail-9
V is DA after boolean a=b when false iff V is DA after a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-fail-9 { V is DA after
        boolean a=b when false iff V is DA after a=b } {
    
    empty_main T1617sdaf9 {
	boolean b;
	int x;
	if (b = true);
	else x++;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-assignment-fail-1
V is DA after a=b iff either a is V or V is DA after b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-fail-1 { V is DA after
        a=b iff either a is V or V is DA after b } {
    
    empty_main T1617cdaf1 {
	int i = 0, x;
	i += 1;
	x++;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-assignment-fail-2
V is DA after a=b iff either a is V or V is DA after b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-fail-2 { V is DA after
        a=b iff either a is V or V is DA after b } {
    
    empty_main T1617cdaf2 {
	int i = 0, x;
	boolean b = true;
	i += (b ? x = 1 : 1);
	x++;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-assignment-fail-3
V is DA before the subexpressions of a iff V is DA before a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-fail-3 { V is DA before
        the subexpressions of a iff V is DA before a=b } {
    
    empty_main T1617cdaf3 {
	int ia[] = {0}, i = 0, x;
	ia[i += x]++;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-assignment-fail-4
V is DA before the subexpressions of a iff V is DA before a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-fail-4 { V is DA before
        the subexpressions of a iff V is DA before a=b } {
    
    empty_class T1617cdaf4 {
	String s;
	void foo() {
            T1617cdaf4 x;
	    x.s += x = new T1617cdaf4();
	}
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-assignment-fail-5
V is DA before b iff V is DA after the subexpressions of a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-fail-5 { V is DA before
        b iff V is DA after the subexpressions of a in a=b } {
    
    empty_main T1617cdaf5 {
	int i = 0, x;
	i += x;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-assignment-fail-6
V is DA before b iff V is DA after the subexpressions of a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-fail-6 { V is DA before
        b iff V is DA after the subexpressions of a in a=b } {
    
    empty_main T1617cdaf6 {
	int ia[] = {0}, x;
	boolean b = true;
	ia[b ? x = 0 : 0] += x;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-assignment-fail-7
V is DA before b iff V is DA after the subexpressions of a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-fail-7 { V is DA before
        b iff V is DA after the subexpressions of a in a=b } {
    
    empty_class T1617cdaf7 {
	String s;
	void foo() {
            T1617cdaf7 x;
	    boolean b = true;
	    (b ? x = new T1617cdaf7() : null).s += x;
	}
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-assignment-fail-8
V is DA after boolean a=b when true iff V is DA after a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-fail-8 { V is DA after
        boolean a=b when true iff V is DA after a=b } {
    
    empty_main T1617cdaf8 {
	boolean b = false;
	int x;
	if (b &= false)
	    x++;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-assignment-fail-9
V is DA after boolean a=b when false iff V is DA after a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-fail-9 { V is DA after
        boolean a=b when false iff V is DA after a=b } {
    
    empty_main T1617cdaf9 {
	boolean b = true;
	int x;
	if (b |= true);
	else x++;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-assignment-fail-10
V must be DA before a if V is a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-fail-10 { V must be DA
        before a if V is a in a=b } {
    
    empty_main T1617cdaf10 {
	int x;
	x += 0;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-assignment-fail-11
V must be DA before a if V is a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-fail-11 { V must be DA
        before a if V is a in a=b } {
    
    empty_main T1617cdaf11 {
	int x;
	x += x = 0;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-assignment-pass-1
V is DA after a=b iff either a is V or V is DA after b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-pass-1 { V is DA after
        a=b iff either a is V or V is DA after b } {
    
    empty_main T1617sdap1 {
	int x;
	x = 1;
	x++;
    }

} {PASS}
Test Case: 16.1.7-simple-definite-assignment-pass-2
V is DA after a=b iff either a is V or V is DA after b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-pass-2 { V is DA after
        a=b iff either a is V or V is DA after b } {
    
    empty_main T1617sdap2 {
	int i, x;
	i = x = 1;
	x++;
    }

} {PASS}
Test Case: 16.1.7-simple-definite-assignment-pass-3
V is DA before the subexpressions of a iff V is DA before a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-pass-3 { V is DA before
        the subexpressions of a iff V is DA before a=b } {
    
    empty_main T1617sdap3 {
	int ia[] = {0}, i, x = 0;
	ia[i = x]++;
    }

} {PASS}
Test Case: 16.1.7-simple-definite-assignment-pass-4
V is DA before the subexpressions of a iff V is DA before a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-pass-4 { V is DA before
        the subexpressions of a iff V is DA before a=b } {
    
    empty_class T1617sdap4 {
	T1617sdap4 t;
        void foo() {
            T1617sdap4 x = null;
	    x.t = x;
	}
    }

} {PASS}
Test Case: 16.1.7-simple-definite-assignment-pass-5
V is DA before b iff V is DA after the subexpressions of a in a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-pass-5 { V is DA before
        b iff V is DA after the subexpressions of a in a=b } {
    
    empty_main T1617sdap5 {
	int i, x = 0;
	i = x;
    }

} {PASS}
Test Case: 16.1.7-simple-definite-assignment-pass-6
V is DA before b iff V is DA after the subexpressions of a in a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-pass-6 { V is DA before
        b iff V is DA after the subexpressions of a in a=b } {
    
    empty_main T1617sdap6 {
	int ia[] = {0}, x;
	ia[true ? x = 0 : 0] = x;
    }

} {PASS}
Test Case: 16.1.7-simple-definite-assignment-pass-7
V is DA before b iff V is DA after the subexpressions of a in a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-pass-7 { V is DA before
        b iff V is DA after the subexpressions of a in a=b } {
    
    empty_class T1617sdap7 {
        T1617sdap7 t;
        void foo() {
            T1617sdap7 x;
	    (true ? x = new T1617sdap7() : null).t = x;
	}
    }

} {PASS}
Test Case: 16.1.7-simple-definite-assignment-pass-8
V is DA after boolean a=b when true iff V is DA after a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-pass-8 { V is DA after
        boolean a=b when true iff V is DA after a=b } {
    
    empty_main T1617sdap8 {
	boolean b;
	int x;
	if ((b = false) && false)
	    x++;
    }

} {PASS}
Test Case: 16.1.7-simple-definite-assignment-pass-9
V is DA after boolean a=b when false iff V is DA after a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-assignment-pass-9 { V is DA after
        boolean a=b when false iff V is DA after a=b } {
    
    empty_main T1617sdap9 {
	boolean b;
	int x;
	if ((b = true) || true);
	else x++;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-assignment-pass-1
V is DA after a=b iff either a is V or V is DA after b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-pass-1 { V is DA after
        a=b iff either a is V or V is DA after b } {
    
    empty_main T1617cdap1 {
	int x = 0;
	x += 1;
	x++;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-assignment-pass-2
V is DA after a=b iff either a is V or V is DA after b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-pass-2 { V is DA after
        a=b iff either a is V or V is DA after b } {
    
    empty_main T1617cdap2 {
	int i = 0, x;
	i += x = 1;
	x++;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-assignment-pass-3
V is DA before the subexpressions of a iff V is DA before a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-pass-3 { V is DA before
        the subexpressions of a iff V is DA before a=b } {
    
    empty_main T1617cdap3 {
	int ia[] = {0}, i = 0, x = 0;
	ia[i += x]++;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-assignment-pass-4
V is DA before the subexpressions of a iff V is DA before a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-pass-4 { V is DA before
        the subexpressions of a iff V is DA before a=b } {
    
    empty_class T1617cdap4 {
	String s;
	void foo() {
            T1617cdap4 x = null;
	    x.s += x;
	}
    }

} {PASS}
Test Case: 16.1.7-compound-definite-assignment-pass-5
V is DA before b iff V is DA after the subexpressions of a in a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-pass-5 { V is DA before
        b iff V is DA after the subexpressions of a in a=b } {
    
    empty_main T1617cdap5 {
	int i = 0, x = 0;
	i += x;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-assignment-pass-6
V is DA before b iff V is DA after the subexpressions of a in a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-pass-6 { V is DA before
        b iff V is DA after the subexpressions of a in a=b } {
    
    empty_main T1617cdap6 {
	int ia[] = {0}, x;
	ia[true ? x = 0 : 0] += x;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-assignment-pass-7
V is DA before b iff V is DA after the subexpressions of a in a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-pass-7 { V is DA before
        b iff V is DA after the subexpressions of a in a=b } {
    
    empty_class T1617cdap7 {
	String s;
	void foo() {
            T1617cdap7 x;
	    (true ? x = new T1617cdap7() : null).s += x;
	}
    }

} {PASS}
Test Case: 16.1.7-compound-definite-assignment-pass-8
V is DA after boolean a=b when true iff V is DA after a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-pass-8 { V is DA after
        boolean a=b when true iff V is DA after a=b } {
    
    empty_main T1617cdap8 {
	boolean b = false;
	int x;
	if ((b &= false) && false)
	    x++;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-assignment-pass-9
V is DA after boolean a=b when false iff V is DA after a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-pass-9 { V is DA after
        boolean a=b when false iff V is DA after a=b } {
    
    empty_main T1617cdap9 {
	boolean b = true;
	int x;
	if ((b |= true) || true);
	else x++;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-assignment-pass-10
V must be DA before a if V is a in a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-assignment-pass-10 { V must be DA
        before a if V is a in a=b } {
    
    empty_main T1617cdap10 {
	int x = 0;
	x += 0;
    }

} {PASS}
Test Case: 16.1.7-simple-definite-unassignment-fail-1
V is DU after a=b iff both a is not V and V is DU after b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-fail-1 { V is DU after
        a=b iff both a is not V and V is DU after b } {
    
    empty_main T1617sduf1 {
	if (false) {
	    final int x;
	    x = 1;
	    x = 1;
	}
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-unassignment-fail-2
V is DU after a=b iff both a is not V and V is DU after b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-fail-2 { V is DU after
        a=b iff both a is not V and V is DU after b } {
    
    empty_main T1617sduf2 {
	final int x;
	int i;
	i = x = 1;
	x = 1;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-unassignment-fail-3
V is DU before the subexpressions of a iff V is DU before a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-fail-3 { V is DU before
        the subexpressions of a iff V is DU before a=b } {
    
    empty_main T1617sduf3 {
	final int x;
	int ia[] = {0}, i = x = 0;
	ia[x = i]++;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-unassignment-fail-4
V is DU before the subexpressions of a iff V is DU before a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-fail-4 { V is DU before
        the subexpressions of a iff V is DU before a=b } {
    
    empty_class T1617sduf4 {
	final T1617sduf4 x;
	int i;
	{
	    x = null;
	    (x = new T1617sduf4()).i++;
	}
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-unassignment-fail-5
V is DU before b iff V is DU after the subexpressions of a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-fail-5 { V is DU before
        b iff V is DU after the subexpressions of a in a=b } {
    
    empty_main T1617sduf5 {
	final int x;
	int i = x = 0;
	i = x = 1;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-unassignment-fail-6
V is DU before b iff V is DU after the subexpressions of a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-fail-6 { V is DU before
        b iff V is DU after the subexpressions of a in a=b } {
    
    empty_main T1617sduf6 {
	final int x;
	int ia[] = {0};
	boolean b = false;
	ia[b ? x = 0 : 0] = x = 0;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-unassignment-fail-7
V is DU before b iff V is DU after the subexpressions of a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-fail-7 { V is DU before
        b iff V is DU after the subexpressions of a in a=b } {
    
    empty_class T1617sduf7 {
	final T1617sduf7 x;
        T1617sduf7 t;
	{
	    boolean b = false;
	    (b ? x = new T1617sduf7() : null).t = x = null;
	}
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-unassignment-fail-8
V is DU after boolean a=b when true iff V is DU after a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-fail-8 { V is DU after
        boolean a=b when true iff V is DU after a=b } {
    
    empty_main T1617sduf8 {
	boolean b;
	final int x;
	if (b = false)
	    x++;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-unassignment-fail-9
V is DU after boolean a=b when false iff V is DU after a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-fail-9 { V is DU after
        boolean a=b when false iff V is DU after a=b } {
    
    empty_main T1617sduf9 {
	boolean b;
	final int x;
	if (b = true);
	else x++;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-unassignment-fail-10
V must be DU after b if V is a blank final and V is a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-fail-10 { V must be DU
        after b if V is a blank final and V is a in a=b } {
    
    empty_main T1617sduf10 {
	final int x;
	x = x = 10;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-unassignment-fail-1
V is DU after a=b iff both a is not V and V is DU after b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-fail-1 { V is DU after
        a=b iff both a is not V and V is DU after b } {
    
    empty_main T1617cduf1 {
	final int x;
	if (false) {
	    x += 1;
	    x = 1;
	}
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-unassignment-fail-2
V is DU after a=b iff both a is not V and V is DU after b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-fail-2 { V is DU after
        a=b iff both a is not V and V is DU after b } {
    
    empty_main T1617cduf2 {
	final int x;
	int i;
	i += x = 1;
	x = 1;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-unassignment-fail-3
V is DU before the subexpressions of a iff V is DU before a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-fail-3 { V is DU before
        the subexpressions of a iff V is DU before a=b } {
    
    empty_main T1617cduf3 {
	final int x;
	int ia[] = {0}, i = x = 0;
	ia[x = i] += 1;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-unassignment-fail-4
V is DU before the subexpressions of a iff V is DU before a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-fail-4 { V is DU before
        the subexpressions of a iff V is DU before a=b } {
    
    empty_class T1617cduf4 {
	final T1617cduf4 x;
	String s;
	{
	    x = null;
	    (x = new T1617cduf4()).s += "";
	}
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-unassignment-fail-5
V is DU before b iff V is DU after the subexpressions of a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-fail-5 { V is DU before
        b iff V is DU after the subexpressions of a in a=b } {
    
    empty_main T1617cduf5 {
	final int x;
	int i = x = 0;
	i += x = 1;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-unassignment-fail-6
V is DU before b iff V is DU after the subexpressions of a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-fail-6 { V is DU before
        b iff V is DU after the subexpressions of a in a=b } {
    
    empty_main T1617cduf6 {
	final int x;
	int ia[] = {0};
	ia[false ? x = 0 : 0] += x = 0;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-unassignment-fail-7
V is DU before b iff V is DU after the subexpressions of a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-fail-7 { V is DU before
        b iff V is DU after the subexpressions of a in a=b } {
    
    empty_class T1617cduf7 {
	final T1617cduf7 x;
	String s;
	{
	    (false ? x = new T1617cduf7() : null).s += x = null;
	}
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-unassignment-fail-8
V is DU after boolean a=b when true iff V is DU after a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-fail-8 { V is DU after
        boolean a=b when true iff V is DU after a=b } {
    
    empty_main T1617cduf8 {
	boolean b = false;
	final int x;
	x = 0;
	if (b &= false)
	    x = 1;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-unassignment-fail-9
V is DU after boolean a=b when false iff V is DU after a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-fail-9 { V is DU after
        boolean a=b when false iff V is DU after a=b } {
    
    empty_main T1617cduf9 {
	boolean b = true;
	final int x;
	x = 0;
	if (b |= true);
	else x = 1;
    }

} {FAIL}
Test Case: 16.1.7-compound-definite-unassignment-fail-10
V must be DU after b if V is a blank final and V is a in a=b

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-fail-10 { V must be DU
        after b if V is a blank final and V is a in a=b } {
    
    empty_main T1617cduf10 {
	final int x;
	x += x = 10;
    }

} {FAIL}
Test Case: 16.1.7-simple-definite-unassignment-pass-1
a blank final V must be DU before a=b if V is a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-pass-1 { a blank final
        V must be DU before a=b if V is a } {
    
    empty_main T1617sdup1 {
	final int x;
	x = 1;
	if (false) {
	    x = 1;
	}
    }

} {PASS}
Test Case: 16.1.7-simple-definite-unassignment-pass-2
V is DU after a=b iff both a is not V and V is DU after b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-pass-2 { V is DU after
        a=b iff both a is not V and V is DU after b } {
    
    empty_main T1617sdup2 {
	final int x;
	int i;
	i = 1;
	x = 1;
    }

} {PASS}
Test Case: 16.1.7-simple-definite-unassignment-pass-3
V is DU before the subexpressions of a iff V is DU before a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-pass-3 { V is DU before
        the subexpressions of a iff V is DU before a=b } {
    
    empty_main T1617sdup3 {
	final int x;
	int ia[] = {0}, i = 0;
	ia[x = i]++;
    }

} {PASS}
Test Case: 16.1.7-simple-definite-unassignment-pass-4
V is DU before the subexpressions of a iff V is DU before a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-pass-4 { V is DU before
        the subexpressions of a iff V is DU before a=b } {
    
    empty_class T1617sdup4 {
	final T1617sdup4 x;
	int i;
	{
	    (x = new T1617sdup4()).i++;
	}
    }

} {PASS}
Test Case: 16.1.7-simple-definite-unassignment-pass-5
V is DU before b iff V is DU after the subexpressions of a in a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-pass-5 { V is DU before
        b iff V is DU after the subexpressions of a in a=b } {
    
    empty_main T1617sdup5 {
	final int x;
	int i = 0;
	i = x = 1;
    }

} {PASS}
Test Case: 16.1.7-simple-definite-unassignment-pass-6
V is DU after boolean a=b when true iff V is DU after a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-pass-6 { V is DU after
        boolean a=b when true iff V is DU after a=b } {
    
    empty_main T1617sdup6 {
	boolean b;
	final int x;
	x = 0;
	if ((b = false) && false)
	    x = 1;
    }

} {PASS}
Test Case: 16.1.7-simple-definite-unassignment-pass-7
V is DU after boolean a=b when false iff V is DU after a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-pass-7 { V is DU after
        boolean a=b when false iff V is DU after a=b } {
    
    empty_main T1617sdup7 {
	boolean b;
	final int x;
	x = 0;
	if ((b = true) || true);
	else x = 1;
    }

} {PASS}
Test Case: 16.1.7-simple-definite-unassignment-pass-8
V must be DU after b if V is a blank final and V is a in a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-simple-definite-unassignment-pass-8 { V must be DU
        after b if V is a blank final and V is a in a=b } {
    
    empty_main T1617sdup8 {
	final int x;
	int i;
	x = i = 10;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-unassignment-pass-1
a blank final V must be DU before a=b if V is a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-pass-1 { a blank final
        V must be DU before a=b if V is a } {
    
    empty_main T1617cdup1 {
	final int x;
	if (false) {
	    x += 1;
	}
    }

} {PASS}
Test Case: 16.1.7-compound-definite-unassignment-pass-2
V is DU after a=b iff both a is not V and V is DU after b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-pass-2 { V is DU after
        a=b iff both a is not V and V is DU after b } {
    
    empty_main T1617cdup2 {
	final int x;
	int i = 0;
	i += 1;
	x = 1;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-unassignment-pass-3
V is DU before the subexpressions of a iff V is DU before a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-pass-3 { V is DU before
        the subexpressions of a iff V is DU before a=b } {
    
    empty_main T1617cdup3 {
	final int x;
	int ia[] = {0}, i = 0;
	ia[x = i] += 1;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-unassignment-pass-4
V is DU before the subexpressions of a iff V is DU before a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-pass-4 { V is DU before
        the subexpressions of a iff V is DU before a=b } {
    
    empty_class T1617cdup4 {
	final T1617cdup4 x;
	int i;
	{
	    (x = new T1617cdup4()).i += 1;
	}
    }

} {PASS}
Test Case: 16.1.7-compound-definite-unassignment-pass-5
V is DU before b iff V is DU after the subexpressions of a in a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-pass-5 { V is DU before
        b iff V is DU after the subexpressions of a in a=b } {
    
    empty_main T1617cdup5 {
	final int x;
	int i = 0;
	i += x = 1;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-unassignment-pass-6
V is DU after boolean a=b when true iff V is DU after a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-pass-6 { V is DU after
        boolean a=b when true iff V is DU after a=b } {
    
    empty_main T1617cdup6 {
	boolean b = false;
	final int x;
	x = 0;
	if ((b &= false) && false)
	    x = 1;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-unassignment-pass-7
V is DU after boolean a=b when false iff V is DU after a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-pass-7 { V is DU after
        boolean a=b when false iff V is DU after a=b } {
    
    empty_main T1617cdup7 {
	boolean b = true;
	final int x;
	x = 0;
	if ((b |= true) || true);
	else x = 1;
    }

} {PASS}
Test Case: 16.1.7-compound-definite-unassignment-pass-8
V must be DU after b if V is a blank final and V is a in a=b

Expected Result: PASS

Regression Test:

tcltest::test 16.1.7-compound-definite-unassignment-pass-8 { V must be DU
        after b if V is a blank final and V is a in a=b } {
    
    empty_main T1617cdup8 {
	final int x;
	int i = 0;
	x = i += 1;
    }

} {PASS}

16.1.8

Directory : tests/jls/definite-assignment/expressions/operators-increment-and-decrement


Test Case: 16.1.8-definite-unassign-fail-1
++ and -- cannot be applied to final variables

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-unassign-fail-1 { ++ and -- cannot be applied to
        final variables } {
    
    empty_main T1618duf1 {
	final int i;
	if (false)
	    i++;
    }

} {FAIL}
Test Case: 16.1.8-definite-unassign-fail-2
++ and -- cannot be applied to final variables

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-unassign-fail-2 { ++ and -- cannot be applied to
        final variables } {
    
    empty_main T1618duf2 {
	final int i;
	if (false)
	    i--;
    }

} {FAIL}
Test Case: 16.1.8-definite-unassign-fail-3
++ and -- cannot be applied to final variables

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-unassign-fail-3 { ++ and -- cannot be applied to
        final variables } {
    
    empty_main T1618duf3 {
	final int i;
	if (false)
	    ++i;
    }

} {FAIL}
Test Case: 16.1.8-definite-unassign-fail-4
++ and -- cannot be applied to final variables

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-unassign-fail-4 { ++ and -- cannot be applied to
        final variables } {
    
    empty_main T1618duf4 {
	final int i;
	if (false)
	    --i;
    }

} {FAIL}
Test Case: 16.1.8-definite-unassign-fail-5
v is DU after a++ iff v is DU after a

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-unassign-fail-5 { v is DU after a++ iff v is
        DU after a } {
    
    empty_main T1618duf5 {
	final int i;
	int[] j = {0};
	j[i = 0]++;
	i = 2;
    }

} {FAIL}
Test Case: 16.1.8-definite-unassign-fail-6
v is DU after a++ iff v is DU after a

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-unassign-fail-6 { v is DU after a++ iff v is
        DU after a } {
    
    empty_main T1618duf6 {
	final int i;
	int[] j = {0};
	j[i = 0]--;
	i = 2;
    }

} {FAIL}
Test Case: 16.1.8-definite-unassign-fail-7
v is DU after a++ iff v is DU after a

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-unassign-fail-7 { v is DU after a++ iff v is
        DU after a } {
    
    empty_main T1618duf7 {
	final int i;
	int[] j = {0};
	++j[i = 0];
	i = 2;
    }

} {FAIL}
Test Case: 16.1.8-definite-unassign-fail-8
v is DU after a++ iff v is DU after a

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-unassign-fail-8 { v is DU after a++ iff v is
        DU after a } {
    
    empty_main T1618duf8 {
	final int i;
	int[] j = {0};
	--j[i = 0];
	i = 2;
    }

} {FAIL}
Test Case: 16.1.8-definite-unassign-fail-9
v is DU after a++ iff v is DU after a

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-unassign-fail-9 { v is DU after a++ iff v is
        DU after a } {
    
    empty_main T1618duf9 {
	final int[] j;
	(j = new int[] {0})[0]++;
	j = null;
    }

} {FAIL}
Test Case: 16.1.8-definite-unassign-fail-10
v is DU after a++ iff v is DU after a

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-unassign-fail-10 { v is DU after a++ iff v is
        DU after a } {
    
    empty_main T1618duf10 {
	final int[] j;
	(j = new int[] {0})[0]--;
	j = null;
    }

} {FAIL}
Test Case: 16.1.8-definite-unassign-fail-11
v is DU after a++ iff v is DU after a

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-unassign-fail-11 { v is DU after a++ iff v is
        DU after a } {
    
    empty_main T1618duf11 {
	final int[] j;
	++(j = new int[] {0})[0];
	j = null;
    }

} {FAIL}
Test Case: 16.1.8-definite-unassign-fail-12
v is DU after a++ iff v is DU after a

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-unassign-fail-12 { v is DU after a++ iff v is
        DU after a } {
    
    empty_main T1618duf12 {
	final int[] j;
	--(j = new int[] {0})[0];
	j = null;
    }

} {FAIL}
Test Case: 16.1.8-definite-assign-pass-1
v is DA after a++ iff a is v or v is DA after a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.8-definite-assign-pass-1 { v is DA after a++ iff a is v
        or v is DA after a } {
    
    empty_main T1618dap1 {
	int i;
	if (false) {
            i++;
	    int j = i;
	}
    }

} {PASS}
Test Case: 16.1.8-definite-assign-pass-2
v is DA after a++ iff a is v or v is DA after a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.8-definite-assign-pass-2 { v is DA after a++ iff a is v
        or v is DA after a } {
    
    empty_main T1618dap2 {
	int i;
	if (false) {
            i--;
	    int j = i;
	}
    }

} {PASS}
Test Case: 16.1.8-definite-assign-pass-3
v is DA after a++ iff a is v or v is DA after a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.8-definite-assign-pass-3 { v is DA after a++ iff a is v
        or v is DA after a } {
    
    empty_main T1618dap3 {
	int i;
	if (false) {
            ++i;
	    int j = i;
	}
    }

} {PASS}
Test Case: 16.1.8-definite-assign-pass-4
v is DA after a++ iff a is v or v is DA after a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.8-definite-assign-pass-4 { v is DA after a++ iff a is v
        or v is DA after a } {
    
    empty_main T1618dap4 {
	int i;
	if (false) {
            --i;
	    int j = i;
	}
    }

} {PASS}
Test Case: 16.1.8-definite-assign-pass-5
v is DA after a++ iff a is v or v is DA after a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.8-definite-assign-pass-5 { v is DA after a++ iff a is v
        or v is DA after a } {
    
    empty_main T1618dap5 {
	int i, j[] = {0};
	j[i = 0]++;
	int k = i;
    }

} {PASS}
Test Case: 16.1.8-definite-assign-pass-6
v is DA after a++ iff a is v or v is DA after a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.8-definite-assign-pass-6 { v is DA after a++ iff a is v
        or v is DA after a } {
    
    empty_main T1618dap6 {
	int i, j[] = {0};
	j[i = 0]--;
	int k = i;
    }

} {PASS}
Test Case: 16.1.8-definite-assign-pass-7
v is DA after a++ iff a is v or v is DA after a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.8-definite-assign-pass-7 { v is DA after a++ iff a is v
        or v is DA after a } {
    
    empty_main T1618dap7 {
	int i, j[] = {0};
	++j[i = 0];
	int k = i;
    }

} {PASS}
Test Case: 16.1.8-definite-assign-pass-8
v is DA after a++ iff a is v or v is DA after a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.8-definite-assign-pass-8 { v is DA after a++ iff a is v
        or v is DA after a } {
    
    empty_main T1618dap8 {
	int i, j[] = {0};
	--j[i = 0];
	int k = i;
    }

} {PASS}
Test Case: 16.1.8-definite-assign-pass-9
v is DA after a++ iff a is v or v is DA after a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.8-definite-assign-pass-9 { v is DA after a++ iff a is v
        or v is DA after a } {
    
    empty_main T1618dap9 {
	int[] j;
	(j = new int[] {0})[0]++;
	Object o = j;
    }

} {PASS}
Test Case: 16.1.8-definite-assign-pass-10
v is DA after a++ iff a is v or v is DA after a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.8-definite-assign-pass-10 { v is DA after a++ iff a is v
        or v is DA after a } {
    
    empty_main T1618dap10 {
	int[] j;
	(j = new int[] {0})[0]--;
	Object o = j;
    }

} {PASS}
Test Case: 16.1.8-definite-assign-pass-11
v is DA after a++ iff a is v or v is DA after a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.8-definite-assign-pass-11 { v is DA after a++ iff a is v
        or v is DA after a } {
    
    empty_main T1618dap11 {
	int[] j;
	++(j = new int[] {0})[0];
	Object o = j;
    }

} {PASS}
Test Case: 16.1.8-definite-assign-pass-12
v is DA after a++ iff a is v or v is DA after a

Expected Result: PASS

Regression Test:

tcltest::test 16.1.8-definite-assign-pass-12 { v is DA after a++ iff a is v
        or v is DA after a } {
    
    empty_main T1618dap12 {
	int[] j;
	--(j = new int[] {0})[0];
	Object o = j;
    }

} {PASS}
Test Case: 16.1.8-definite-assign-fail-1
v is DA before a iff v is DA before a++

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-assign-fail-1 { v is DA before a iff v is DA
        before a++ } {
    
    empty_main T1618daf1 {
	int i;
	i++;
    }

} {FAIL}
Test Case: 16.1.8-definite-assign-fail-2
v is DA before a iff v is DA before a++

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-assign-fail-2 { v is DA before a iff v is DA
        before a++ } {
    
    empty_main T1618daf2 {
	int i;
	i--;
    }

} {FAIL}
Test Case: 16.1.8-definite-assign-fail-3
v is DA before a iff v is DA before a++

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-assign-fail-3 { v is DA before a iff v is DA
        before a++ } {
    
    empty_main T1618daf3 {
	int i;
	++i;
    }

} {FAIL}
Test Case: 16.1.8-definite-assign-fail-4
v is DA before a iff v is DA before a++

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-assign-fail-4 { v is DA before a iff v is DA
        before a++ } {
    
    empty_main T1618daf4 {
	int i;
	--i;
    }

} {FAIL}
Test Case: 16.1.8-definite-assign-fail-5
v is DA before a iff v is DA before a++

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-assign-fail-5 { v is DA before a iff v is DA
        before a++ } {
    
    empty_main T1618daf5 {
	int i;
	(new int[] {0})[i]++;
    }

} {FAIL}
Test Case: 16.1.8-definite-assign-fail-6
v is DA before a iff v is DA before a++

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-assign-fail-6 { v is DA before a iff v is DA
        before a++ } {
    
    empty_main T1618daf6 {
	int i;
	(new int[] {0})[i]--;
    }

} {FAIL}
Test Case: 16.1.8-definite-assign-fail-7
v is DA before a iff v is DA before a++

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-assign-fail-7 { v is DA before a iff v is DA
        before a++ } {
    
    empty_main T1618daf7 {
	int i;
	++(new int[] {0})[i];
    }

} {FAIL}
Test Case: 16.1.8-definite-assign-fail-8
v is DA before a iff v is DA before a++

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-assign-fail-8 { v is DA before a iff v is DA
        before a++ } {
    
    empty_main T1618daf8 {
	int i;
	--(new int[] {0})[i];
    }

} {FAIL}
Test Case: 16.1.8-definite-assign-fail-9
v is DA before a iff v is DA before a++

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-assign-fail-9 { v is DA before a iff v is DA
        before a++ } {
    
    empty_main T1618daf9 {
	int[] i;
	i[0]++;
    }

} {FAIL}
Test Case: 16.1.8-definite-assign-fail-10
v is DA before a iff v is DA before a++

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-assign-fail-10 { v is DA before a iff v is DA
        before a++ } {
    
    empty_main T1618daf10 {
	int[] i;
	i[0]--;
    }

} {FAIL}
Test Case: 16.1.8-definite-assign-fail-11
v is DA before a iff v is DA before a++

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-assign-fail-11 { v is DA before a iff v is DA
        before a++ } {
    
    empty_main T1618daf11 {
	int[] i;
	++i[0];
    }

} {FAIL}
Test Case: 16.1.8-definite-assign-fail-12
v is DA before a iff v is DA before a++

Expected Result: FAIL

Regression Test:

tcltest::test 16.1.8-definite-assign-fail-12 { v is DA before a iff v is DA
        before a++ } {
    
    empty_main T1618daf12 {
	int[] i;
	--i[0];
    }

} {FAIL}

16.2.3

Directory : tests/jls/definite-assignment/statements/local-class-declaration-statements


Test Case: 16.2.3-switch-1
The JLS is missing a rule. Although 16.2.2 claims v is DA before the initializer in Local since it is DA before the declaration of Local, this is not true for a local class in a switch statement, if an instance is created where v is not DA

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.3-switch-1 { The JLS is missing a rule. Although 16.2.2
        claims v is DA before the initializer in Local since it is DA before
        the declaration of Local, this is not true for a local class in a
        switch statement, if an instance is created where v is not DA } {
    
    empty_class T1623s1 {
	void m(int i) {
	    switch (i) {
            case 0:
		final int j;
		j = 1;
		class Local {
		    int k = j;
		}
		break;
            case 1:
		// Javac 1.4 compiles this, and causes a VerifyError
		int k = new Local().k;
	    }
	}
    }

} {FAIL}

16.2.5

Directory : tests/jls/definite-assignment/statements/labeled-statements


Test Case: 16.2.5-definite-unassign-pass-1
V is DU after L:S iff V is DU after S and before all breaks in S that exit L

Expected Result: PASS

Regression Test:

tcltest::test 16.2.5-definite-unassign-pass-1 { V is DU after L:S iff V is DU
        after S and before all breaks in S that exit L } {
    
    empty_main T1625dup1 {
	final int i;
	l: {
	    if (true)
	        break l;
	    try {
		i = 1;
		break l; // cannot exit l
	    } finally {
		return;
	    }
	}
	i = 2;
    }

} {PASS}
Test Case: 16.2.5-definite-unassign-pass-2
V is DU after L:S iff V is DU after S and before all breaks in S that exit L

Expected Result: PASS

Regression Test:

tcltest::test 16.2.5-definite-unassign-pass-2 { V is DU after L:S iff V is DU
        after S and before all breaks in S that exit L } {
    
    empty_main T1625dup2 {
	final int i;
	l: {
	    if (false)
	        break l;
	    try {
		i = 1;
		break l; // cannot exit l
	    } finally {
		return;
	    }
	}
	i = 2;
    }

} {PASS}
Test Case: 16.2.5-definite-unassign-pass-3
V is DU after L:S iff V is DU after S and before all breaks in S that exit L

Expected Result: PASS

Regression Test:

tcltest::test 16.2.5-definite-unassign-pass-3 { V is DU after L:S iff V is DU
        after S and before all breaks in S that exit L } {
    
    empty_main T1625dup3 {
	final int i;
	boolean b = true;
	l: {
	    if (b)
	        break l;
	    try {
		i = 1;
		break l; // cannot exit l
	    } finally {
		return;
	    }
	}
	i = 2;
    }

} {PASS}
Test Case: 16.2.5-definite-unassign-pass-4
V is DU after L:S iff V is DU after S and before all breaks in S that exit L

Expected Result: PASS

Regression Test:

tcltest::test 16.2.5-definite-unassign-pass-4 { V is DU after L:S iff V is DU
        after S and before all breaks in S that exit L } {
    
    empty_main T1625dup4 {
	final int i;
	l: {}
	i = 1;
    }

} {PASS}
Test Case: 16.2.5-definite-unassign-fail-1
V is DU after L:S iff V is DU after S and before all breaks in S that exit L

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.5-definite-unassign-fail-1 { V is DU after L:S iff V is DU
        after S and before all breaks in S that exit L } {
    
    empty_main T1625duf1 {
	final int i;
	l: {
	    i = 1;
	    break l;
	}
	i = 2;
    }

} {FAIL}
Test Case: 16.2.5-definite-assign-pass-1
V is DA after L:S iff V is DA after S and before all breaks in S that exit L

Expected Result: PASS

Regression Test:

tcltest::test 16.2.5-definite-assign-pass-1 { V is DA after L:S iff V is DA
        after S and before all breaks in S that exit L } {
    
    empty_main T1625dap1 {
	int i;
	l: i = 1;
	i++;
    }

} {PASS}
Test Case: 16.2.5-definite-assign-pass-2
V is DA after L:S iff V is DA after S and before all breaks in S that exit L

Expected Result: PASS

Regression Test:

tcltest::test 16.2.5-definite-assign-pass-2 { V is DA after L:S iff V is DA
        after S and before all breaks in S that exit L } {
    
    empty_main T1625dap2 {
	int i;
	l: { i = 1; }
	i++;
    }

} {PASS}
Test Case: 16.2.5-definite-assign-pass-3
V is DA after L:S iff V is DA after S and before all breaks in S that exit L

Expected Result: PASS

Regression Test:

tcltest::test 16.2.5-definite-assign-pass-3 { V is DA after L:S iff V is DA
        after S and before all breaks in S that exit L } {
    
    empty_main T1625dap3 {
	int i;
	l: {
	    i = 1;
	    break l;
	}
	i++;
    }

} {PASS}
Test Case: 16.2.5-definite-assign-pass-4
V is DA after L:S iff V is DA after S and before all breaks in S that exit L

Expected Result: PASS

Regression Test:

tcltest::test 16.2.5-definite-assign-pass-4 { V is DA after L:S iff V is DA
        after S and before all breaks in S that exit L } {
    
    empty_main T1625dap4 {
	int i;
	l: {
	    if (false)
		break l;
	    return;
	}
	i++;
    }

} {PASS}
Test Case: 16.2.5-definite-assign-fail-1
V is DA after L:S iff V is DA after S and before all breaks in S that exit L

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.5-definite-assign-fail-1 { V is DA after L:S iff V is DA
        after S and before all breaks in S that exit L } {
    
    empty_main T1625daf1 {
	int i;
	l: break l;
	i++;
    }

} {FAIL}
Test Case: 16.2.5-definite-assign-fail-2
V is DA after L:S iff V is DA after S and before all breaks in S that exit L

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.5-definite-assign-fail-2 { V is DA after L:S iff V is DA
        after S and before all breaks in S that exit L } {
    
    empty_main T1625daf2 {
	int i;
	boolean b = true;
	l: {
	    if (b)
	        break l;
	    i = 1;
	}
	i++;
    }

} {FAIL}

16.2.7

Directory : tests/jls/definite-assignment/statements/if-statements


Test Case: 16.2.7-final-1
A blank final initialized inside an if (true) block is definitely assigned.

Expected Result: PASS

Regression Test:

tcltest::test 16.2.7-final-1 { A blank final
        initialized inside an if (true) block is
        definitely assigned. } {
    

    compile [saveas T1627f1.java {
public class T1627f1 {
    final int val;

    T1627f1() {
        if (true) {
            val = 1;
        }
    }
}
}]

} {PASS}
Test Case: 16.2.7-final-2
A blank final initialized inside an if (false) block is not definitely assigned.

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.7-final-2 { A blank final
        initialized inside an if (false) block is
        not definitely assigned. } {
    

    compile [saveas T1627f2.java {
public class T1627f2 {
    final int val;

    T1627f2() {
        if (false) {
            val = 0;
        }
    }
}
}]

} {FAIL}
Test Case: 16.2.7-final-3
A final variable must be definitely unassigned if it is to be assigned inside an if (true) block.

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.7-final-3 { A final variable
        must be definitely unassigned if it
        is to be assigned inside an if (true) block. } {
    

    compile [saveas T1627f3.java {

public class T1627f3 {
    final int val = 0;

    T1627f3() {
        if (true) {
            val = 1;
        }
    }
}
}]

} {FAIL}
Test Case: 16.2.7-final-4
A final variable must be definitely unassigned if it is to be assigned inside an if (false) block.

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.7-final-4 { A final variable
        must be definitely unassigned if it
        is to be assigned inside an if (false) block. } {
    

    compile [saveas T1627f4.java {
public class T1627f4 {
    final int val = 0;

    T1627f4() {
        if (false) {
            val = 1;
        }
    }
}
}]

} {FAIL}
Test Case: 16.2.7-final-5
A final variable must be definitely unassigned when an assignment to it occurs. A blank final assigned inside an if (true) block is definitely assigned, so a second assignment fails.

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.7-final-5 { A final variable
        must be definitely unassigned when an
        assignment to it occurs. A blank
        final assigned inside an if (true)
        block is definitely assigned, so
        a second assignment fails. } {
    

    compile [saveas T1627f5.java {
public class T1627f5 {
    final int val;

    T1627f5() {
        if (true) {
            val = 1;
        }

        val = 0;
    }
}
}]

} {FAIL}
Test Case: 16.2.7-final-6
A final variable must be definitely unassigned when an assignment to it occurs. A blank final assigned inside an if (false) block is not definitely assigned but it is also not definitely unassigned.

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.7-final-6 { A final variable
        must be definitely unassigned when an
        assignment to it occurs. A blank
        final assigned inside an if (false)
        block is not definitely assigned but
        it is also not definitely unassigned. } {
    

    compile [saveas T1627f6.java {
public class T1627f6 {
    final int val;

    T1627f6() {
        if (false) {
            val = 1;
        }

        val = 0;
    }
}
}]

} {FAIL}
Test Case: 16.2.7-scope-1
A final variable in one scope should not effect a final variable in the enclosing scope

Expected Result: PASS

Regression Test:

tcltest::test 16.2.7-scope-1 { A final variable in
        one scope should not effect a final variable
        in the enclosing scope } {
    

    empty_main T1627s1 {
        if (true) {
          final int i = 1;
        }
        final int j;
        j = 2;
    }

} {PASS}
Test Case: 16.2.7-scope-2
A final variable in one scope should not effect a final variable in the enclosing scope

Expected Result: PASS

Regression Test:

tcltest::test 16.2.7-scope-2 { A final variable in
        one scope should not effect a final variable
        in the enclosing scope } {
    

    empty_main T1627s2 {
        if (true) {
          final int i = 1;
        }
        final int i;
        i = 2;
    }

} {PASS}

16.2.8

Directory : tests/jls/definite-assignment/statements/switch-statements


Test Case: 16.2.8-final-1
A blank final may be assigned in different block statement groups, provided it not assigned twice. Even with a non-constant initializer, the variable declaration is treated as a blank final

Expected Result: PASS

Regression Test:

tcltest::test 16.2.8-final-1 { A blank final may be assigned in different block
        statement groups, provided it not assigned twice. Even with a
        non-constant initializer, the variable declaration is treated as
        a blank final } {
    
    switch_labels T1628f1 int {
            case 0:
                final int j = "".length();
                break;
            case 1:
                j = 1;
    }

} {PASS}
Test Case: 16.2.8-final-2
A blank final may be assigned in different block statement groups, provided it not assigned twice

Expected Result: PASS

Regression Test:

tcltest::test 16.2.8-final-2 { A blank final may be assigned in different block
        statement groups, provided it not assigned twice } {
    
    switch_labels T1628f2 int {
            case 0:
                final int b;
                b = 0;
                break;
            case 1:
                b = 1;
    }

} {PASS}
Test Case: 16.2.8-final-3
A blank final may be assigned in different block statement groups, provided it not assigned twice. However, a variable initialized with a constant is inlined, and is not a blank final.

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.8-final-3 { A blank final may be assigned in different block
        statement groups, provided it not assigned twice. However, a
        variable initialized with a constant is inlined, and is not a blank
        final. } {
    
    switch_labels T1628f3 int {
            case 0:
                final byte b = 0;
                break;
            case 1:
                b = 1;
    }

} {FAIL}
Test Case: 16.2.8-final-4
A blank final may not be referenced unless it is definitely assigned. However, a variable initialized with a constant is inlined, and is not a blank final.

Expected Result: PASS

Regression Test:

tcltest::test 16.2.8-final-4 { A blank final may not be referenced unless
        it is definitely assigned. However, a variable initialized with a
        constant is inlined, and is not a blank final. } {
    
    switch_labels T1628f4 int {
            case 0:
                final byte b = 0;
                break;
            case 1:
                byte c = b;
    }

} {PASS}
Test Case: 16.2.8-final-5
A final variable declared with a constant initializer qualifies as a constant, and may be used as a label

Expected Result: PASS

Regression Test:

tcltest::test 16.2.8-final-5 { A final variable declared with a constant
        initializer qualifies as a constant, and may be used as a label } {
    
    switch_labels T1628f5 int {
        case 0:
            final byte b = 1;
        case b:
    }

} {PASS}
Test Case: 16.2.8-final-6
A final variable declared with a constant initializer qualifies as a constant, and may be used as a label, but only after its declaration

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.8-final-6 { A final variable declared with a constant
        initializer qualifies as a constant, and may be used as a label,
        but only after its declaration } {
    
    switch_labels T1628f6 int {
        case b:
            break;
        case 0:
            final byte b = 1;
    }

} {FAIL}
Test Case: 16.2.8-unassigned-1
A variable must have been assigned in each switch block if it is going to be accessed

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.8-unassigned-1 { A variable must have been assigned
        in each switch block if it is going to be accessed } {
    

    switch_labels T1628u1 int {
            case 0:
                byte b = 0;
                break;
            default:
                b++;
    }

} {FAIL}
Test Case: 16.2.8-unassigned-2
A variable that is not definitely assigned before entering the switch must be definitely assigned in each switch block if it is to be definitely assigned after the switch block

Expected Result: PASS

Regression Test:

tcltest::test 16.2.8-unassigned-2 { A variable that is not definitely assigned
        before entering the switch must be definitely assigned in each switch
        block if it is to be definitely assigned after the switch block } {
    

    compile [saveas T1628u2.java {
class T1628u2 {
    void foo(int i) {
        int j;
        switch (i) {
            case 0: j = 0; break;
            case 1: j = 1; break;
            default: j = 2; break;
        }
        j++;
    }
}
    }]

} {PASS}
Test Case: 16.2.8-unassigned-3
A variable that is not definitely assigned before entering the switch must be definitely assigned in each switch block if it is to be definitely assigned after the switch block

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.8-unassigned-3 { A variable that is not definitely assigned
        before entering the switch must be definitely assigned in each switch
        block if it is to be definitely assigned after the switch block } {
    

    compile [saveas T1628u3.java {
class T1628u3 {
    void foo(int i) {
        int j;
        switch (i) {
            case 0: j = 0; break;
            case 1: break;
            default: j = 2; break;
        }
        j++;
    }
}
    }]

} {FAIL}
Test Case: 16.2.8-unassigned-4
A variable that is not definitely assigned before entering the switch must be definitely assigned in each switch block (including the default block) if it is to be definitely assigned after the switch block

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.8-unassigned-4 { A variable that is not definitely assigned
        before entering the switch must be definitely assigned in each switch
        block (including the default block) if it is to be definitely assigned
        after the switch block } {
    

    compile [saveas T1628u4.java {
class T1628u4 {
    void foo(int i) {
        int j;
        switch (i) {
            case 0: j = 0; break;
            case 1: j = 0; break;
        }
        j++;
    }
}
    }]

} {FAIL}
Test Case: 16.2.8-unassigned-5
Switch blocks that fall through to default: that definitely assigns a variable ensures that the variable is definitely assigned after the switch

Expected Result: PASS

Regression Test:

tcltest::test 16.2.8-unassigned-5 { Switch blocks that fall through to default:
        that definitely assigns a variable ensures that the variable is
        definitely assigned after the switch } {
    

    compile [saveas T1628u5.java {
class T1628u5 {
    void foo(int i) {
        int j;
        switch (i) {
            case 0:
            case 1:
            default: j = 0;
        }
        j++;
    }
}
    }]

} {PASS}
Test Case: 16.2.8-unassigned-6
A variable within a switch statement must be assigned before use within any swith block

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.8-unassigned-6 { A variable within a switch statement must
        be assigned before use within any swith block } {
    
    switch_labels T1628u6 int {
            case 0:
                byte b = 1;
                break;
            case 1:
                byte c = b;
    }

} {FAIL}
Test Case: 16.2.8-unassigned-7
A variable declared in a switch statement may not be referenced before its declaration, even if the declaration will be skipped

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.8-unassigned-7 { A variable declared in a switch statement
        may not be referenced before its declaration, even if the declaration
        will be skipped } {
    
    switch_labels T1628u7 int {
            case 0:
                byte c = b;
                break;
            case 1:
                byte b = 0;
    }

} {FAIL}
Test Case: 16.2.8-unassigned-8
v is DU if it is DU before breaks which exit the switch

Expected Result: PASS

Regression Test:

tcltest::test 16.2.8-unassigned-8 { v is DU if it is DU before breaks which
        exit the switch } {
    
    empty_main T1628u8 {
	int i = 1;
	final int j;
	switch (i) {
	    case 0:
	    try {
		j = 1;
		break; // doesn't exit switch
	    } finally {
		return;
	    }
	}
	j = 2;
    }

} {PASS}

16.2.9

Directory : tests/jls/definite-assignment/statements/while-statements


Test Case: 16.2.9-definite-unassign-pass-1
v is DU after the while if it is DU before every break which exits the while

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-unassign-pass-1 { v is DU after the while if it
        is DU before every break which exits the while } {
    
    empty_main T1629dup1 {
	final int i;
	boolean b = true;
	while (true) {
	    if (b)
	        break;
	    try {
		i = 1;
		break; // doesn't exit while
	    } finally {
		return;
	    }
	}
	i = 2;
    }

} {PASS}
Test Case: 16.2.9-definite-unassign-pass-2
v is DU before the condition if it is DU before every continue which exits the statement

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-unassign-pass-2 { v is DU before the condition
        if it is DU before every continue which exits the statement } {
    
    empty_main T1629dup2 {
	final int i;
	while (true) {
	    try {
		i = 2;
		continue; // doesn't continue loop
	    } finally {
		return;
	    }
	}
    }

} {PASS}
Test Case: 16.2.9-definite-unassign-pass-3
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-unassign-pass-3 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T1629dup3 {
	final int i;
	while (true)
	    if (false)
	        i = 1;
	// the fact that i is not DU before the loop doesn't matter
    }

} {PASS}
Test Case: 16.2.9-definite-unassign-pass-4
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-unassign-pass-4 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T1629dup4 {
	final int i;
	while (true) {
	    i = 1;
	    break;
	}
    }

} {PASS}
Test Case: 16.2.9-definite-unassign-pass-5
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-unassign-pass-5 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T1629dup5 {
	final boolean b;
	while ((b = true) && false);
    }

} {PASS}
Test Case: 16.2.9-definite-unassign-pass-6
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-unassign-pass-6 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T1629dup6 {
	final boolean b;
	while (b = true)
	    break;
    }

} {PASS}
Test Case: 16.2.9-definite-unassign-pass-7
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-unassign-pass-7 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T1629dup7 {
	final int i;
	boolean b = true;
	while (b && false)
	    i = 1;
    }

} {PASS}
Test Case: 16.2.9-definite-unassign-pass-8
v is DU after while(e)S; iff v is DU after e when false and v is DU before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-unassign-pass-8 { v is DU after while(e)S; iff
        v is DU after e when false and v is DU before every exiting break } {
    
    empty_main T1629dup8 {
	final boolean b;
	b = true;
	while (b || true);
	b = false;
    }

} {PASS}
Test Case: 16.2.9-definite-unassign-pass-9
variables declared in a loop may be assigned in the loop

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-unassign-pass-9 { variables declared in a
        loop may be assigned in the loop } {
    
    empty_main T1629dup9 {
        while (true) {
            final int i;
            i = 1;
            continue;
        }
    }

} {PASS}
Test Case: 16.2.9-definite-unassign-pass-10
variables declared in a loop may be assigned in the loop

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-unassign-pass-10 { variables declared in a
        loop may be assigned in the loop } {
    
    empty_main T1629dup10 {
        while (true) {
            final int i;
            i = 1;
        }
    }

} {PASS}
Test Case: 16.2.9-definite-unassign-fail-1
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.9-definite-unassign-fail-1 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T1629duf1 {
	final int i;
	while (true)
	    i = 1;
    }

} {FAIL}
Test Case: 16.2.9-definite-unassign-fail-2
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.9-definite-unassign-fail-2 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T1629duf2 {
	final int i;
	while (true) {
	    i = 1;
	    continue;
	}
    }

} {FAIL}
Test Case: 16.2.9-definite-unassign-fail-3
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.9-definite-unassign-fail-3 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T1629duf3 {
	final boolean b;
	while (b = false);
    }

} {FAIL}
Test Case: 16.2.9-definite-unassign-fail-4
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.9-definite-unassign-fail-4 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T1629duf4 {
	final boolean b;
	while (b = false)
	    continue;
    }

} {FAIL}
Test Case: 16.2.9-definite-unassign-fail-5
v is DU after while(e)S; iff v is DU after e when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.9-definite-unassign-fail-5 { v is DU after while(e)S; iff
        v is DU after e when false and v is DU before every exiting break } {
    
    empty_main T1629duf5 {
	final int i;
	while (true) {
	    if (false)
                i = 1;
	    break;
	}
	i = 1;
    }

} {FAIL}
Test Case: 16.2.9-definite-unassign-fail-6
v is DU after while(e)S; iff v is DU after e when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.9-definite-unassign-fail-6 { v is DU after while(e)S; iff
        v is DU after e when false and v is DU before every exiting break } {
    
    empty_main T1629duf6 {
	final int i;
	boolean b = true;
	while (b && false)
	    if (false)
                i = 1;
	i = 1;
    }

} {FAIL}
Test Case: 16.2.9-definite-unassign-fail-7
v is DU after while(e)S; iff v is DU after e when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.9-definite-unassign-fail-7 { v is DU after while(e)S; iff
        v is DU after e when false and v is DU before every exiting break } {
    
    empty_main T1629duf7 {
	final int i;
	while (true)
	    if (true)
	        break;
	    else
                i = 1;
	i = 1;
    }

} {FAIL}
Test Case: 16.2.9-definite-unassign-fail-8
v is DU before S iff V is DU after e when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.9-definite-unassign-fail-8 { v is DU before S iff V is DU
        after e when true } {
    
    empty_main T1629duf8 {
	final int i;
	i = 1;
	while (true)
	    i = 2;
    }

} {FAIL}
Test Case: 16.2.9-definite-assign-pass-1
v is DA after while(e)S; iff v is DA after e when false and v is DA before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-assign-pass-1 { v is DA after while(e)S; iff
        v is DA after e when false and v is DA before every exiting break } {
    
    empty_main T1629dap1 {
	int i;
	boolean b = true;
	while (b || true);
	int j = i;
    }

} {PASS}
Test Case: 16.2.9-definite-assign-pass-2
v is DA after while(e)S; iff v is DA after e when false and v is DA before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-assign-pass-2 { v is DA after while(e)S; iff
        v is DA after e when false and v is DA before every exiting break } {
    
    empty_main T1629dap2 {
	int i;
	while (true)
	    try {
		break; // not an exiting break;
	    } finally {
		i = 1;
		break;
	    }
        int j = i;
    }

} {PASS}
Test Case: 16.2.9-definite-assign-pass-3
v is DA after while(e)S; iff v is DA after e when false and v is DA before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.9-definite-assign-pass-3 { v is DA after while(e)S; iff
        v is DA after e when false and v is DA before every exiting break } {
    
    empty_main T1629dap3 {
	boolean b;
	while (b = false);
	boolean x = b;
    }

} {PASS}
Test Case: 16.2.9-definite-assign-fail-1
v is DA after while(e)S; iff v is DA after e when false and v is DA before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.9-definite-assign-fail-1 { v is DA after while(e)S; iff
        v is DA after e when false and v is DA before every exiting break } {
    
    empty_main T1629daf1 {
	int i;
	boolean b = false;
	while (b = !b)
	    i = 1;
	int j = i;
    }

} {FAIL}
Test Case: 16.2.9-definite-assign-fail-2
v is DA after while(e)S; iff v is DA after e when false and v is DA before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.9-definite-assign-fail-2 { v is DA after while(e)S; iff
        v is DA after e when false and v is DA before every exiting break } {
    
    empty_main T1629daf2 {
	int i;
	while (true)
	    break;
	int j = i;
    }

} {FAIL}
Test Case: 16.2.9-definite-assign-fail-3
v is DA after while(e)S; iff v is DA after e when false and v is DA before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.9-definite-assign-fail-3 { v is DA after while(e)S; iff
        v is DA after e when false and v is DA before every exiting break } {
    
    empty_main T1629daf3 {
	int i;
	boolean b;
	while (b = true)
	    if (false)
	        break;
	int j = i;
    }

} {FAIL}

16.2.10

Directory : tests/jls/definite-assignment/statements/do-statements


Test Case: 16.2.10-definite-unassign-pass-1
v is DU after the do if it is DU before every break which exits the do

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-unassign-pass-1 { v is DU after the do if it
        is DU before every break which exits the do } {
    
    empty_main T16210dup1 {
	final int i;
	boolean b = true;
	do {
	    if (b)
                break;
	    try {
		i = 1;
		break; // doesn't exit do
	    } finally {
		return;
	    }
	} while (true);
	i = 2;
    }

} {PASS}
Test Case: 16.2.10-definite-unassign-pass-2
v is DU before the condition if it is DU before every continue which exits the statement

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-unassign-pass-2 { v is DU before the condition
        if it is DU before every continue which exits the statement } {
    
    empty_main T16210dup2 {
	final int i;
	do {
	    try {
		i = 2;
		continue; // doesn't continue loop
	    } finally {
		return;
	    }
	} while (true);
    }

} {PASS}
Test Case: 16.2.10-definite-unassign-pass-3
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-unassign-pass-3 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16210dup3 {
	final int i;
	do
	    if (false)
	        i = 1; // assignment not reachable
	while (true);
	// the fact that i is not DU before the loop doesn't matter
    }

} {PASS}
Test Case: 16.2.10-definite-unassign-pass-4
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-unassign-pass-4 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16210dup4 {
	final int i;
	do
	    i = 1;
	while (false);
    }

} {PASS}
Test Case: 16.2.10-definite-unassign-pass-5
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-unassign-pass-5 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16210dup5 {
	final int i;
	do {
	    i = 1;
	    break;
	} while (true);
    }

} {PASS}
Test Case: 16.2.10-definite-unassign-pass-6
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-unassign-pass-6 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16210dup6 {
	final boolean b;
	do;
	while ((b = true) && false);
    }

} {PASS}
Test Case: 16.2.10-definite-unassign-pass-7
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-unassign-pass-7 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16210dup7 {
	final boolean b;
	do
	    continue;
	while ((b = true) && false);
    }

} {PASS}
Test Case: 16.2.10-definite-unassign-pass-8
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-unassign-pass-8 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16210dup8 {
	final int i;
	boolean b = true;
	do
	    i = 1;
	while (b && false);
    }

} {PASS}
Test Case: 16.2.10-definite-unassign-pass-9
v is DU after do S while(e); iff v is DU after e when false and v is DU before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-unassign-pass-9 { v is DU after do S while(e);
        iff v is DU after e when false and v is DU before every exiting
        break } {
    
    empty_main T16210dup9 {
	final boolean b;
	b = true;
	do;
	while (b || true);
	b = false;
    }

} {PASS}
Test Case: 16.2.10-definite-unassign-pass-10
variables declared in a loop may be assigned in the loop

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-unassign-pass-10 { variables declared in a
        loop may be assigned in the loop } {
    
    empty_main T16210dup10 {
        do {
            final int i;
            i = 1;
            continue;
        } while (true);
    }

} {PASS}
Test Case: 16.2.10-definite-unassign-pass-11
variables declared in a loop may be assigned in the loop

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-unassign-pass-11 { variables declared in a
        loop may be assigned in the loop } {
    
    empty_main T16210dup11 {
        do {
            final int i;
            i = 1;
        } while (true);
    }

} {PASS}
Test Case: 16.2.10-definite-unassign-fail-1
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-unassign-fail-1 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16210duf1 {
	final int i;
	do
	    i = 1;
	while (true);
    }

} {FAIL}
Test Case: 16.2.10-definite-unassign-fail-2
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-unassign-fail-2 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16210duf2 {
	final int i;
	do {
	    i = 1;
	    continue
	} while (true);
    }

} {FAIL}
Test Case: 16.2.10-definite-unassign-fail-3
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-unassign-fail-3 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16210duf3 {
	final boolean b;
	do;
	while (b = false);
    }

} {FAIL}
Test Case: 16.2.10-definite-unassign-fail-4
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-unassign-fail-4 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16210duf4 {
	final boolean b;
	do
	    continue;
	while (b = false);
    }

} {FAIL}
Test Case: 16.2.10-definite-unassign-fail-5
v is DU after do S while(e); iff v is DU after e when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-unassign-fail-5 { v is DU after do S while(e);
        iff v is DU after e when false and v is DU before every exiting
        break } {
    
    empty_main T16210duf5 {
	final boolean b;
	do
	    break;
	while ((b = true) && false);
	b = true;
    }

} {FAIL}
Test Case: 16.2.10-definite-unassign-fail-6
v is DU after do S while(e); iff v is DU after e when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-unassign-fail-6 { v is DU after do S while(e);
        iff v is DU after e when false and v is DU before every exiting
        break } {
    
    empty_main T16210duf6 {
	final int i;
	do {
	    if (false)
                i = 1;
	    break;
	} while (true);
	i = 1;
    }

} {FAIL}
Test Case: 16.2.10-definite-unassign-fail-7
v is DU after do S while(e); iff v is DU after e when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-unassign-fail-7 { v is DU after do S while(e);
        iff v is DU after e when false and v is DU before every exiting
        break } {
    
    empty_main T16210duf7 {
	final int i;
	boolean b = true;
	do
	    if (false)
                i = 1;
	while (b && false);
	i = 1;
    }

} {FAIL}
Test Case: 16.2.10-definite-unassign-fail-8
v is DU after do S while(e); iff v is DU after e when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-unassign-fail-8 { v is DU after do S while(e);
        iff v is DU after e when false and v is DU before every exiting
        break } {
    
    empty_main T16210duf8 {
	final int i;
	do
	    if (true)
	        break;
	    else
                i = 1;
	while (false);
	i = 1;
    }

} {FAIL}
Test Case: 16.2.10-definite-unassign-fail-9
v is DU after do S while(e); iff v is DU after e when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-unassign-fail-9 { v is DU after do S while(e);
        iff v is DU after e when false and v is DU before every exiting
        break } {
    
    empty_main T16210duf9 {
	final int i;
	do
	    if (true)
	        break;
	    else
                i = 1;
	while (true);
	i = 1;
    }

} {FAIL}
Test Case: 16.2.10-definite-unassign-fail-10
V is DU before S iff V is DU before do S while(e); and V is DU after e when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-unassign-fail-10 { V is DU before S iff V is
        DU before do S while(e); and V is DU after e when true } {
    
    empty_main T16210duf10 {
	final int i;
	i = 1;
	do
	    i = 2;
	while (true);
    }

} {FAIL}
Test Case: 16.2.10-definite-unassign-fail-11
V is DU before S iff V is DU before do S while(e); and V is DU after e when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-unassign-fail-11 { V is DU before S iff V is
        DU before do S while(e); and V is DU after e when true } {
    
    empty_main T16210duf11 {
	final int i;
	i = 1;
	do
	    i = 2;
	while (false);
    }

} {FAIL}
Test Case: 16.2.10-definite-assign-pass-1
v is DA after do S while(e); iff v is DA after e when false and v is DA before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-assign-pass-1 { v is DA after do S while(e);
        iff v is DA after e when false and v is DA before every exiting
        break } {
    
    empty_main T16210dap1 {
	int i;
	boolean b = true;
	do;
	while (b || true);
	int j = i;
    }

} {PASS}
Test Case: 16.2.10-definite-assign-pass-2
v is DA after do S while(e); iff v is DA after e when false and v is DA before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-assign-pass-2 { v is DA after do S while(e);
        iff v is DA after e when false and v is DA before every exiting
        break } {
    
    empty_main T16210dap2 {
	int i;
	do
	    try {
		break; // not an exiting break;
	    } finally {
		i = 1;
		break;
	    }
        while (true);
        int j = i;
    }

} {PASS}
Test Case: 16.2.10-definite-assign-pass-3
v is DA after do S while(e); iff v is DA after e when false and v is DA before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-assign-pass-3 { v is DA after do S while(e);
        iff v is DA after e when false and v is DA before every exiting
        break } {
    
    empty_main T16210dap3 {
	boolean b;
	do;
	while (b = false);
	boolean x = b;
    }

} {PASS}
Test Case: 16.2.10-definite-assign-pass-4
v is DA after do S while(e); iff v is DA after e when false and v is DA before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-assign-pass-4 { v is DA after do S while(e);
        iff v is DA after e when false and v is DA before every exiting
        break } {
    
    empty_main T16210dap4 {
	int i;
	do
	    i = 1;
	while (false);
	int j = i;
    }

} {PASS}
Test Case: 16.2.10-definite-assign-pass-5
v is DA after do S while(e); iff v is DA after e when false and v is DA before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.10-definite-assign-pass-5 { v is DA after do S while(e);
        iff v is DA after e when false and v is DA before every exiting
        break } {
    
    empty_main T16210dap5 {
	int i;
	do
	    if (false)
	        break;
	while (true);
	int j = i;
    }

} {PASS}
Test Case: 16.2.10-definite-assign-fail-1
v is DA after do S while(e); iff v is DA after e when false and v is DA before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-assign-fail-1 { v is DA after do S while(e);
        iff v is DA after e when false and v is DA before every exiting
        break } {
    
    empty_main T16210daf1 {
	int i;
	do
	    break;
	while (true);
	int j = i;
    }

} {FAIL}
Test Case: 16.2.10-definite-assign-fail-2
v is DA after do S while(e); iff v is DA after e when false and v is DA before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.10-definite-assign-fail-2 { v is DA after do S while(e);
        iff v is DA after e when false and v is DA before every exiting
        break } {
    
    empty_main T16210daf2 {
	int i;
	boolean b;
	do
	    if (false)
	        break;
	while (b = true);
	int j = i;
    }

} {FAIL}

16.2.11

Directory : tests/jls/definite-assignment/statements/for-statements


Test Case: 16.2.11-definite-unassign-pass-1
v is DU after the for if it is DU before every break which exits the for

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-unassign-pass-1 { v is DU after the for if it
        is DU before every break which exits the for } {
    
    empty_main T16211dup1 {
	final int i;
	boolean b = true;
	for ( ; ; ) {
	    if (b)
	        break;
	    try {
		i = 1;
		break; // doesn't exit for
	    } finally {
		return;
	    }
	}
	i = 2;
    }

} {PASS}
Test Case: 16.2.11-definite-unassign-pass-2
v is DU before the condition if it is DU before every continue which exits the statement

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-unassign-pass-2 { v is DU before the condition
        if it is DU before every continue which exits the statement } {
    
    empty_main T16211dup2 {
	final int i;
	for ( ; ; ) {
	    try {
		i = 2;
		continue; // doesn't continue loop
	    } finally {
		return;
	    }
	}
    }

} {PASS}
Test Case: 16.2.11-definite-unassign-pass-3
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-unassign-pass-3 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16211dup3 {
	final int i;
	for ( ; ; )
	    if (false)
	        i = 1; // assignment not reachable
	// the fact that i is not DU before the loop doesn't matter
    }

} {PASS}
Test Case: 16.2.11-definite-unassign-pass-4
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-unassign-pass-4 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16211dup4 {
	for (final int i; ; ) {
	    i = 1;
	    break;
	}
    }

} {PASS}
Test Case: 16.2.11-definite-unassign-pass-5
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-unassign-pass-5 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16211dup5 {
	for (final boolean b; (b = true) && false; );
    }

} {PASS}
Test Case: 16.2.11-definite-unassign-pass-6
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-unassign-pass-6 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16211dup6 {
	for (final boolean b; b = true; )
	    break;
    }

} {PASS}
Test Case: 16.2.11-definite-unassign-pass-7
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-unassign-pass-7 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16211dup7 {
	for (final boolean b; true; b = true)
	    break;
    }

} {PASS}
Test Case: 16.2.11-definite-unassign-pass-8
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-unassign-pass-8 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16211dup8 {
	boolean b = true;
	for (final int i; b && false; )
	    i = 1;
    }

} {PASS}
Test Case: 16.2.11-definite-unassign-pass-9
v is DU after a for statement iff v is DU after the (possibly implicit) condition when false and v is DU before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-unassign-pass-9 { v is DU after a for statement
        iff v is DU after the (possibly implicit) condition when false and v
        is DU before every exiting break } {
    
    empty_main T16211dup9 {
	final boolean b;
	for (b = true; b || true; );
	b = false;
    }

} {PASS}
Test Case: 16.2.11-definite-unassign-pass-10
variables declared in a loop may be assigned in the loop

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-unassign-pass-10 { variables declared in a
        loop may be assigned in the loop } {
    
    empty_main T16211dup10 {
        for ( ; ; ) {
            final int i;
            i = 1;
            continue;
        }
    }

} {PASS}
Test Case: 16.2.11-definite-unassign-pass-11
variables declared in a loop may be assigned in the loop

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-unassign-pass-11 { variables declared in a
        loop may be assigned in the loop } {
    
    empty_main T16211dup11 {
        for ( ; ; ) {
            final int i;
            i = 1;
        }
    }

} {PASS}
Test Case: 16.2.11-definite-unassign-fail-1
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-unassign-fail-1 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16211duf1 {
	for (final int i; ; )
	    i = 1;
    }

} {FAIL}
Test Case: 16.2.11-definite-unassign-fail-2
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-unassign-fail-2 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16211duf2 {
	for (final int i; ; ) {
	    i = 1;
	    continue;
	}
    }

} {FAIL}
Test Case: 16.2.11-definite-unassign-fail-3
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-unassign-fail-3 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16211duf3 {
	for (final boolean b; b = false; );
    }

} {FAIL}
Test Case: 16.2.11-definite-unassign-fail-4
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-unassign-fail-4 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16211duf4 {
	for (final boolean b; b = false; )
	    continue;
    }

} {FAIL}
Test Case: 16.2.11-definite-unassign-fail-5
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-unassign-fail-5 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16211duf5 {
	for (final boolean b; ; b = false);
    }

} {FAIL}
Test Case: 16.2.11-definite-unassign-fail-6
v may be reachably assigned in loop only once unless loop can't repeat

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-unassign-fail-6 { v may be reachably assigned
        in loop only once unless loop can't repeat } {
    
    empty_main T16211duf6 {
	for (final boolean b; ; b = false)
	    continue;
    }

} {FAIL}
Test Case: 16.2.11-definite-unassign-fail-7
v is DU after a for statement iff v is DU after the (possibly implicit) condition when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-unassign-fail-7 { v is DU after a for statement
        iff v is DU after the (possibly implicit) condition when false and v
        is DU before every exiting break } {
    
    empty_main T16211duf7 {
	final int i;
	for ( ; ; ) {
	    if (false)
                i = 1;
	    break;
	}
	i = 1;
    }

} {FAIL}
Test Case: 16.2.11-definite-unassign-fail-8
v is DU after a for statement iff v is DU after the (possibly implicit) condition when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-unassign-fail-8 { v is DU after a for statement
        iff v is DU after the (possibly implicit) condition when false and v
        is DU before every exiting break } {
    
    empty_main T16211duf8 {
	final int i;
	for (boolean b = true; b && false; )
	    if (false)
                i = 1;
	i = 1;
    }

} {FAIL}
Test Case: 16.2.11-definite-unassign-fail-9
v is DU after a for statement iff v is DU after the (possibly implicit) condition when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-unassign-fail-9 { v is DU after a for statement
        iff v is DU after the (possibly implicit) condition when false and v
        is DU before every exiting break } {
    
    empty_main T16211duf9 {
	final int i;
	for ( ; ; )
	    if (true)
	        break;
	    else
	        i = 1;
	i = 1;
    }

} {FAIL}
Test Case: 16.2.11-definite-unassign-fail-10
v is DU after a for statement iff v is DU after the (possibly implicit) condition when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-unassign-fail-10 { v is DU after a for statement
        iff v is DU after the (possibly implicit) condition when false and v
        is DU before every exiting break } {
    
    empty_main T16211duf10 {
	final int i;
	for ( ; false; i = 1);
	i = 1;
    }

} {FAIL}
Test Case: 16.2.11-definite-unassign-fail-11
v is DU after a for statement iff v is DU after the (possibly implicit) condition when false and v is DU before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-unassign-fail-11 { v is DU after a for statement
        iff v is DU after the (possibly implicit) condition when false and v
        is DU before every exiting break } {
    
    empty_main T16211duf11 {
	final int i;
	for ( ; ; i = 1)
	    break;
	i = 1;
    }

} {FAIL}
Test Case: 16.2.11-definite-unassign-fail-12
v is DU before S iff V is DU after the (possibly implicit) condition when true

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-unassign-fail-12 { v is DU before S iff V is
        DU after the (possibly implicit) condition when true } {
    
    empty_main T16211duf12 {
	for (final int i, j = i = 1; ; )
	    i = 2;
    }

} {FAIL}
Test Case: 16.2.11-definite-assign-pass-1
v is DA after a for statement iff v is DA after the (possibly implicit) condition when false and v is DA before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-assign-pass-1 { v is DA after a for statement
        iff v is DA after the (possibly implicit) condition when false and v
        is DA before every exiting break } {
    
    empty_main T16211dap1 {
	int i;
	for (boolean b = true; b || true; );
	int j = i;
    }

} {PASS}
Test Case: 16.2.11-definite-assign-pass-2
v is DA after a for statement iff v is DA after the (possibly implicit) condition when false and v is DA before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-assign-pass-2 { v is DA after a for statement
        iff v is DA after the (possibly implicit) condition when false and v
        is DA before every exiting break } {
    
    empty_main T16211dap2 {
	int i;
	for ( ; ; )
	    try {
		break; // not an exiting break;
	    } finally {
		i = 1;
		break;
	    }
        int j = i;
    }

} {PASS}
Test Case: 16.2.11-definite-assign-pass-3
v is DA after a for statement iff v is DA after the (possibly implicit) condition when false and v is DA before every exiting break

Expected Result: PASS

Regression Test:

tcltest::test 16.2.11-definite-assign-pass-3 { v is DA after a for statement
        iff v is DA after the (possibly implicit) condition when false and v
        is DA before every exiting break } {
    
    empty_main T16211dap3 {
	boolean b;
	for ( ; b = false; );
	boolean x = b;
    }

} {PASS}
Test Case: 16.2.11-definite-assign-fail-1
v is DA after a for statement iff v is DA after the (possibly implicit) condition when false and v is DA before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-assign-fail-1 { v is DA after a for statement
        iff v is DA after the (possibly implicit) condition when false and v
        is DA before every exiting break } {
    
    empty_main T16211daf1 {
	int i;
	for (boolean b = false; b = !b; )
	    i = 1;
	int j = i;
    }

} {FAIL}
Test Case: 16.2.11-definite-assign-fail-2
v is DA after a for statement iff v is DA after the (possibly implicit) condition when false and v is DA before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-assign-fail-2 { v is DA after a for statement
        iff v is DA after the (possibly implicit) condition when false and v
        is DA before every exiting break } {
    
    empty_main T16211daf2 {
	int i;
	for ( ; ; )
	    break;
	int j = i;
    }

} {FAIL}
Test Case: 16.2.11-definite-assign-fail-3
v is DA after a for statement iff v is DA after the (possibly implicit) condition when false and v is DA before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-assign-fail-3 { v is DA after a for statement
        iff v is DA after the (possibly implicit) condition when false and v
        is DA before every exiting break } {
    
    empty_main T16211daf3 {
	int i;
	for (boolean b; b = true; )
	    if (false)
	        break;
	int j = i;
    }

} {FAIL}
Test Case: 16.2.11-definite-assign-fail-4
v is DA after a for statement iff v is DA after the (possibly implicit) condition when false and v is DA before every exiting break

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.11-definite-assign-fail-4 { v is DA after a for statement
        iff v is DA after the (possibly implicit) condition when false and v
        is DA before every exiting break } {
    
    empty_main T16211daf4 {
	int i;
	for ( ; ; i = 1)
	    break;
	int j = i;
    }

} {FAIL}

16.2.14

Directory : tests/jls/definite-assignment/statements/try-statements


Test Case: 16.2.14-definite-unassign-fail-1
v is DU before a catch block iff it is DU before the try block and the try block has no reachable assignments to v

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-1 { v is DU before a catch block
        iff it is DU before the try block and the try block has no reachable
        assignments to v } {
    
    empty_main T16214duf1 {
	final int i;
	int count = 0;
	while (true) {
	    try {
		i = count++;
		count /= 0; // throws ArithmeticException
		while (true);
	    } catch (Exception e) {
		// i not DU, since try block had reachable assignment
	    }
	    // i multiply assigned in loop
	}
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-2
v is DU before a finally block iff it is DU before the try block and the try block and all catch blocks have no reachable assignments to v

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-2 { v is DU before a finally block
        iff it is DU before the try block and the try block and all catch
        blocks have no reachable assignments to v } {
    
    empty_main T16214duf2 {
	final int i;
	int count = 0;
	while (true) {
	    try {
		i = count++;
		count /= 0; // throws ArithmeticException
		while (true);
	    } finally {
		// i not DU, since try block had reachable assignment
		continue; // discards exception
	    }
	    // i multiply assigned in loop
	}
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-3
v is DU before a finally block iff it is DU before the try block and the try block and all catch blocks have no reachable assignments to v

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-3 { v is DU before a finally block
        iff it is DU before the try block and the try block and all catch
        blocks have no reachable assignments to v } {
    
    empty_main T16214duf3 {
	final int i;
	int count = 0;
	while (true) {
	    try {
		i = count++;
		count /= 0; // throws ArithmeticException
		while (true);
	    } catch (Exception e) {
	    } finally {
		// i not DU, since try block had reachable assignment
	    }
	    // i multiply assigned in loop
	}
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-4
v is DU before a finally block iff it is DU before the try block and the try block and all catch blocks have no reachable assignments to v

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-4 { v is DU before a finally block
        iff it is DU before the try block and the try block and all catch
        blocks have no reachable assignments to v } {
    
    empty_main T16214duf4 {
	final int i;
	int count = 0;
	while (true) {
	    try {
		throw new Exception();
	    } catch (Exception e) {
		i = count++;
		count /= 0; // throws ArithmeticException
		while (true);
	    } finally {
		// i not DU, since catch block had reachable assignment
		continue; // discards exception
	    }
	    // i multiply assigned in loop
	}
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-5
v is DU before a catch block iff it is DU before the try block and the try block has no reachable assignments to v

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-5 { v is DU before a catch block
        iff it is DU before the try block and the try block has no reachable
        assignments to v } {
    
    empty_class T16214duf5 {
	static final int i;
	static void m() { throw new RuntimeException(); }
	static {
	    try {
		i = 1;
		m();
		while (true);
	    } catch (RuntimeException e) {
		i = 2;
	    }
	}
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-6
v is DU before a finally block iff it is DU before the try block and the try block and all catch blocks have no reachable assignments to v

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-6 { v is DU before a finally block
        iff it is DU before the try block and the try block and all catch
        blocks have no reachable assignments to v } {
    
    empty_class T16214duf6 {
	static final int i;
	static void m() { throw new RuntimeException(); }
	static {
	    l: try {
		i = 1;
		m();
		while (true);
	    } finally {
		i = 2;
		break l;
	    }
	}
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-7
v is DU before a finally block iff it is DU before the try block and the try block and all catch blocks have no reachable assignments to v

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-7 { v is DU before a finally block
        iff it is DU before the try block and the try block and all catch
        blocks have no reachable assignments to v } {
    
    empty_class T16214duf7 {
	static final int i;
	static void m() { throw new RuntimeException(); }
	static {
	    try {
		i = 1;
		m();
		while (true);
	    } catch (RuntimeException e) {
	    } finally {
		i = 2;
	    }
	}
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-8
v is DU before a finally block iff it is DU before the try block and the try block and all catch blocks have no reachable assignments to v

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-8 { v is DU before a finally block
        iff it is DU before the try block and the try block and all catch
        blocks have no reachable assignments to v } {
    
    empty_class T16214duf8 {
	static final int i;
	static void m() { throw new RuntimeException(); }
	static {
	    l: try {
		m();
	    } catch (RuntimeException e) {
		i = 1;
		m();
		while (true);
	    } finally {
		i = 2;
		break l;
	    }
	}
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-9
the DA/DU status before a break is dependent on a finally that completes normally

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-9 { the DA/DU status before a
        break is dependent on a finally that completes normally } {
    
    empty_main T16214duf9 {
	final int i;
	while (true) {
	    l: {
		try {
		    if (true)
		        break l; // intervening finally assigns i
		} finally {
		    i = 1;
		}
		return;
	    }
	    // i multiply assigned in loop
	}
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-10
the DA/DU status before a break is dependent on a finally that completes normally

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-10 { the DA/DU status before a
        break is dependent on a finally that completes normally } {
    
    empty_main T16214duf10 {
	final int i;
	for ( ; ; ) {
	    l: {
		try {
		    if (true)
		        break l; // intervening finally assigns i
		} finally {
		    i = 1;
		}
		return;
	    }
	    // i multiply assigned in loop
	}
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-11
the DA/DU status before a break is dependent on a finally that completes normally

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-11 { the DA/DU status before a
        break is dependent on a finally that completes normally } {
    
    empty_main T16214duf11 {
	final int i;
	do
	    l: {
		try {
		    if (true)
		        break l; // intervening finally assigns i
		} finally {
		    i = 1;
		}
		return;
	    }
	    // i multiply assigned in loop
	while (true);
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-12
the DA/DU status before a break is dependent on a finally that completes normally

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-12 { the DA/DU status before a
        break is dependent on a finally that completes normally } {
    
    empty_main T16214duf12 {
	final int i;
	int j = 1;
	switch (j) {
	    case 0:
	    try {
		if (true)
		    break; // intervening finally assigns i
	    } finally {
		i = 1;
	    }
	    return;
	}
	i = 2; // i multiply assigned
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-13
the DA/DU status before a break is dependent on a finally that completes normally

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-13 { the DA/DU status before a
        break is dependent on a finally that completes normally } {
    
    empty_main T16214duf13 {
	final int i;
	l: {
	    try {
		if (true)
		    break l; // intervening finally assigns i
	    } finally {
		i = 1;
	    }
	    return;
	}
	i = 2; // i multiply assigned
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-14
the DA/DU status before a continue is dependent on a finally that completes normally

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-14 { the DA/DU status before a
        continue is dependent on a finally that completes normally } {
    
    empty_main T16214duf14 {
	final int i;
	while (true) {
	    try {
		if (true)
		    continue; // intervening finally assigns i
	    } finally {
		i = 1;
	    }
	    return;
	    // i multiply assigned in loop
	}
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-15
the DA/DU status before a continue is dependent on a finally that completes normally

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-15 { the DA/DU status before a
        continue is dependent on a finally that completes normally } {
    
    empty_main T16214duf15 {
	final int i;
	for ( ; ; ) {
	    try {
		if (true)
		    continue; // intervening finally assigns i
	    } finally {
		i = 1;
	    }
	    return;
	    // i multiply assigned in loop
	}
    }

} {FAIL}
Test Case: 16.2.14-definite-unassign-fail-16
the DA/DU status before a continue is dependent on a finally that completes normally

Expected Result: FAIL

Regression Test:

tcltest::test 16.2.14-definite-unassign-fail-16 { the DA/DU status before a
        continue is dependent on a finally that completes normally } {
    
    empty_main T16214duf16 {
	final int i;
	do {
	    try {
		if (true)
		    continue; // intervening finally assigns i
	    } finally {
		i = 1;
	    }
	    return;
	    // i multiply assigned in loop
	} while (true);
    }

} {FAIL}

16.5

Directory : tests/jls/definite-assignment/anonymous-classes


Test Case: 16.5-anonymous-1
V is DA before an anonymous class iff V is DA after the class instance creation expression

Expected Result: FAIL

Regression Test:

tcltest::test 16.5-anonymous-1 { V is DA before an anonymous class iff V is
        DA after the class instance creation expression } {
    
    empty_main T165a1 {
        final int v;
        new Object() {
            int i = v;
        };
    }

} {FAIL}
Test Case: 16.5-anonymous-2
V is DA before an anonymous class iff V is DA after the class instance creation expression

Expected Result: PASS

Regression Test:

tcltest::test 16.5-anonymous-2 { V is DA before an anonymous class iff V is
        DA after the class instance creation expression } {
    
    empty_main T165a2 {
        final int v;
        v = 1;
        new Object() {
            int i = v;
        };
    }

} {PASS}
Test Case: 16.5-anonymous-3
V is DA before an anonymous class iff V is DA after the class instance creation expression

Expected Result: PASS

Regression Test:

tcltest::test 16.5-anonymous-3 { V is DA before an anonymous class iff V is
        DA after the class instance creation expression } {
    
    empty_class T165a3 {
        T165a3(int j) {}
        void foo() {
            final int v;
            new T165a3(v = 1) {
                int i = v;
            };
        }
    }

} {PASS}

16.8

Directory : tests/jls/definite-assignment/constructors-and-instance-initializers


Test Case: 16.8-constructor-1
A blank final instance variable is DA after alternate constructor invocation

Expected Result: FAIL

Regression Test:

tcltest::test 16.8-constructor-1 { A blank final instance variable is DA
        after alternate constructor invocation } {
    
    empty_class T168c1 {
        final int i;
        T168c1() {
            this(1);
            i = 1;
        }
        T168c1(int i) {
            i = 1;
        }
    }

} {FAIL}
Test Case: 16.8-constructor-2
A blank final instance variable is DA after alternate constructor invocation

Expected Result: PASS

Regression Test:

tcltest::test 16.8-constructor-2 { A blank final instance variable is DA
        after alternate constructor invocation } {
    
    empty_class T168c2 {
        final int i;
        T168c2() {
            this(1);
        }
        T168c2(int j) {
            i = 1;
        }
    }

} {PASS}
Test Case: 16.8-constructor-3
A blank final instance variable is DA after superconstructor if it is DA after initializers

Expected Result: PASS

Regression Test:

tcltest::test 16.8-constructor-3 { A blank final instance variable is DA
        after superconstructor if it is DA after initializers } {
    
    empty_class T168c3 {
        final int i;
        static {}
        Object o = new Object();
        T168c3() {
            i = 1;
        }
    }

} {PASS}
Test Case: 16.8-constructor-4
A blank final instance variable is DA after superconstructor if it is DA after initializers

Expected Result: FAIL

Regression Test:

tcltest::test 16.8-constructor-4 { A blank final instance variable is DA
        after superconstructor if it is DA after initializers } {
    
    empty_class T168c4 {
        final int i;
        Object o = new Integer(i = 1);
        T168c4() {
            i = 1;
        }
    }

} {FAIL}
Test Case: 16.8-constructor-5
A blank final instance variable is DA after superconstructor if it is DA after initializers

Expected Result: FAIL

Regression Test:

tcltest::test 16.8-constructor-5 { A blank final instance variable is DA
        after superconstructor if it is DA after initializers } {
    
    empty_class T168c5 {
        final int i;
        Object o = new Object();
        { i = 1; }
        T168c5() {
            i = 1;
        }
    }

} {FAIL}
Test Case: 16.8-constructor-6
A blank final must be DU before assignment in an instance initializer

Expected Result: FAIL

Regression Test:

tcltest::test 16.8-constructor-6 { A blank final must be DU before assignment
        in an instance initializer } {
    
    empty_class T168c6 {
	final int i;
	{ if (false) i = 1; }
	int j = i = 1;
    }

} {FAIL}
Test Case: 16.8-constructor-7
A blank final must be DU before assignment in an instance initializer

Expected Result: FAIL

Regression Test:

tcltest::test 16.8-constructor-7 { A blank final must be DU before assignment
        in an instance initializer } {
    
    empty_class T168c7 {
	final int i;
	{ if (false) i = 1; }
	{ i = 1; }
    }

} {FAIL}
Test Case: 16.8-constructor-8
A blank final must be DU before assignment in a constructor

Expected Result: FAIL

Regression Test:

tcltest::test 16.8-constructor-8 { A blank final must be DU before assignment
        in a constructor } {
    
    empty_class T168c8 {
	final int i;
	{ if (false) i = 1; }
	T168c8() { i = 1; }
    }

} {FAIL}
Test Case: 16.8-constructor-9
A blank final must be DA after every constructor

Expected Result: FAIL

Regression Test:

tcltest::test 16.8-constructor-9 { A blank final must be DA after every
        constructor } {
    
    empty_class T168c9 {
	final int i;
	{ if (false) i = 1; }
	T168c9() { if (false) i = 1; }
    }

} {FAIL}
Test Case: 16.8-parameter-1
Final parameters may not be assigned in a constructor

Expected Result: FAIL

Regression Test:

tcltest::test 16.8-parameter-1 { Final parameters may not be assigned in a
        constructor } {
    
    empty_class T168p1 {
	class Super {
	    Super(int i) {}
	}
	class Sub extends Super {
	    Sub(final int i) {
		super(i = 1);
	    }
	}
    }

} {FAIL}
Test Case: 16.8-parameter-2
Final parameters may not be assigned in a constructor

Expected Result: FAIL

Regression Test:

tcltest::test 16.8-parameter-2 { Final parameters may not be assigned in a
        constructor } {
    
    empty_class T168p2 {
	T168p2(int i) {}
	T168p2(final short s) {
	    this((int) (s = 1));
	}
    }

} {FAIL}
Test Case: 16.8-parameter-3
Final parameters may not be assigned in a constructor

Expected Result: FAIL

Regression Test:

tcltest::test 16.8-parameter-3 { Final parameters may not be assigned in a
        constructor } {
    
    empty_class T168p3 {
	class Super {}
	class Sub extends Super {
	    Sub(final boolean b) {
		((b = true) ? new T168p3() : null).super();
	    }
	}
    }

} {FAIL}

try-statement

Directory : tests/jls/blocks-and-statements/try-statement


Test Case: 14.19.exception-1
checked exceptions must be caught or declared

Expected Result: FAIL

Regression Test:

tcltest::test 14.19.exception-1 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e1 {
	void m() {
	    try {
		throw new Exception();
	    } catch (RuntimeException e) {
	    }
	}
    }

} {FAIL}
Test Case: 14.19.exception-2
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-2 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e2 {
	void m() throws Exception {
	    try {
		throw new Exception();
	    } catch (RuntimeException e) {
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-3
checked exceptions must be caught or declared

Expected Result: FAIL

Regression Test:

tcltest::test 14.19.exception-3 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e3 {
	void m() {
	    try {
		throw new Exception();
	    } finally {
	    }
	}
    }

} {FAIL}
Test Case: 14.19.exception-4
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-4 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e4 {
	void m() throws Exception {
	    try {
		throw new Exception();
	    } finally {
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-5
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-5 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e5 {
	void m() {
	    try {
		throw new Exception();
	    } catch (Exception e) {
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-6
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-6 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e6 {
	void m() {
	    try {
		throw new Exception();
	    } catch (Exception e) {
	    } finally {
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-7
checked exceptions must be caught or declared

Expected Result: FAIL

Regression Test:

tcltest::test 14.19.exception-7 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e7 {
	void m() {
	    try {
		throw new Exception();
	    } catch (Exception e) {
		throw e;
	    }
	}
    }

} {FAIL}
Test Case: 14.19.exception-8
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-8 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e8 {
	void m() throws Exception {
	    try {
		throw new Exception();
	    } catch (Exception e) {
		throw e;
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-9
checked exceptions must be caught or declared

Expected Result: FAIL

Regression Test:

tcltest::test 14.19.exception-9 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e9 {
	void m() {
	    try {
		throw new Exception();
	    } catch (Exception e) {
		throw e;
	    } finally {
	    }
	}
    }

} {FAIL}
Test Case: 14.19.exception-10
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-10 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e10 {
	void m() throws Exception {
	    try {
		throw new Exception();
	    } catch (Exception e) {
		throw e;
	    } finally {
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-11
checked exceptions must be caught or declared

Expected Result: FAIL

Regression Test:

tcltest::test 14.19.exception-11 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e11 {
	void m() {
	    try {
	    } finally {
		throw new Exception();
	    }
	}
    }

} {FAIL}
Test Case: 14.19.exception-12
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-12 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e12 {
	void m() throws Exception {
	    try {
	    } finally {
		throw new Exception();
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-13
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-13 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e13 {
	void m() {
	    try {
		throw new Exception();
	    } finally {
		return;
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-14
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-14 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e14 {
	void m() {
	    a:
	    try {
		throw new Exception();
	    } finally {
		break a;
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-15
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-15 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e15 {
	void m() {
	    a: do
	    try {
		throw new Exception();
	    } finally {
		continue a;
	    }
	    while (false);
	}
    }

} {PASS}
Test Case: 14.19.exception-16
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-16 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e16 {
	void m() {
	    try {
		try {
		    throw new Exception();
		} finally {
		    throw new RuntimeException();
		}
	    } catch (RuntimeException e) {
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-17
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-17 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e17 {
	void m() {
	    try {
		throw new Exception();
	    } catch (Exception e) {
	    } finally {
		return;
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-18
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-18 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e18 {
	void m() {
	    a:
	    try {
		throw new Exception();
	    } catch (Exception e) {
	    } finally {
		break a;
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-19
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-19 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e19 {
	void m() {
	    a: do
	    try {
		throw new Exception();
	    } catch (Exception e) {
	    } finally {
		continue a;
	    }
	    while (false);
	}
    }

} {PASS}
Test Case: 14.19.exception-20
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-20 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e20 {
	void m() {
	    try {
		try {
		    throw new Exception();
		} catch (Exception e) {
		} finally {
		    throw new RuntimeException();
		}
	    } catch (RuntimeException e) {
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-21
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-21 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e21 {
	void m() {
	    try {
		throw new Exception();
	    } catch (Exception e) {
		throw e;
	    } finally {
		return;
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-22
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-22 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e22 {
	void m() {
	    a:
	    try {
		throw new Exception();
	    } catch (Exception e) {
		throw e;
	    } finally {
		break a;
	    }
	}
    }

} {PASS}
Test Case: 14.19.exception-23
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-23 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e23 {
	void m() {
	    a: do
	    try {
		throw new Exception();
	    } catch (Exception e) {
		throw e;
	    } finally {
		continue a;
	    }
	    while (false);
	}
    }

} {PASS}
Test Case: 14.19.exception-24
checked exceptions must be caught or declared

Expected Result: PASS

Regression Test:

tcltest::test 14.19.exception-24 { checked exceptions must be caught or
        declared } {
    
    empty_class T1419e24 {
	void m() {
	    try {
		try {
		    throw new Exception();
		} catch (Exception e) {
		    throw e;
		} finally {
		    throw new RuntimeException();
		}
	    } catch (RuntimeException e) {
	    }
	}
    }

} {PASS}

runtime tests


3.10.1

Directory : tests/runtime/jls/lexical-structure/literals/integer-literals


Test Case: 3.10.1-runtime-endianness-1
Detect if endianness is wrong

Expected Result: OK

Regression Test:

tcltest::test 3.10.1-runtime-endianness-1 { Detect if endianness
        is wrong } {
    
    compile_and_run [saveas T3101re1.java {
class T3101re1 {
    public static void main(String[] args) {
        long l1 = 0x1111111122222222L;
        long l2 = 0x2222222211111111L;
        if (l1 < l2) {
            System.out.print("OK");
        } else {
            System.out.print("Wrong endianness");
        }
    }
}
    }]

} {OK}

3.10.2

Directory : tests/runtime/jls/lexical-structure/literals/floating-point-literals


Test Case: 3.10.2-runtime-endianness-1
Detect if endianness is backward

Expected Result: OK

Regression Test:

tcltest::test 3.10.2-runtime-endianness-1 { Detect if endianness
        is backward } {
    
    compile_and_run [saveas T3102re1.java {
class T3102re1 {
    public static void main(String[] args) {
        double d1 = Double.longBitsToDouble(0x3ff8000000000000L);
        double d2 = Double.longBitsToDouble(0x000000003ff80000L);
        // compare d1 and d2, to make sure endianness of longs
        // was not wrong, either
        if (d1 == 1.5 && d1 > d2) {
            System.out.print("OK");
        } else if (d2 == 1.5 || d1 < d2) {
            System.out.print("Wrong endianness");
        } else {
            System.out.print("Unexpected result");
        }
    }
}
    }]

} {OK}

3.10.4

Directory : tests/runtime/jls/lexical-structure/literals/character-literals


Test Case: 3.10.4-runtime-coalescense-1
Ensure that characters are correctly coalesced into strings, even when the compiler can apply optimizations on constant values.

Expected Result: OK O1

Regression Test:

tcltest::test 3.10.4-runtime-coalescense-1 { Ensure that characters are
        correctly coalesced into strings, even when the compiler can
        apply optimizations on constant values. } {
    
    compile_and_run [saveas T3104rc1.java {
class T3104rc1 {
    public static void main(String [] args) {
	String s = " ";
	System.out.print(s + 'O' + "K");
	System.out.print(s + 'O' + 1);
    }
}
    }]

} { OK O1}

3.10.5

Directory : tests/runtime/jls/lexical-structure/literals/string-literals


Test Case: 3.10.5-runtime-1
Compile-time constant string expressions, and String.intern(), are == String objects

Expected Result: true true true true false true

Regression Test:

tcltest::test 3.10.5-runtime-1 { Compile-time constant string
        expressions, and String.intern(), are == String objects
        } {
    
    saveas testPackage/T3105r1.java {
package testPackage;
  class T3105r1 {
      public static void main(String[] args) {   
        String hello = "Hello", lo = "lo";
        System.out.print((hello == "Hello") + " ");
        System.out.print((Other1.hello == hello) + " ");
        System.out.print((other.Other.hello == hello) + " ");
        System.out.print((hello == ("Hel"+"lo")) + " ");
        System.out.print((hello == ("Hel"+lo)) + " ");
        System.out.print(hello == ("Hel"+lo).intern());
      }
}
class Other1 { static String hello = "Hello"; }
    }

    saveas other/Other.java {
package other;
public class Other { public static String hello = "Hello"; }
    }

    compile_and_run other/Other.java testPackage/T3105r1.java

} {true true true true false true}

4.10

Directory : tests/runtime/jvms/class-file-format/limitations


Test Case: 4.10-jvms-runtime-1
Check that all the jvms tests that should compile actually produce valid class files

Expected Result: 4:OK 6:OK

Regression Test:

tcltest::test 4.10-jvms-runtime-1 { Check that all the jvms tests that should
        compile actually produce valid class files } {
    
# First, compile 4.10-jvms-4
    set buff ""
    set interfaces 7
    set over 10000
    for {set j 0} {$j < $interfaces} {incr j} {
	append buff "interface T410jvms4_${j} \{\n"
	for {set i 0} {$i < $over} {incr i} {
	    append buff "\tint v${j}_${i} = 1;\n"
	}
	append buff "\}\n"
    }

    append buff "public class T410jvms4 implements T410jvms4_0"
    for {set j 1} {$j < $interfaces} {incr j} {
        append buff ",\n\tT410jvms4_${j}"
    }

    append buff " \{\n\t\tint v = 1;\n\}\n"

    compile [saveas T410jvms4.java $buff]

# Next, compile 4.10-jvms-6
    set buff ""
    set interfaces 7
    set over 10000
    for {set j 0} {$j < $interfaces} {incr j} {
	append buff "interface T410jvms6_${j} \{\n"
	for {set i 0} {$i < $over} {incr i} {
	    append buff "\tint m${j}_${i}();\n"
	}
	append buff "\}\n"
    }

    append buff "public abstract class T410jvms6 implements T410jvms6_0"
    for {set j 1} {$j < $interfaces} {incr j} {
        append buff ",\n\tT410jvms6_${j}"
    }

    append buff " \{\n\t\tvoid m() \{\}\n\}\n"

    compile [saveas T410jvms6.java $buff]

# Now, check that those tests passed
    compile_and_run [saveas T410jr1.java {
class T410jr1 {
    public static void main(String[] args) {
	try {
	    // Exploit fact that Class.forName causes class initialization,
	    // which runs the verifier to see if the class compiled successfully
	    Class.forName("T410jvms4");
	    Class.forName("T410jvms4_0");
	    Class.forName("T410jvms4_1");
	    Class.forName("T410jvms4_2");
	    Class.forName("T410jvms4_3");
	    Class.forName("T410jvms4_4");
	    Class.forName("T410jvms4_5");
	    Class.forName("T410jvms4_6");
	    System.out.print("4:OK ");
	} catch (ClassNotFoundException e) {
	    System.out.print("4:inconclusive ");
	} catch (Error e) {
	    System.out.print("4:failed(" + e + ") ");
	}
	try {
// Thanks to a nice infinite loop bug in java 1.4.1, do not test this class.
//	    Class.forName("T410jvms6");

	    Class.forName("T410jvms6_0");
	    Class.forName("T410jvms6_1");
	    Class.forName("T410jvms6_2");
	    Class.forName("T410jvms6_3");
	    Class.forName("T410jvms6_4");
	    Class.forName("T410jvms6_5");
	    Class.forName("T410jvms6_6");
	    System.out.print("6:OK ");
	} catch (ClassNotFoundException e) {
	    System.out.print("6:inconclusive ");
	} catch (Error e) {
	    System.out.print("6:failed(" + e + ") ");
	}
    }
}
    }]

} {4:OK 6:OK }

6.6.1

Directory : tests/runtime/jls/classes/constructor-declarations/constructor-access


Test Case: 6.6.1-runtime-privateconstructor-1
Private constructors are accessible from within the body of the top level class that encloses the constructor

Expected Result: OK

Regression Test:

tcltest::test 6.6.1-runtime-privateconstructor-1 { Private constructors
        are accessible from within the body of
        the top level class that encloses the
        constructor  } {
    

    saveas T661rpc1.java {
public class T661rpc1 {
class T661rpc1_innersuper {
    private T661rpc1_innersuper() { }
}
class T661rpc1_inner extends T661rpc1_innersuper {
    T661rpc1_inner() { super(); }
}
public static void main(String[] args) {
    new T661rpc1().new T661rpc1_inner();
    System.out.print("OK");
}
}
    }
    compile_and_run T661rpc1.java

} {OK}

8.1.2

Directory : tests/runtime/jls/classes/class-declaration/inner-classes-and-enclosing-instances


Test Case: 8.1.2-runtime-1
Stress test of accessing a final local variable through 2 layers of nested local/anonymous classes

Expected Result: 1

Regression Test:

tcltest::test 8.1.2-runtime-1 { Stress test of accessing a final local variable
        through 2 layers of nested local/anonymous classes } {
    
    compile_and_run [saveas T812r1.java {
class T812r1 {
    public static void main(String[] args) {
        new T812r1().foo(1);
    }
    void foo(final int i) {
        class Local {
            Local() {}
            Local(int i) { this(); }
            int foo() {
                return new Local(0) {
                    int j = i;
                }.j;
            }
        }
        System.out.print(new Local().foo());
    }
}
}]

} {1}

8.3

Directory : tests/runtime/jls/classes/field-declarations


Test Case: 8.3-runtime-1
Test access to an accessible, but non-inherited, private field

Expected Result: 1 2 null

Regression Test:

tcltest::test 8.3-runtime-1 { Test access to an accessible, but non-inherited,
        private field } {
    
    compile_and_run [saveas T83r1.java {
class T83r1 {
    static int init;
    public int i = ++init;
    class One extends T83r1 {
	private Object i; // does not inherit T83r1.i, but does hide it
    }
    class Two extends One {
	// does not inherit either i
	Two() {
	    T83r1.this.super();
	}
	int j = i; // enclosing access
	int k = ((T83r1) this).i; // access of hidden field
	Object l = super.i; // access of private field
    }
    public static void main(String[] args) {
	Two t = new T83r1().new Two();
	System.out.print(t.j + " " + t.k + " " + t.l);
    }
}
    }]

} {1 2 null}

8.4.6

Directory : tests/runtime/jls/classes/method-declarations/inheritance-overriding-and-hiding


Test Case: 8.4.6-runtime-miranda-1
Abstract classes no longer need Miranda methods (generated place-holders in classes which inherit an abstract method from an interface without overriding it)

Expected Result: OK

Regression Test:

tcltest::test 8.4.6-runtime-miranda-1 { Abstract classes no longer need Miranda
        methods (generated place-holders in classes which inherit an abstract
        method from an interface without overriding it) } {
    
    compile_and_run [saveas T846rm1c.java {
interface T846rm1a {
    void m();
}
abstract class T846rm1b implements T846rm1a {}
abstract class T846rm1c extends T846rm1b implements T846rm1a {
    public static void main(String[] args) {
        boolean ok = true;
        try {
            T846rm1a.class.getDeclaredMethod("m", null);
        } catch (Exception e) {
            System.out.println("missing m() in class a");
            ok = false;
        }
        try {
            T846rm1b.class.getDeclaredMethod("m", null);
            System.out.println("bogus Miranda m() in class b");
            ok = false;
        } catch (Exception e) {
        }
        try {
            T846rm1c.class.getDeclaredMethod("m", null);
            System.out.println("bogus Miranda m() in class c");
            ok = false;
        } catch (Exception e) {
        }
        if (ok) System.out.print("OK");
    }
}
}]

} {OK}

8.4.6.4

Directory : tests/runtime/jls/classes/method-declarations/inheritance-overriding-and-hiding


Test Case: 8.4.6.4-multiple-runtime-1
It is possible to have access to multiple methods, when one is not inherited across package boundaries. The VM is required to bypass polymorphism from classes that cannot access the specified method

Expected Result: 1 2

Regression Test:

tcltest::test 8.4.6.4-multiple-runtime-1 { It is possible to have access to
        multiple methods, when one is not inherited across package boundaries.
        The VM is required to bypass polymorphism from classes that cannot
        access the specified method } {
    
    compile_and_run [saveas p2/T8464mr1b.java {
package p2;
public class T8464mr1b extends p1.T8464mr1a {
    public int m() { return 2; }
}
    }] [saveas p1/T8464mr1a.java {
package p1;
public class T8464mr1a {
    int m() { return 1; }
    public static void main(String[] args) {
	T8464mr1c c = new T8464mr1c();
	T8464mr1a a = c;
	System.out.print(a.m() + " " + c.m());
    }
}
class T8464mr1c extends p2.T8464mr1b {
    // inherits b.m(), but it does not override a.m()
}
    }]

} {1 2}

8.8.3

Directory : tests/runtime/jls/classes/constructor-declarations/constructor-modifiers


Test Case: 8.8.3-runtime-inner-1
no modifier for inner class constructor

Expected Result: OK

Regression Test:

tcltest::test 8.8.3-runtime-inner-1 { no modifier for inner class
        constructor } {
    

    compile_and_run [saveas T883ri1.java {
class T883ri1 {
    class Inner {
        Inner() {}
    }
    public static void main(String[] args) {
        new T883ri1().new Inner();
        System.out.print("OK");
    }
}
    }]

} {OK}
Test Case: 8.8.3-runtime-inner-2
modifier for inner class constructor

Expected Result: OK

Regression Test:

tcltest::test 8.8.3-runtime-inner-2 { modifier for inner class
        constructor } {
    

    compile_and_run [saveas T883ri2.java {
class T883ri2 {
    class Inner {
        public Inner() {}
    }
    public static void main(String[] args) {
        new T883ri2().new Inner();
        System.out.print("OK");
    }
}
    }]

} {OK}
Test Case: 8.8.3-runtime-inner-3
modifier for inner class constructor

Expected Result: OK

Regression Test:

tcltest::test 8.8.3-runtime-inner-3 { modifier for inner class
        constructor } {
    

    compile_and_run [saveas T883ri3.java {
class T883ri3 {
    class Inner {
        protected Inner() {}
    }
    public static void main(String[] args) {
        new T883ri3().new Inner();
        System.out.print("OK");
    }
}
    }]

} {OK}
Test Case: 8.8.3-runtime-inner-4
modifier for inner class constructor

Expected Result: OK

Regression Test:

tcltest::test 8.8.3-runtime-inner-4 { modifier for inner class
        constructor } {
    

    compile_and_run [saveas T883ri4.java {
class T883ri4 {
    class Inner {
        private Inner() {}
    }
    public static void main(String[] args) {
        new T883ri4().new Inner();
        System.out.print("OK");
    }
}
    }]

} {OK}

8.8.5

Directory : tests/runtime/jls/classes/constructor-declarations/constructor-body


Test Case: 8.8.5-runtime-inner-1
invoke ctor of inner class

Expected Result: OK

Regression Test:

tcltest::test 8.8.5-runtime-inner-1 { invoke ctor of inner class } {
    

    compile_and_run [saveas T885ri1.java {
class T885ri1 {
    class Inner {
        Inner() {}
    }
    public static void main(String[] args) {
        new T885ri1().new Inner();
        System.out.print("OK");
    }
}
    }]

} {OK}
Test Case: 8.8.5-runtime-inner-2
invoke ctor of inner class

Expected Result: OK

Regression Test:

tcltest::test 8.8.5-runtime-inner-2 { invoke ctor of inner class } {
    

    compile_and_run [saveas T885ri2.java {
class T885ri2 {
    class Inner {
        Inner(int i) {}
    }
    public static void main(String[] args) {
        new T885ri2().new Inner(1);
        System.out.print("OK");
    }
}
    }]

} {OK}
Test Case: 8.8.5-runtime-inner-3
invoke ctor of inner class

Expected Result: OK

Regression Test:

tcltest::test 8.8.5-runtime-inner-3 { invoke ctor of inner class } {
    

    compile_and_run [saveas T885ri3.java {
class T885ri3 {
    class Inner {
        Inner() {}
        Inner(int i) {}
    }
    public static void main(String[] args) {
        new T885ri3().new Inner(1);
        System.out.print("OK");
    }
}
    }]

} {OK}
Test Case: 8.8.5-runtime-inner-4
invoke ctor of inner class

Expected Result: OK

Regression Test:

tcltest::test 8.8.5-runtime-inner-4 { invoke ctor of inner class } {
    

    compile_and_run [saveas T885ri4.java {
class T885ri4 {
    class Inner {
        Inner() {}
        Inner(int i) { this(); }
    }
    public static void main(String[] args) {
        new T885ri4().new Inner(1);
        System.out.print("OK");
    }
}
    }]

} {OK}

8.8.7

Directory : tests/runtime/jls/classes/constructor-declarations/default-constructor


Test Case: 8.8.7-runtime-default-1
If a class contains no constructor declarations, then a default constructor that takes no parameters and invokes the superclass constructor with no arguments is provided

Expected Result: super main

Regression Test:

tcltest::test 8.8.7-runtime-default-1 { If a class
        contains no constructor declarations,
        then a default constructor that takes
        no parameters and invokes the superclass
        constructor with no arguments is provided } {
    

    saveas T887rd1.java {
class  T887rd1_super {
    T887rd1_super() { System.out.print("super "); }
}
public class T887rd1 extends T887rd1_super {
    public static void main(String[] argv) {
        new T887rd1();
        System.out.print("main");
    }
}
    }

    compile_and_run T887rd1.java

} {super main}
Test Case: 8.8.7-runtime-default-2
If a class contains no constructor declarations, then a default constructor that takes no parameters and invokes the superclass constructor with no arguments is provided

Expected Result: super super main

Regression Test:

tcltest::test 8.8.7-runtime-default-2 { If a class
        contains no constructor declarations,
        then a default constructor that takes
        no parameters and invokes the superclass
        constructor with no arguments is provided } {
    

    saveas T887rd2.java {
class  T887rd2_super {
    T887rd2_super() { System.out.print("super "); }
}
public class T887rd2 extends T887rd2_super {
    public static void main(String[] argv) {
        new T887rd2().toString();
        (new T887rd2()).toString();
        System.out.print("main");
    }
}
    }

    compile_and_run T887rd2.java

} {super super main}
Test Case: 8.8.7-runtime-default-3
If a class contains no constructor declarations, then a default constructor that takes no parameters and invokes the superclass constructor with no arguments is provided

Expected Result: super + super main

Regression Test:

tcltest::test 8.8.7-runtime-default-3 { If a class
        contains no constructor declarations,
        then a default constructor that takes
        no parameters and invokes the superclass
        constructor with no arguments is provided } {
    

    saveas T887rd3.java {
class  T887rd3_super {
    T887rd3_super() { System.out.print("super "); }
}
public class T887rd3 {

    private static class Inner extends T887rd3_super {}

    public static void main(String[] argv) {
        new Inner().toString();
        System.out.print("+ ");
        (new Inner()).toString();
        System.out.print("main");
    }
}
    }

    compile_and_run T887rd3.java

} {super + super main}
Test Case: 8.8.7-runtime-accessible-default-1
The private superconstructor is accessible by default constructors contained in the same class

Expected Result: super super super super super super main

Regression Test:

tcltest::test 8.8.7-runtime-accessible-default-1 { The private
        superconstructor is accessible by default constructors
        contained in the same class } {
    
    saveas T887rad1.java {
class T887rad1 {
    private T887rad1() {
        System.out.print("super ");
    }
    static class Static extends T887rad1 {}
    class Inner extends T887rad1 {}
    void foo() {
        class InnerLocal extends T887rad1 {}
        new InnerLocal();
        new T887rad1() {};
    }
    static void bar() {
        class StaticLocal extends T887rad1 {}
        new StaticLocal();
        new T887rad1() {};
    }
    public static void main(String[] args) {
        T887rad1 t = new Static();
        t.new Inner();
        t.foo();
        bar();
        System.out.print("main");
    }
}
    }
    compile_and_run T887rad1.java

} {super super super super super super main}

12.4.1

Directory : tests/runtime/jls/execution/initialization-of-classes-and-interfaces/when-initialization-occurs


Test Case: 12.4.1-runtime-1
Class initialization does not occur from instance field access, or from constant variable access, even when the access is not a constant expression

Expected Result: 1 2 3 4

Regression Test:

tcltest::test 12.4.1-runtime-1 { Class initialization does not occur from
        instance field access, or from constant variable access, even when
        the access is not a constant expression } {
    
    compile_and_run [saveas T1241r1b.java {
class T1241r1a {
    final int i = 1;
    static final int j = 1;
    static { System.out.print("3 "); }
}
class T1241r1b {
    public static void main(String[] args) {
	T1241r1a a = null;
	System.out.print(a.j + " ");
	try {
	    System.out.print(a.i);
	} catch (Exception e) {
	    System.out.print("2 ");
	    a = new T1241r1a();
	    System.out.print(a.i + 3);
	}
    }
}
    }]

} {1 2 3 4}
Test Case: 12.4.1-runtime-2
Class literals may not cause class initialization. Note that this is debatable, as it is not specified in the JLS, but Sun bug 4419673, as clarified by Neal Gafter in jacks bug 3109, is arguing that the JLS is correct as stands.

Expected Result: OK

Regression Test:

tcltest::test 12.4.1-runtime-2 { Class literals may not cause class
        initialization. Note that this is debatable, as it is not specified
        in the JLS, but Sun bug 4419673, as clarified by Neal Gafter in jacks
        bug 3109, is arguing that the JLS is correct as stands. } {
    
    compile_and_run [saveas T1241r2b.java {
class T1241r2a {
    static { System.out.print(" oops "); }
}
class T1241r2b {
    public static void main(String[] args) {
	System.out.print('O');
	T1241r2a.class.toString();
	System.out.print('K');
    }
}
    }]

} {OK}
Test Case: 12.4.1-runtime-3
Class literals may not cause class initialization. Note that this is debatable, as it is not specified in the JLS, but Sun bug 4419673, as clarified by Neal Gafter in jacks bug 3109, is arguing that the JLS is correct as stands.

Expected Result: OK

Regression Test:

tcltest::test 12.4.1-runtime-3 { Class literals may not cause class
        initialization. Note that this is debatable, as it is not specified
        in the JLS, but Sun bug 4419673, as clarified by Neal Gafter in jacks
        bug 3109, is arguing that the JLS is correct as stands. } {
    
    compile_and_run [saveas T1241r3b.java {
class T1241r3a {
    static { System.out.print(" oops "); }
    static class Inner {
	static Class c = Inner.class;
    }
}
class T1241r3b {
    public static void main(String[] args) {
	System.out.print('O');
	T1241r3a.Inner.c = null;
	System.out.print('K');
	T1241r3a.Inner.c = T1241r3a.class;
    }
}
    }]

} {OK}
Test Case: 12.4.1-runtime-4
Class literals may not cause class initialization. Note that this is debatable, as it is not specified in the JLS, but Sun bug 4419673, as clarified by Neal Gafter in jacks bug 3109, is arguing that the JLS is correct as stands.

Expected Result: OK

Regression Test:

tcltest::test 12.4.1-runtime-4 { Class literals may not cause class
        initialization. Note that this is debatable, as it is not specified
        in the JLS, but Sun bug 4419673, as clarified by Neal Gafter in jacks
        bug 3109, is arguing that the JLS is correct as stands. } {
    
    compile_and_run [saveas T1241r4b.java {
interface T1241r4a {
    int i = new Object() {
	{ System.out.print(" oops "); }
	int i = 1;
    }.i;
    class Inner {
	static Class c = Inner.class;
    }
}
class T1241r4b {
    public static void main(String[] args) {
	System.out.print('O');
	T1241r4a.Inner.c = null;
	System.out.print('K');
	T1241r4a.Inner.c = T1241r4a.class;
    }
}
    }]

} {OK}

12.4.2

Directory : tests/runtime/jls/execution/initialization-of-classes-and-interfaces/detailed-initialization-procedure


Test Case: 12.4.2-runtime-1
A compiler must emit an initializer of a non-constant class variable, even if the initializer is known to be the default value of the variable

Expected Result: 0 null

Regression Test:

tcltest::test 12.4.2-runtime-1 { A compiler must emit an initializer of a
        non-constant class variable, even if the initializer is known to
        be the default value of the variable } {
    
    compile_and_run [saveas T1242r3b.java {
class T1242r3a {
    static {
        T1242r3b.i = 1;
        T1242r3b.s = "oops";
    }
}
class T1242r3b extends T1242r3a {
    static int i = 0;
    static String s = null;
    public static void main(String[] args) {
        System.out.print(i + " " + s);
    }
}
}]

} {0 null}

12.5

Directory : tests/runtime/jls/execution/creation-of-new-class-instances


Test Case: 12.5-runtime-1
Variable initializers are executed after the explicit or implicit superclass constructor, but before all other statements of the constructor

Expected Result: A 1 1

Regression Test:

tcltest::test 12.5-runtime-1 { Variable initializers are executed after the
        explicit or implicit superclass constructor, but before all
        other statements of the constructor } {
    
    compile_and_run [saveas T125r1.java {
class Super {
    Super(int x) {
        method(x);
    }

    void method(int x) { }
}
class T125r1 extends Super {
    private int i1 = 1;
    private Integer i2 = new Integer(1);
    void method(int x) {
        i1 = x;
        i2 = new Integer(x);
        System.out.print("A ");
    }
    T125r1() {
        super(2); // superclass calls method()
    }
    public static void main(String[] args) {
        T125r1 t = new T125r1();
        System.out.print(t.i1 + " " + t.i2);
    }
}
    }]

} {A 1 1}
Test Case: 12.5-runtime-2
Example in JLS

Expected Result: 03

Regression Test:

tcltest::test 12.5-runtime-2 { Example in JLS } {
    
    compile_and_run [saveas T125r2.java {
class Super {
    Super() { printThree(); }
    void printThree() { System.out.println("three"); }
}
class T125r2 extends Super {
    int three = (int)Math.PI;  // That is, 3
    public static void main(String[] args) {
        T125r2 t = new T125r2();
        t.printThree();
    }
    void printThree() { System.out.print(three); }
}
    }]

} {03}
Test Case: 12.5-runtime-3
A compiler must emit an initializer of a non-constant instance variable, even if the initializer is known to be the default value of the variable

Expected Result: 0 null

Regression Test:

tcltest::test 12.5-runtime-3 { A compiler must emit an initializer of a
        non-constant instance variable, even if the initializer is known to
        be the default value of the variable } {
    
    compile_and_run [saveas T125r3b.java {
class T125r3a {
    T125r3a() { m(); }
    void m() {}
}
class T125r3b extends T125r3a {
    int i = 0;
    String s = null;
    void m() {
        i = 1;
        s = "oops";
    }
    public static void main(String[] args) {
        T125r3b t = new T125r3b();
        System.out.print(t.i + " " + t.s);
    }
}
}]

} {0 null}

13.1

Directory : tests/runtime/jls/binary-compatibility/form-of-binary


Test Case: 13.1-runtime-constant-1
A constant variable must never appear to have it's initial value, even when accessed in a non-constant expression

Expected Result: 1

Regression Test:

tcltest::test 13.1-runtime-constant-1 { A constant variable must never
        appear to have it's initial value, even when accessed in a
        non-constant expression } {
    
    compile_and_run [saveas T131c1.java {
class T131c1 {
    int m(T131c1 t) { return t.i; }
    int j = m(this);
    final int i = 1;
    public static void main(String[] args) {
	System.out.print(new T131c1().j);
    }
}
    }]

} {1}
Test Case: 13.1-runtime-constant-2
A constant variable must never appear to have it's initial value, even when accessed in a non-constant expression

Expected Result: 1

Regression Test:

tcltest::test 13.1-runtime-constant-2 { A constant variable must never
        appear to have it's initial value, even when accessed in a
        non-constant expression } {
    
    compile_and_run [saveas T131c2.java {
class T131c2 {
    static int m(T131c2 t) { return t.i; }
    static int j = m(new T131c2());
    static final int i = 1;
    public static void main(String[] args) {
	System.out.print(j);
    }
}
    }]

} {1}
Test Case: 13.1-runtime-constant-3
A constant variable must be inlined without reference to the original class; hence, it can be deleted from the original class and the code still works

Expected Result: 3

Regression Test:

tcltest::test 13.1-runtime-constant-3 { A constant variable must be inlined
        without reference to the original class; hence, it can be deleted from
        the original class and the code still works } {
    
    compile [saveas T131rc3a.java {
class T131rc3a {
    static final int i = 1;
    final int j = 2;
}
class T131rc3b {
    static void m(T131rc3a t) {
	System.out.print(t.i + t.j);
    }
}
    }]
    compile_and_run -classpath . [saveas T131rc3a.java {
class T131rc3a {
    public static void main(String[] args) {
	T131rc3b.m(new T131rc3a());
    }
    // Notice that i and j no longer exist
}
    }]

} {3}
Test Case: 13.1-runtime-field-1
A field reference must include the (implicit) qualifier of the expression it was in

Expected Result: 4 3 4 3

Regression Test:

tcltest::test 13.1-runtime-field-1 { A field reference must include the
        (implicit) qualifier of the expression it was in } {
    
    compile [saveas T131rc3a.java {
class T131rf1a {
    static int i = "a".length();
}
interface T131rf1b {
    int j = "ab".length();
}
class T131rf1c extends T131rf1a implements T131rf1b {
    static void m() {
	System.out.print(i + " " + j + " " + T131rf1c.i + " " + T131rf1c.j);
    }
}
    }]
    compile_and_run -classpath . [saveas T131rf1a.java {
class T131rf1a {
    public static void main(String[] args) {
	T131rf1c.m();
    }
    // Notice that i and j have swapped locations and values in supertypes of c
    static int j = "abc".length();
}
interface T131rf1b {
    int i = "abcd".length();
}
    }]

} {4 3 4 3}

14

Directory : tests/runtime/jls/blocks-and-statements


Test Case: 14-runtime-jump-1
Generic test of large goto_w (can occur in for, if, while, do, switch, try, break, and continue)

Expected Result: OK

Regression Test:

tcltest::test 14-runtime-jump-1 { Generic test of large
        goto_w (can occur in for, if, while, do,
        switch, try, break, and continue) } {
    
    set class_data "
class T14rj1 \{
    public static void main(String\[\] args) \{
        int i = 1;
        for (int j = 0; j < 2; j++) \{\n"
    set count 0
    while {$count < 3500} {
        append class_data "\t    i = 366 * i % 534;\n"
        incr count
    }
    append class_data "\t\}
        if (i == 210)
            System.out.print(\"OK\");
        else
            System.out.print(\"FAIL\");
    \}
\}\n"
    compile_and_run [saveas T14rj1.java $class_data]

} {OK}
Test Case: 14-runtime-jump-2
Generic test of large goto_w (can occur in for, if, while, do, switch, try, break, and continue)

Expected Result: OK

Regression Test:

tcltest::test 14-runtime-jump-2 { Generic test of large
        goto_w (can occur in for, if, while, do,
        switch, try, break, and continue) } {
    
    set class_data "
class T14rj2 \{
    public static void main(String\[\] args) \{
        int i = 1;
        int j = 0;
        Object o = null;
        while (o == null) \{
            if (++j == 2) o = \"\";\n"
    set count 0
    while {$count < 3500} {
        append class_data "\t    i = 366 * i % 534;\n"
        incr count
    }
    append class_data "\t\}
        if (i == 210)
            System.out.print(\"OK\");
        else
            System.out.print(\"FAIL\");
    \}
\}\n"
    compile_and_run [saveas T14rj2.java $class_data]

} {OK}

14.3

Directory : tests/runtime/jls/blocks-and-statements/local-class-declarations


Test Case: 14.3-1-runtime-1
local classes are never implicitly static, even in a static context

Expected Result: false false

Regression Test:

tcltest::test 14.3-1-runtime-1 { local classes are never implicitly static,
        even in a static context } {
    
    compile_and_run [saveas T1431r1.java {
import java.lang.reflect.Modifier;
class T1431r1 {
    public static void main(String[] args) {
        class Local {}
        Local l = new Local();
        System.out.print(Modifier.isStatic(l.getClass().getModifiers()));
        System.out.print(' ');
        new T1431r1().foo();
    }
    void foo() {
        class Local1 {}
        Local1 l = new Local1();
        System.out.print(Modifier.isStatic(l.getClass().getModifiers()));
    }        
}
    }]

} {false false}
Test Case: 14.3-1-runtime-2
local class names must not flatten to the same name as an anonymous class

Expected Result: true true

Regression Test:

tcltest::test 14.3-1-runtime-2 { local class names must not flatten to the
        same name as an anonymous class } {
    
   compile_and_run [saveas T1431r2.java {
class T1431r2 {
    boolean x1, x2;
    T1431r2() {
        class Local {
            { x1 = true; }
        }
        new Local();
        new Object() {
            class Local {
                { x2 = true; }
            }
        }.new Local();
    }
    public static void main(String[] args) {
        T1431r2 t = new T1431r2();
        System.out.print(t.x1 + " " + t.x2);
    }
}
   }]

} {true true}

14.3.1

Directory : tests/runtime/jls/blocks-and-statements/local-class-declarations


Test Case: 14.3.1-runtime-3
test use of shadowed local variables in local class

Expected Result: true

Regression Test:

tcltest::test 14.3.1-runtime-3 { test use of shadowed local variables in
        local class } {
    
    compile_and_run [saveas T1431r3.java {
class T1431r3 {
    static class Super {
	Object shared;
	Super(Object o) { shared = o; }
    }
    public static void main(String[] args) {
	final Object o = new Object();
	class Local extends Super {
	    Local() {
		super(o);
	    }
	}
	Local a = new Local();
	Local b = new Local();
	System.out.print(a.shared == o && b.shared == o);
    }
}
    }]

} {true}

14.9.1

Directory : tests/runtime/jls/blocks-and-statements/if-statement/if-then-statement


Test Case: 14.9.1-runtime-1
Tests that compiler does not over-optimize, as reported in jikes bug 2982

Expected Result: OK

Regression Test:

tcltest::test 14.9.1-runtime-1 { Tests that compiler does not over-optimize,
        as reported in jikes bug 2982 } {
    
    compile_and_run [saveas T1491r1.java {
import java.util.*;
class T1491r1 {
    static Set s = new HashSet();
    public static void main(String[] args) {
	if (null == s)
            System.out.print("oops");
	System.out.print(null == s ? "oops" : "OK");
    }
}
    }]

} {OK}
Test Case: 14.9.1-runtime-2
Tests that compiler does not over-optimize, as reported in jikes bug 2895

Expected Result: OK

Regression Test:

tcltest::test 14.9.1-runtime-2 { Tests that compiler does not over-optimize,
        as reported in jikes bug 2895 } {
    
    compile_and_run [saveas T1491r2.java {
class T1491r2 {
    public static void main(String [] args) {
	foo();
	System.out.print("OK");
    }
    static void foo() {
	boolean a = false;
	if (a);
	else if (false);
    }
}
}]

} {OK}

14.9.2

Directory : tests/runtime/jls/blocks-and-statements/if-statement/if-then-else-statement


Test Case: 14.9.2-runtime-1
Test optimization of if-then-else statements

Expected Result: 12345678

Regression Test:

tcltest::test 14.9.2-runtime-1 { Test optimization of if-then-else
        statements } {
    
    compile_and_run [saveas T1492r1.java {
class T1492r1 {
    public static void main(String[] args) {
	if (true) {
	    System.out.print(1);
	} else {
	    System.out.print('a');
	}
	if (true) {
	} else {
	    System.out.print('b');
	}
	if (true) {
	    System.out.print(2);
	} else {
	}
	if (false) {
	    System.out.print('c');
	} else {
	    System.out.print(3);
	}
	if (false) {
	    System.out.print('d');
	} else {
	}
	if (false) {
	} else {
	    System.out.print(4);
	}
	boolean b = true;
	if (b) {
	    System.out.print(5);
	} else {
	    System.out.print('e');
	}
	if (b) {
	} else {
	    System.out.print('f');
	}
	if (b) {
	    System.out.print(6);
	} else {
	}
	b = false;
	if (b) {
	    System.out.print('g');
	} else {
	    System.out.print(7);
	}
	if (b) {
	    System.out.print('h');
	} else {
	}
	if (b) {
	} else {
	    System.out.print(8);
	}
    }
}
    }]

} {12345678}

14.10

Directory : tests/runtime/jls/blocks-and-statements/switch-statement


Test Case: 14.10-runtime-verifier-1
runtime switch test for values between 0x7ffffff0 and 0x7fffffff

Expected Result: OK

Regression Test:

tcltest::test 14.10-runtime-verifier-1 { runtime switch test for values
        between 0x7ffffff0  and 0x7fffffff } {
    
    compile_and_run [saveas T1410v1.java {
class T1410v1 {
  public static void main(String [] args) {
    // prevent compiler optimization of switch by using args.length
    switch (args.length + 0x7ffffff2) {
    case 0x7ffffff0:
    case 0x7ffffff1:
    case 0x7ffffff2:
    case 0x7ffffff3:
      System.out.print("OK");
      break;
    default:
      System.out.print("NOT_OK");
    }
  }
}
    }]

} {OK}
Test Case: 14.10-runtime-verifier-2
runtime switch test exposes bug in javac when variable declaration occurs in dead code

Expected Result: 2 [Ljava.lang.String;

Regression Test:

tcltest::test 14.10-runtime-verifier-2 { runtime switch test exposes bug in
        javac when variable declaration occurs in dead code } {
    
    compile_and_run [saveas T1410v2.java {
class T1410v2 {
    public static void main(String[] args) {
	switch (args.length) {
        case 1:
	    if (true)
                break;
	    int i = 1;
        case 0:
	    i = 2;
	    System.out.print(i + " ");
	}
	System.out.print(args.getClass().getName());
    }
}
    }]

} {2 [Ljava.lang.String;}
Test Case: 14.10-runtime-fallthrough-1
runtime test for fallthrough of cases

Expected Result: many too many one too many

Regression Test:

tcltest::test 14.10-runtime-fallthrough-1 { runtime test for fallthrough
        of cases } {
    
    compile_and_run [saveas T1410f1.java {
class T1410f1 {
    static void howMany(int k) {
        switch (k) {
            case 1: System.out.print("one ");
            case 2: System.out.print("too ");
            case 3: System.out.println("many");
        }
    }
    public static void main(String[] args) {
        howMany(3);
        howMany(2);
        howMany(1);
    }
}
    }]

} {many
too many
one too many
}
Test Case: 14.10-runtime-fallthrough-2
runtime test for break stopping fallthrough

Expected Result: one two many

Regression Test:

tcltest::test 14.10-runtime-fallthrough-2 { runtime test for break
    stopping fallthrough } {
    
    compile_and_run [saveas T1410f2.java {
class T1410f2 {
    static void howMany(int k) {
        switch (k) {
            case 1: System.out.println("one");
            break;            // exit the switch
            case 2: System.out.println("two");
            break;            // exit the switch
            case 3: System.out.println("many");
            break;            // not needed, but good style
        }
    }
    public static void main(String[] args) {
        howMany(1);
        howMany(2);
        howMany(3);
    }
}
    }]

} {one
two
many
}
Test Case: 14.10-runtime-break-1
test optimization of switch statement, jikes bug 3113

Expected Result: OK

Regression Test:

tcltest::test 14.10-runtime-break-1 { test optimization of switch statement,
        jikes bug 3113 } {
    
    compile_and_run [saveas T1410b1.java {
class T1410b1 {
    public static void main(String[] args) {
	label:
	switch (args.length) {
	    case 0:
	    break label;
	}
	System.out.print("OK");
    }
}
    }]

} {OK}
Test Case: 14.10-runtime-break-2
test optimization of switch statement, jikes bug 3212

Expected Result: OK

Regression Test:

tcltest::test 14.10-runtime-break-2 { test optimization of switch statement,
        jikes bug 3212 } {
    
    compile_and_run -g [saveas T1410b2.java {
class T1410b2 {
    public static void main(String[] args) {
	System.out.print("OK");
	switch (args.length) {
        case 1:
	    int i = 1;
	    break;
	}
    }
}
    }]

} {OK}

14.11

Directory : tests/runtime/jls/blocks-and-statements/while-statement


Test Case: 14.11-runtime-1
Test optimization of loops, from jikes bug 3084

Expected Result: a 10

Regression Test:

tcltest::test 14.11-runtime-1 { Test optimization of loops, from jikes bug
        3084 } {
    
    compile_and_run [saveas T1411r1.java {
class T1411r1 {
    public static void main(String[] args) {
	int i = 0;
        while (i < 10) {
            try {
                i++;
		if (i == 5)
                    throw new Exception();
            } catch (Exception ex) {
		System.out.print("a ");
                continue;
            }
        }
	System.out.print(i);
    }
}
    }]

} {a 10}

14.12

Directory : tests/runtime/jls/blocks-and-statements/do-statement


Test Case: 14.12-runtime-1
Test optimization of do-while loops

Expected Result: 2

Regression Test:

tcltest::test 14.12-runtime-1 { Test optimization of do-while
        loops } {
    
    compile_and_run [saveas T1412r1.java {
class T1412r1 {
    static int i = -2;
    public static void main(String[] args) {
	do
            test();
	while (false);
	System.out.print(i);
    }
    static boolean test() {
	try {
	    do {
		if (i++ == 0)
		    return true;
	    } while (true);
        } finally {
	    i++;
	}
    }
}
    }]

} {2}

14.13

Directory : tests/runtime/jls/blocks-and-statements/for-statement


Test Case: 14.13-runtime-1
Test optimization of for loops

Expected Result: 111105

Regression Test:

tcltest::test 14.13-runtime-1 { Test optimization of for loops } {
    
    compile_and_run [saveas T1413r1.java {
class T1413r1 {
    public static void main(String[] args) {
	int i = 0;
	for ( ; i < 100000; i += 12345)
	    if (i < 100000)
	        continue;
	System.out.print(i);
    }
}
    }]

} {111105}

14.14

Directory : tests/runtime/jls/blocks-and-statements/break-statement


Test Case: 14.14-runtime-jump-1
test of wide jump in break

Expected Result: OK

Regression Test:

tcltest::test 14.14-runtime-jump-1 { test of wide jump in break } {
    
    set class_data "
class T1414rj1 \{
    public static void main(String\[\] args) \{
        int i = 1;
        do \{
            if (i == 1)
                break;\n"
    set count 0
    while {$count < 3500} {
        append class_data "\t    i = 366 * i % 534;\n"
        incr count
    }
    append class_data "\t\} while (false);
        if (i == 1)
            System.out.print(\"OK\");
        else
            System.out.print(\"FAIL\");
    \}
\}\n"
    compile_and_run [saveas T1414rj1.java $class_data]

} {OK}

14.18

Directory : tests/runtime/jls/blocks-and-statements/synchronized-statement


Test Case: 14.18-runtime-1
Test compilation of synchronized

Expected Result: OK

Regression Test:

tcltest::test 14.18-runtime-1 { Test compilation of synchronized } {
    
    compile_and_run [saveas T1418r1.java {
class T1418r1 {
    public static void main(String[] args) {
	m();
    }
    static void m() {
	synchronized ("") {
	    int i = 1;
	}
	synchronized ("") {
	    System.out.print("OK");
	}
    }
}
    }]

} {OK}

14.19.1

Directory : tests/runtime/jls/blocks-and-statements/try-statement/try-catch


Test Case: 14.19.1-runtime-1
Test evaluation of try-catch blocks, with synchronized statement

Expected Result: OK

Regression Test:

tcltest::test 14.19.1-runtime-1 { Test evaluation of try-catch blocks, with
        synchronized statement } {
    
    compile_and_run [saveas T14191r1.java {
class T14191r1 {
    public static void main(String[] o) {
	synchronized (o) {
	    try {
		throw new Error();
	    } catch (Error e) {
		System.out.print("OK");
		return;
	    }
	}
    }
}
    }]

} {OK}
Test Case: 14.19.1-runtime-2
Test evaluation of try-catch blocks, with synchronized statement

Expected Result: OK

Regression Test:

tcltest::test 14.19.1-runtime-2 { Test evaluation of try-catch blocks, with
        synchronized statement } {
    
    compile_and_run [saveas T14191r2.java {
class T14191r2 {
    public static void main(final String[] args) {
	RuntimeException e = new RuntimeException();
	try {
	    foo(e);
	    System.out.print("exception not thrown");
	} catch (Exception ex) {
	    System.out.print(ex == e ? "OK" : "wrong exception thrown");
	}
    }
    static int foo(RuntimeException o) {
	synchronized (o) {
	    try {
		return bar();
	    } catch (RuntimeException e) {
		throw o;
	    }
	}
    }
    static int bar() { throw new RuntimeException(); }
}
    }]

} {OK}
Test Case: 14.19.1-runtime-3
Evaluation of empty try-block is legal, even though it is a no-op

Expected Result: 123

Regression Test:

tcltest::test 14.19.1-runtime-3 { Evaluation of empty try-block is legal,
        even though it is a no-op } {
    
    compile_and_run [saveas T14191r3.java {
class T14191r3 {
    public static void main(String[] args) {
	System.out.print(1);
	try {
	} catch (Error e) {
	}
	System.out.print(2);
	try {
	} catch (Error e) {
	}
	System.out.print(3);
    }
}
    }]

} {123}

14.19.2

Directory : tests/runtime/jls/blocks-and-statements/try-statement/try-catch-finally


Test Case: 14.19.2-runtime-try-1
runtime try catch finally test with synchronize statement

Expected Result: OK

Regression Test:

tcltest::test 14.19.2-runtime-try-1 { runtime try
        catch finally test with synchronize statement } {
    
    compile_and_run [saveas T14192rt1.java {
class T14192rt1 {
    public static void main(String [] args) {
        Object o = new Object();
        try {
            synchronized (o) {
                System.out.print("O");
                return;
            }
        }
        finally {
            try {
                raise();
            }
            catch (Exception e) {
                System.out.print("K");
            }
        }
    }
    public static void raise() throws Exception {
        throw new Exception();
    }
}
    }]

} {OK}
Test Case: 14.19.2-runtime-jump-1
test of jsr_w

Expected Result: OK

Regression Test:

tcltest::test 14.19.2-runtime-jump-1 { test of jsr_w } {
    
    set class_data "
class T14192rj1 \{
    public static void main(String\[\] args) \{
        int i = 1;
        try \{
            if (i == 0)
                throw new Exception();
            return;
        \} catch (Exception e) \{\n"
    set count 0
    while {$count < 3500} {
        append class_data "\t    i = 366 * i % 534;\n"
        incr count
    }
    append class_data "\t\} finally \{
            if (i == 1)
                System.out.print(\"OK\");
            else
                System.out.print(\"FAIL\");
        \}
    \}
\}\n"
    compile_and_run [saveas T14192rj1.java $class_data]

} {OK}
Test Case: 14.19.2-runtime-2
Test evaluation of try-finally blocks, with synchronized statement

Expected Result: 1 2

Regression Test:

tcltest::test 14.19.2-runtime-2 { Test evaluation of try-finally blocks, with
        synchronized statement } {
    
    compile_and_run [saveas T14192r2.java {
class T14192r2 {
    public static void main(final String[] args) {
	try {
	    foo(args);
	    System.out.print("exception not thrown");
	} catch (Exception e) {
	    System.out.print("2");
	}
    }
    static int foo(Object o) {
	synchronized (o) {
	    try {
		return bar();
	    } finally {
		System.out.print("1 ");
	    }
	}
    }
    static int bar() { throw new RuntimeException(); }
}
    }]

} {1 2}

15.8.4

Directory : tests/runtime/jls/expressions/primary-expressions/qualified-this


Test Case: 15.8.4-runtime-1
Qualified this refers to the lexically enclosing instance

Expected Result: value value

Regression Test:

tcltest::test 15.8.4-runtime-1 { Qualified this refers to the lexically
        enclosing instance } {
    
    compile_and_run [saveas T1584r1.java {
class T1584r1 {
    String member;
    T1584r1(String value) { member = value; }
    T1584r1() { }
    class Inner extends T1584r1 {
        Inner() {
            this.member = T1584r1.this.member; // refers to two distinct fields
        }
    }
    public static void main(String[] args) {
        T1584r1 t = new T1584r1("value");
        System.out.print(t.member + " ");
        System.out.print(t.new Inner().member);
    }
}
    }]

} {value value}

15.9

Directory : tests/runtime/jls/expressions/class-instance-creation


Test Case: 15.9-runtime-numcalls-1
Check the number of times a constructor is called from a class instance creation expression

Expected Result: ctor -> ctor

Regression Test:

tcltest::test 15.9-runtime-numcalls-1 { Check the number
        of times a constructor is called from a class
        instance creation expression } {
    

    compile_and_run [saveas T159rn1.java {
class T159rn1 {

    private static class Inner {
        public Inner() {
            System.err.print("ctor");
        }

        private void foo() {}
    }

    public static void main(String[] args) {
        new Inner().foo();              // broken in Jikes 1.11
        System.err.print(" -> ");
        (new Inner()).foo();            // okay
    }
}
    }]

} {ctor -> ctor}

15.9.4

Directory : tests/runtime/jls/expressions/class-instance-creation/run-time-evaluation


Test Case: 15.9.4-runtime-creation-1
A null qualifier must throw a NullPointerException before anything else happens

Expected Result: OK

Regression Test:

tcltest::test 15.9.4-runtime-creation-1 { A null qualifier must throw a
        NullPointerException before anything else happens } {
    
    compile_and_run [saveas T1594rc1.java {
class T1594rc1 {
    class Inner {
        Inner(int i) {}
    }
    public static void main(String[] args) {
        int j = 1;
        T1594rc1 t = null;
        try {
            t.new Inner(j = 2);
        } catch (NullPointerException npe) {
            if (j == 2)
                System.out.println("NullPointer must precede argument evaluation");
            else
                System.out.print("OK");
            return;
        }
        System.out.println("Qualified instance creation must throw NullPointerException");
    }
}
    }]

} {OK}
Test Case: 15.9.4-runtime-creation-2
OutOfMemoryError precedes argument evaluation - example in 15.9.6

Expected Result: false

Regression Test:

tcltest::test 15.9.4-runtime-creation-2 { OutOfMemoryError precedes argument
        evaluation - example in 15.9.6 } {
    
    compile_and_run [saveas T1594rc2.java {
class List {
    int value;
    List next;
    static List head = new List(0);
    List(int n) { value = n; next = head; head = this; }
}
class T1594rc2 {
    public static void main(String[] args) {
        int id = 0, oldid = 0;
        try {
            for (;;) {
                ++id;
                new List(oldid = id);
            }
        } catch (OutOfMemoryError e) {
            List.head = null; // try to reclaim memory
            System.out.print(oldid==id);
        }
    }
}
    }]

} {false}
Test Case: 15.9.4-runtime-creation-3
Check that all (non-constant) fields have default value, arguments are processed left to right, and instance initializer is called only after superconstructor

Expected Result: OK

Regression Test:

tcltest::test 15.9.4-runtime-creation-3 { Check that all (non-constant) fields
        have default value, arguments are processed left to right, and
        instance initializer is called only after superconstructor } {
    
    compile_and_run [saveas T1594rc3.java {
class T1594rc3 {
    int i = getInt(); // will not be called
    T1594rc3(int a, int b, int c) {}
    static int getInt() {
        System.out.print("Oops ");
        return 1;
    }
    { System.out.print("Bad "); } // will not be called
    static int choke() { throw new RuntimeException(); }
    public static void main(String[] args) {
        int a = 0, b = 0, c = 0;
        try {
            new T1594rc3(a = 1, b = choke(), c = 1);
        } catch (RuntimeException re) {
            if (a == 1 && b == 0 && c == 0)
                System.out.print("OK");
            else
                System.out.print("Out of order");
            return;
        }
        System.out.println("Should not get here");
    }
}
    }]

} {OK}
Test Case: 15.9.4-runtime-creation-4
Instance initializers are called in textual order after superconstructor

Expected Result: 1 2 3 4 5

Regression Test:

tcltest::test 15.9.4-runtime-creation-4 { Instance initializers are called
        in textual order after superconstructor } {
    
    compile_and_run [saveas T1594rc4.java {
class Super {
    Super() {
        System.out.print("2 ");
    }
    { System.out.print("1 "); }
}
class T1594rc4 extends Super {
    { System.out.print("3 "); }
    T1594rc4() {
        System.out.print("5");
    }
    public static void main(String[] args) {
        new T1594rc4();
    }
    { System.out.print("4 "); }
}
    }]

} {1 2 3 4 5}
Test Case: 15.9.4-runtime-creation-5
A null qualifier must throw a NullPointerException before anything else happens

Expected Result: 1 1

Regression Test:

tcltest::test 15.9.4-runtime-creation-5 { A null qualifier must throw a
        NullPointerException before anything else happens } {
    
    compile_and_run [saveas T1594rc5.java {
class T1594rc5 {
    class Inner {
	Inner(int i) {}
    }
    public static void main(String[] args) {
	int i = 1;
	try {
	    T1594rc5 t = null;
	    t.new Inner(i++) {};
	} catch (NullPointerException e) {
	    System.out.print(i + " ");
	}
	try {
	    ((T1594rc5) null).new Inner(i++) {};
	} catch (NullPointerException e) {
	    System.out.print(i);
	}
    }
}
    }]

} {1 1}

15.11.1

Directory : tests/runtime/jls/expressions/field-access-expressions/using-a-primary


Test Case: 15.11.1-runtime-static-1
The Primary qualifier of a static field reference must be evaluated, then discarded

Expected Result: a a a c a d a

Regression Test:

tcltest::test 15.11.1-runtime-static-1 { The Primary qualifier of a static
        field reference must be evaluated, then discarded } {
    
    compile_and_run [saveas T15111rs1.java {
class T15111rs1 {
    static T15111rs1 a() {
	System.out.print("a ");
	return t;
    }
    static int i = 0;
    static T15111rs1 t = new T15111rs1();

    T15111rs1() {}
    T15111rs1(char c) { System.out.print("c "); }
    public String toString() {
	System.out.print("d ");
	return null;
    }
    public static void main(String[] args) {
	a().i++; // method invocation
	a().t.i++; // field access
	(t.a()).i++; // parenthesized expression
	new T15111rs1('c').i++; // instance creation
	((T15111rs1)a()).i++; // safe cast
	("" + t).CASE_INSENSITIVE_ORDER.toString(); // string conversion
	(t = null).i++; // assignment
	if (t != null) System.out.print("Oops ");
	(t == null ? a() : a()).i++; // conditional
	if (i != 7) System.out.print("Oops ");
	i = 0;
	T15111rs1[] ta = {t};
	ta[i++].i++; // array access
	if (i != 2) System.out.print("Oops ");
    }
}
    }]

} {a a a c a d a }
Test Case: 15.11.1-runtime-static-2
The Primary qualifier of a static field reference may complete abruptly, before anything else

Expected Result: 1 2 3 4 5

Regression Test:

tcltest::test 15.11.1-runtime-static-2 { The Primary qualifier of a static
        field reference may complete abruptly, before anything else } {
    
    compile_and_run [saveas T15111rs2.java {
class T15111rs2 {
    static int i = 0;
    static T15111rs2 a() { throw new RuntimeException(); }
    static T15111rs2 t = null;
    T15111rs2 t1 = null;

    T15111rs2() {}
    T15111rs2(int i) { throw new IllegalArgumentException(); }
    public String toString() {
	int i = 0;
	i /= i; // throw ArithmeticException, rather than return
	return null;
    }
    public static void main(String[] args) {
	try {
	    t.t1.i++; // instance field access
	} catch (NullPointerException e) {
	    System.out.print("1 ");
	}
	T15111rs2[] ta = {};
	try {
	    ta[0].i++; // array access
	} catch (ArrayIndexOutOfBoundsException e) {
	    System.out.print("2 ");
	}
	try {
	    a().i++; // method call
	} catch (RuntimeException e) {
	    System.out.print("3 ");
	}
	Object o = "";
	try {
	    ((T15111rs2)o).i++; // unsafe cast
	} catch (ClassCastException e) {
	    System.out.print("4 ");
	}
	try {
	    new T15111rs2(1).i++; // constructor
	} catch (IllegalArgumentException e) {
	    System.out.print("5");
	}
	if (i != 0) System.out.print("Oops ");
    }
}
    }]

} {1 2 3 4 5}
Test Case: 15.11.1-runtime-static-3
The Primary qualifier of a static field reference may complete abruptly, before anything else. This test only works against JDK 1.2 or higher

Expected Result: OK

Regression Test:

tcltest::test 15.11.1-runtime-static-3 { The Primary qualifier of a static
        field reference may complete abruptly, before anything else.
        This test only works against JDK 1.2 or higher } {
    
    compile_and_run [saveas T15111rs3.java {
class T15111rs3 {
    public String toString() { throw new IllegalArgumentException(); }
    public static void main(String[] args) {
	try { // string conversion will fail
	    java.util.Comparator c =
	        ("foo" + new T15111rs3()).CASE_INSENSITIVE_ORDER;
	    System.out.print("Oops ");
	} catch (IllegalArgumentException e) {
	    System.out.print("OK");
	}
    }
}
    }]

} {OK}

15.11.2

Directory : tests/runtime/jls/expressions/field-access-expressions/accessing-superclass-members-using-super


Test Case: 15.11.2-runtime-1
Accessor methods are sometimes required to get at protected fields inherited in enclosing class

Expected Result: 1 2 3 3

Regression Test:

tcltest::test 15.11.2-runtime-1 { Accessor methods are sometimes required to
        get at protected fields inherited in enclosing class } {
    
    saveas p1/T15112r1a.java {
package p1;
public class T15112r1a {
    public T15112r1a(String s) { b = s; }
    protected static String a = "1";
    protected String b;
}
    }
    compile_and_run -classpath . [saveas T15112r1b.java {
import p1.T15112r1a;
class T15112r1b extends T15112r1a {
    T15112r1b(String s) { super(s); }
    String a = "4";
    String b = "5";
    class Inner extends T15112r1a {
	String a = "6";
	String b = "7";
	Inner(String s) { super(s); }
	void m() {
	    System.out.print(T15112r1b.super.a + " " + T15112r1b.super.b);
	    System.out.print(" " + Inner.super.b + " " + super.b);
	}
    }
    public static void main(String[] args) {
	new T15112r1b("2").new Inner("3").m();
    }
}
    }]

} {1 2 3 3}
Test Case: 15.11.2-runtime-2
Accessor methods are sometimes required to write to protected fields inherited in enclosing class

Expected Result: 2 4 6 7

Regression Test:

tcltest::test 15.11.2-runtime-2 { Accessor methods are sometimes required to
        write to protected fields inherited in enclosing class } {
    
    saveas p1/T15112r2a.java {
package p1;
public class T15112r2a {
    public T15112r2a(int i) { b = i; }
    protected static int a = 1;
    protected int b;
}
    }
    compile_and_run -classpath . [saveas T15112r2b.java {
import p1.T15112r2a;
class T15112r2b extends T15112r2a {
    T15112r2b(int i) { super(i); }
    int a = 8;
    int b = 9;
    class Inner extends T15112r2a {
	int a = 10;
	int b = 11;
	Inner(int i) { super(i); }
	void m() {
	    System.out.print(++T15112r2b.super.a + " " + ++T15112r2b.super.b);
	    System.out.print(" " + ++Inner.super.b + " " + ++super.b);
	}
    }
    public static void main(String[] args) {
	new T15112r2b(3).new Inner(5).m();
    }
}
    }]

} {2 4 6 7}

15.12.3

Directory : tests/runtime/jls/expressions/method-invocation-expressions/chosen-method-appropriate


Test Case: 15.12.3-runtime-mode-1
The invocation mode of a non-static, non-private method is virtual

Expected Result: 3 3

Regression Test:

tcltest::test 15.12.3-runtime-mode-1 { The invocation mode of a non-static,
        non-private method is virtual } {
    
    saveas p1/T15123rm1_1.java {
package p1;
public class T15123rm1_1 {
    protected void foo() { // this is overridden in T15123rm1_3
        System.out.print("1");
    }
}
    }
    saveas p2/T15123rm1_2.java {
package p2;
import p1.*;
public class T15123rm1_2 extends T15123rm1_1 {
    protected void call() {
        foo(); // must be virtual call
        System.out.print(' ');
        new Object() {
            { foo(); } // must be virtual call of enclosing instance
        };
    }
}
    }
    saveas p3/T15123rm1_3.java {
package p3;
import p2.*;
public class T15123rm1_3 extends T15123rm1_2 {
    public static void main(String[] args) {
        new T15123rm1_3().call();
    }
    protected void foo() { // will be called virtually
        System.out.print("3");
    }
}
    }
    compile_and_run -classpath . p1/T15123rm1_1.java p2/T15123rm1_2.java p3/T15123rm1_3.java

} {3 3}
Test Case: 15.12.3-runtime-mode-2
The invocation mode of a static method is static

Expected Result: 1

Regression Test:

tcltest::test 15.12.3-runtime-mode-2 { The invocation mode of a static method
        is static } {
    
    compile_and_run [saveas T15123rm2.java {
class T15123rm2 {
    static class One {
	private static void m() {
	    System.out.print(1);
	}
    }
    static class Two extends One {
	static void m() {
	    System.out.print(2);
	}
    }
    public static void main(String[] args) {
	One o = new Two();
	o.m(); // invokes One.m(), even though it is an instance of Two
    }
}
    }]

} {1}
Test Case: 15.12.3-runtime-mode-3
The invocation mode of a private method is private

Expected Result: 1

Regression Test:

tcltest::test 15.12.3-runtime-mode-3 { The invocation mode of a private method
        is private } {
    
    compile_and_run [saveas T15123rm3.java {
class T15123rm3 {
    static class One {
	private void m() {
	    System.out.print(1);
	}
    }
    static class Two extends One {
	void m() {
	    System.out.print(2);
	}
    }
    public static void main(String[] args) {
	One o = new Two();
	o.m(); // invokes One.m(), even though this is an instance of Two
    }
}
    }]

} {1}
Test Case: 15.12.3-runtime-mode-4
The invocation mode of an instance method called with super is super

Expected Result: c a c a

Regression Test:

tcltest::test 15.12.3-runtime-mode-4 { The invocation mode of an instance
        method called with super is super } {
    
    compile_and_run [saveas p1/T15123rm4a.java {
package p1;
public class T15123rm4a {
    protected void m() {
	System.out.print("a ");
    }
}
    }] [saveas T15123rm4c.java {
class T15123rm4b extends p1.T15123rm4a {
    public void foo() {
	m();
	super.m();
	new Object() {
	    {
		m();
		T15123rm4b.super.m();
	    }
	};
    }
    protected void m() {
	System.out.print("b ");
    }
}
class T15123rm4c extends T15123rm4b {
    public void m() {
	System.out.print("c ");
    }
    public static void main(String[] args) {
	new T15123rm4d();
    }
}
class T15123rm4d extends T15123rm4c {
    public void foo() {}
    T15123rm4d() {
	new Object() {
	    {
		T15123rm4d.super.foo();
	    }
	};
    }
}	
    }]

} {c a c a }
Test Case: 15.12.3-runtime-mode-5
The invocation mode of a method called on an interface is interface

Expected Result: 1 1

Regression Test:

tcltest::test 15.12.3-runtime-mode-5 { The invocation mode of a method
        called on an interface is interface } {
    
    compile_and_run [saveas T15123rm5.java {
class T15123rm5 {
    interface I {
	void m();
    }
    static abstract class One implements I {}
    static class Two extends One {
	public void m() {
	    System.out.print(1);
	}
    }
    public static void main(String[] args) {
	One o = new Two();
	I i = o;
	o.m(); // virtual
	System.out.print(' ');
	i.m(); // interface
    }
}
    }]

} {1 1}
Test Case: 15.12.3-runtime-mode-6
The invocation mode of a non-static, non-private method is virtual

Expected Result: 4 4 4 4

Regression Test:

tcltest::test 15.12.3-runtime-mode-6 { The invocation mode of a non-static,
        non-private method is virtual } {
    
    compile_and_run [saveas p1/T15123rm6a.java {
package p1;
public class T15123rm6a {
    protected void m() {
	System.out.print(1);
    }
}
    }] [saveas p1/T15123rm6c.java {
package p1;
public class T15123rm6c extends p2.T15123rm6b {}
    }] [saveas p2/T15123rm6b.java {
package p2;
public class T15123rm6b extends p1.T15123rm6a {
    public static void main(String[] args) {
	final T15123rm6d d = new T15123rm6d();
	final p1.T15123rm6c c = d;
	c.m();
	System.out.print(' ');
	d.m();
	System.out.print(' ');
	new Object() {
	    {
		c.m();
		System.out.print(' ');
		d.m();
	    }
	};
    }
}
class T15123rm6d extends p1.T15123rm6c {
    protected void m() {
	System.out.print(4);
    }
}
    }]

} {4 4 4 4}

15.12.4.1

Directory : tests/runtime/jls/expressions/method-invocation-expressions/runtime-evaluation/compute-target-reference


Test Case: 15.12.4.1-runtime-static-1
The Primary qualifier of a static method invocation must be evaluated, then discarded

Expected Result: a b a b a b c b a b d b a b b

Regression Test:

tcltest::test 15.12.4.1-runtime-static-1 { The Primary qualifier of a static
        method invocation must be evaluated, then discarded } {
    
    compile_and_run [saveas T151241rs1.java {
class T151241rs1 {
    static T151241rs1 a() {
	System.out.print("a ");
	return t;
    }
    static void b() { System.out.print("b "); }
    static T151241rs1 t = new T151241rs1();

    T151241rs1() {}
    T151241rs1(char c) { System.out.print("c "); }
    public String toString() {
	System.out.print("d ");
	return null;
    }
    public static void main(String[] args) {
	a().b(); // method invocation
	a().t.b(); // field access
	(t.a()).b(); // parenthesized expression
	new T151241rs1('c').b(); // instance creation
	((T151241rs1)a()).b(); // safe cast
	("" + t).valueOf(1); // string conversion
	(t = null).b(); // assignment
	if (t != null) System.out.print("Oops ");
	(t == null ? a() : a()).b(); // conditional
	T151241rs1[] ta = {t};
	int i = 0;
	ta[i++].b(); // array access
	if (i != 1) System.out.print("Oops ");
    }
}
    }]

} {a b a b a b c b a b d b a b b }
Test Case: 15.12.4.1-runtime-static-2
The Primary qualifier of a static method invocation may complete abruptly, before anything else

Expected Result: 1 2 3 4 5 6

Regression Test:

tcltest::test 15.12.4.1-runtime-static-2 { The Primary qualifier of a static
        method invocation may complete abruptly, before anything else } {
    
    compile_and_run [saveas T151241rs2.java {
class T151241rs2 {
    static int i = 0;
    static T151241rs2 a() { throw new RuntimeException(); }
    static void b(int i) { System.out.print("Oops "); }
    static T151241rs2 t = null;
    T151241rs2 t1 = null;

    T151241rs2() {}
    T151241rs2(int i) { throw new IllegalArgumentException(); }
    public String toString() {
	int i = 0;
	i /= i; // throw ArithmeticException, rather than return
	return null;
    }
    public static void main(String[] args) {
	try {
	    t.t1.b(i++); // instance field access
	} catch (NullPointerException e) {
	    System.out.print("1 ");
	}
	T151241rs2[] ta = {};
	try {
	    ta[0].b(i++); // array access
	} catch (ArrayIndexOutOfBoundsException e) {
	    System.out.print("2 ");
	}
	try {
	    a().b(i++); // method call
	} catch (RuntimeException e) {
	    System.out.print("3 ");
	}
	Object o = "";
	try {
	    ((T151241rs2)o).b(i++); // unsafe cast
	} catch (ClassCastException e) {
	    System.out.print("4 ");
	}
	try {
	    ("" + new T151241rs2()).valueOf(1); // abrupt binary expression
	    System.out.print("Oops ");
	} catch (ArithmeticException e) {
	    System.out.print("5 ");
	}
	try {
	    new T151241rs2(1).b(i++); // constructor
	} catch (IllegalArgumentException e) {
	    System.out.print("6");
	}
	if (i != 0) System.out.print("Oops ");
    }
}
    }]

} {1 2 3 4 5 6}
Test Case: 15.12.4.1-runtime-static-3
The Primary qualifier of a static method is discarded

Expected Result: OK

Regression Test:

tcltest::test 15.12.4.1-runtime-static-3 { The Primary qualifier of a static
        method is discarded } {
    
    compile_and_run [saveas T151241rs3.java {
class T151241rs3 {
    public static void main(String[] args) {
        try {
            Class c = T151241rs3.class.forName("T151241rs3");
            System.out.print((c == T151241rs3.class ? "OK" : "oops"));
        } catch (Exception e) {
            System.out.print("Unexpected: " + e);
        }
    }
}
    }]

} {OK}
Test Case: 15.12.4.1-runtime-super-1
Accessor methods are sometimes required to get at protected methods inherited in enclosing class

Expected Result: 1 2 5 5

Regression Test:

tcltest::test 15.12.4.1-runtime-super-1 { Accessor methods are sometimes
        required to get at protected methods inherited in enclosing
        class } {
    
    saveas p1/T151241rsuper1a.java {
package p1;
public class T151241rsuper1a {
    public String a() { return null; }
    protected String i() { return a(); }
    protected static String s() { return "2"; }
}
    }
    compile_and_run -classpath . [saveas T151241rsuper1b.java {
import p1.T151241rsuper1a;
class T151241rsuper1b extends T151241rsuper1a {
    public String a() { return "1"; }
    protected String i() { return "3"; }
    protected static String s() { return "4"; }
    class Inner extends T151241rsuper1a {
	public String a() { return "5"; }
	protected String i() { return "6"; }
	void m() {
	    System.out.print(T151241rsuper1b.super.i() + " ");
	    System.out.print(T151241rsuper1b.super.s() + " ");
	    System.out.print(Inner.super.i() + " " + super.i());
	}
    }
    public static void main(String[] args) {
	new T151241rsuper1b().new Inner().m();
    }
}
    }]

} {1 2 5 5}
Test Case: 15.12.4.1-runtime-super-2
Accessor methods are required to get at enclosing instance methods invoked via classname.super

Expected Result: 1i 2i 3i 4i 1s 2s 3s 4s

Regression Test:

tcltest::test 15.12.4.1-runtime-super-2 { Accessor methods are required to get
        at enclosing instance methods invoked via classname.super } {
    
    compile_and_run [saveas T151241rsuper2.java {
class T151241rsuper2 {
    abstract class Super {
	private void a() { System.out.print(1 + e()); }
	void b() { System.out.print(2 + e()); }
	protected void c() { System.out.print(3 + e()); }
	public void d() { System.out.print(4 + e()); }
	abstract String e();
    }
    class Sub extends Super {
	private void a() { System.out.println(5); }
	void b() { System.out.println(6); }
	protected void c() { System.out.println(7); }
	public void d() { System.out.println(8); }
	String e() { return "s "; }
	class Inner extends Super {
	    private void a() { System.out.println(9); }
	    void b() { System.out.println(10); }
	    protected void c() { System.out.println(11); }
	    public void d() { System.out.println(12); }
	    String e() { return "i "; }
	    void m() {
		super.a();
		super.b();
		super.c();
		super.d();
		Sub.super.a();
		Sub.super.b();
		Sub.super.c();
		Sub.super.d();
	    }
	}
    }
    public static void main(String[] args) {
	new T151241rsuper2().new Sub().new Inner().m();
    }
}
    }]

} {1i 2i 3i 4i 1s 2s 3s 4s }

15.13.2

Directory : tests/runtime/jls/expressions/array-access-expressions/examples


Test Case: 15.13.2-runtime-example-1
JLS example

Expected Result: 14

Regression Test:

tcltest::test 15.13.2-runtime-example-1 { JLS example } {
    
    compile_and_run [saveas T15132re1.java {
class T15132re1 {
    public static void main(String[] args) {
	int[] a = { 11, 12, 13, 14 };
	int[] b = { 0, 1, 2, 3 };
	System.out.print(a[(a=b)[3]]);
    }
}
    }]

} {14}
Test Case: 15.13.2-runtime-example-2
JLS example

Expected Result: 1

Regression Test:

tcltest::test 15.13.2-runtime-example-2 { JLS example } {
    
    compile_and_run [saveas T15132re2.java {
class T15132re2 {
    public static void main(String[] args) {
	int index = 1;
	try {
	    skedaddle()[index = 2]++;
	} catch (Exception e) {
	    System.out.print(index);
	}
    }
    static int[] skedaddle() throws Exception {
	throw new Exception("Ciao");
    }
}
    }]

} {1}
Test Case: 15.13.2-runtime-example-3
JLS example

Expected Result: 2

Regression Test:

tcltest::test 15.13.2-runtime-example-3 { JLS example } {
    
    compile_and_run [saveas T15132re3.java {
class T15132re3 {
    public static void main(String[] args) {
	int index = 1;
	try {
	    nada()[index = 2]++;
	} catch (Exception e) {
	    System.out.print(index);
	}
    }
    static int[] nada() { return null; }
}
    }]

} {2}
Test Case: 15.13.2-runtime-example-4
JLS example

Expected Result: OK

Regression Test:

tcltest::test 15.13.2-runtime-example-4 { JLS example } {
    
    compile_and_run [saveas T15132re4.java {
class T15132re4 {
    public static void main(String[] args) {
	int[] a = null;
	try {
	    int i = a[vamoose()];
	    System.out.print(i);
	} catch (NullPointerException e) {
	} catch (Exception e) {
	    System.out.print("OK");
	}
    }
    static int vamoose() throws Exception {
	throw new Exception("Twenty-three skidoo!");
    }
}
    }]

} {OK}

15.14

Directory : tests/runtime/jls/expressions/postfix-expressions


Test Case: 15.14-runtime-1
Postfix ops have higher precedence than prefix

Expected Result: true true true

Regression Test:

tcltest::test 15.14-runtime-1 { Postfix ops have higher precedence
        than prefix } {
    
    compile_and_run [saveas T15141.java {
class T15141 {
    public static void main(String[] args) {
        int a = 1, b = 1;
        System.out.print((-a++ == -1) + " ");
        System.out.print((-(b++) == -1) + " ");
        System.out.print(a == b);
    }
}
    }]

} {true true true}
Test Case: 15.14-runtime-2
Postfix ops have higher precedence than prefix

Expected Result: true true true

Regression Test:

tcltest::test 15.14-runtime-2 { Postfix ops have higher precedence
        than prefix } {
    
    compile_and_run [saveas T15142.java {
class T15142 {
    public static void main(String[] args) {
        int a = 2, b = 2;
        System.out.print((-a-- == -2) + " ");
        System.out.print((-(b--) == -2) + " ");
        System.out.print(a == b);
    }
}
    }]

} {true true true}
Test Case: 15.14-runtime-3
Test postfix operation

Expected Result: 127 127 127 127 -128 -128 -128 -128

Regression Test:

tcltest::test 15.14-runtime-3 { Test postfix operation } {
    
    compile_and_run [saveas T1514r3.java {
class T1514r3 {
    static byte s = 127; // static field
    byte i = 127; // instance field
    public static void main(String[] args) {
        new T1514r3();
    }
    T1514r3() {
        byte[] a = {127}; // array access
        byte l = 127; // local variable
        System.out.print(s++ + " " + i++ + " " + a[0]++ + " " + l++);
        System.out.print(" " + s + " " + i + " " + a[0] + " " + l);
    }
}
    }]

} {127 127 127 127 -128 -128 -128 -128}
Test Case: 15.14-runtime-4
Test postfix operation

Expected Result: -128 -128 -128 -128 127 127 127 127

Regression Test:

tcltest::test 15.14-runtime-4 { Test postfix operation } {
    
    compile_and_run [saveas T1514r4.java {
class T1514r4 {
    static byte s = -128; // static field
    byte i = -128; // instance field
    public static void main(String[] args) {
        new T1514r4();
    }
    T1514r4() {
        byte[] a = {-128}; // array access
        byte l = -128; // local variable
        System.out.print(s-- + " " + i-- + " " + a[0]-- + " " + l--);
        System.out.print(" " + s + " " + i + " " + a[0] + " " + l);
    }
}
    }]

} {-128 -128 -128 -128 127 127 127 127}

15.15

Directory : tests/runtime/jls/expressions/unary-operators


Test Case: 15.15-runtime-1
Prefix ops have higher precedence than multiplicative

Expected Result: true true true

Regression Test:

tcltest::test 15.15-runtime-1 { Prefix ops have higher precedence than
        multiplicative } {
    
    compile_and_run [saveas T15151.java {
class T15151 {
    public static void main(String[] args) {
        int a = 1, b = 1;
        System.out.print((++a*a == 4) + " ");
        System.out.print(((++b)*b == 4) + " ");
        System.out.print(a == b);
    }
}
    }]

} {true true true}
Test Case: 15.15-runtime-2
Prefix ops have higher precedence than multiplicative

Expected Result: true true true

Regression Test:

tcltest::test 15.15-runtime-2 { Prefix ops have higher precedence
        than multiplicative } {
    
    compile_and_run [saveas T15152.java {
class T15152 {
    public static void main(String[] args) {
        int a = 3, b = 3;
        System.out.print((--a*a == 4) + " ");
        System.out.print(((--b)*b == 4) + " ");
        System.out.print(a == b);
    }
}
    }]

} {true true true}
Test Case: 15.15-runtime-3
Test prefix operation

Expected Result: -128 -128 -128 -128 -128 -128 -128 -128

Regression Test:

tcltest::test 15.15-runtime-3 { Test prefix operation } {
    
    compile_and_run [saveas T1515r3.java {
class T1515r3 {
    static byte s = 127; // static field
    byte i = 127; // instance field
    public static void main(String[] args) {
        new T1515r3();
    }
    T1515r3() {
        byte[] a = {127}; // array access
        byte l = 127; // local variable
        System.out.print(++s + " " + ++i + " " + ++a[0] + " " + ++l);
        System.out.print(" " + s + " " + i + " " + a[0] + " " + l);
    }
}
    }]

} {-128 -128 -128 -128 -128 -128 -128 -128}
Test Case: 15.15-runtime-4
Test prefix operation

Expected Result: 127 127 127 127 127 127 127 127

Regression Test:

tcltest::test 15.15-runtime-4 { Test prefix operation } {
    
    compile_and_run [saveas T1515r4.java {
class T1515r4 {
    static byte s = -128; // static field
    byte i = -128; // instance field
    public static void main(String[] args) {
        new T1515r4();
    }
    T1515r4() {
        byte[] a = {-128}; // array access
        byte l = -128; // local variable
        System.out.print(--s + " " + --i + " " + --a[0] + " " + --l);
        System.out.print(" " + s + " " + i + " " + a[0] + " " + l);
    }
}
    }]

} {127 127 127 127 127 127 127 127}

15.18.1.1

Directory : tests/runtime/jls/expressions/additive-operators/string-conversion


Test Case: 15.18.1.1-runtime-1
"" + char[] should behave the same as char[].toString()

Expected Result: OK

Regression Test:

tcltest::test 15.18.1.1-runtime-1 { "" + char[] should behave the
        same as char[].toString() } {
    
    compile_and_run [saveas T151811r1.java {
class T151811r1 {
    public static void main(String args[]) {
	char[] c = {'w','r','o','n','g'};
	String s = "" + c;
	if (s.equals(c.toString()))
    	    System.out.print("OK");
	else
	    System.out.print("WRONG");
    }
}
    }]

} {OK}
Test Case: 15.18.1.1-runtime-2
"" + char[] should behave the same as char[].toString()

Expected Result: OK

Regression Test:

tcltest::test 15.18.1.1-runtime-2 { "" + char[] should behave the
        same as char[].toString() } {
    
    compile_and_run [saveas T151811r2.java {
class T151811r2 {
    public static void main(String args[]) {
	char[] c = null;
        try {
            String s = "" + c;
            if (s.equals("null"))
    	        System.out.print("OK");
            else
	        System.out.print("WRONG string");
        } catch (NullPointerException e) {
            System.out.print("WRONG method");
        }
    }
}
    }]

} {OK}
Test Case: 15.18.1.1-runtime-3
"" + (int)char

Expected Result: 10

Regression Test:

tcltest::test 15.18.1.1-runtime-3 { "" + (int)char } {
    
    compile_and_run [saveas T151811r3.java {
class T151811r3 {
    public static void main(String[] args) {
        char c = 10;
        System.out.print("" + (int) c);
    }
}
    }]

} {10}

15.20

Directory : tests/runtime/jls/expressions/relational-operators/type-comparison-operator-instanceof


Test Case: 15.20-2-runtime-1
Test side-effects of compile-time known comparisons

Expected Result: OK true false

Regression Test:

tcltest::test 15.20-2-runtime-1 { Test side-effects of compile-time known
        comparisons } {
    
    compile_and_run [saveas T15202r1.java {
class T15202r1 {
    static int m(char c) {
	System.out.print(c);
	return 1;
    }
    public static void main(String[] args) {
	boolean b = new int[] { m('O') } instanceof Cloneable;
	b &= "" + m('K') instanceof String;
	System.out.print(" " + b);
	b = ((m(' ') > 0) ? null : null) instanceof Object;
	System.out.print(b);
    }
}
    }]

} {OK true false}
Test Case: 15.20-2-runtime-2
Test side-effects of compile-time known comparisons

Expected Result: OK

Regression Test:

tcltest::test 15.20-2-runtime-2 { Test side-effects of compile-time known
        comparisons } {
    
    compile_and_run [saveas T15202r2.java {
class T15202r2 {
    static int m() {
	return -1;
    }
    public static void main(String[] args) {
	try {
	    System.out.print(new int[m()] instanceof int[]);
	} catch (NegativeArraySizeException e) {
	    System.out.print("OK");
	}
    }
}
    }]

} {OK}

15.21.3

Directory : tests/runtime/jls/expressions/equality-operators/reference-equality


Test Case: 15.21.3-runtime-1
Test (non)equality

Expected Result: false true true false

Regression Test:

tcltest::test 15.21.3-runtime-1 { Test (non)equality } {
    
    compile_and_run [saveas T15213r1.java {
class T15213r1 {
    public boolean equals(Object o) {
	return this == o;
    }
    boolean not(Object o) {
	return this != o;
    }
    public static void main(String[] args) {
	T15213r1 t = new T15213r1();
	System.out.print(t.equals("") + " " + t.not("") + " ");
	System.out.print(t.equals(t) + " " + t.not(t));
    }
}
    }]

} {false true true false}
Test Case: 15.21.3-runtime-2
Strings are == only if they are same reference, and not because they have same contents

Expected Result: false

Regression Test:

tcltest::test 15.21.3-runtime-2 { Strings are == only if they are same
        reference, and not because they have same contents } {
    
    compile_and_run [saveas T15213r2.java {
class T15213r2 {
    public static void main(String[] args) {
	System.out.print(new String("") == "");
    }
}
    }]

} {false}

15.25

Directory : tests/runtime/jls/expressions/conditional-operator


Test Case: 15.25-runtime-1
Test optimization in ?:

Expected Result: null true

Regression Test:

tcltest::test 15.25-runtime-1 { Test optimization in ?: } {
    
    compile_and_run [saveas T1525r1.java {
class T1525r1 {
    public static void main(String[] args) {
	boolean b = false;
	System.out.print(((b = true) ? null : null) + " " + b);
    }
}
    }]

} {null true}
Test Case: 15.25-runtime-2
Test optimization in ?:

Expected Result: 1 true

Regression Test:

tcltest::test 15.25-runtime-2 { Test optimization in ?: } {
    
    compile_and_run [saveas T1525r2.java {
class T1525r2 {
    public static void main(String[] args) {
	boolean b = false;
	System.out.print(((b = true) ? 1 : 1) + " " + b);
    }
}
    }]

} {1 true}
Test Case: 15.25-runtime-3
Test optimization in ?:

Expected Result: a true

Regression Test:

tcltest::test 15.25-runtime-3 { Test optimization in ?: } {
    
    compile_and_run [saveas T1525r3.java {
class T1525r3 {
    public static void main(String[] args) {
	boolean b = false;
	System.out.print(((b = true) ? "a" : "a") + " " + b);
    }
}
    }]

} {a true}
Test Case: 15.25-runtime-4
Test optimization in ?:

Expected Result: 0.0 false

Regression Test:

tcltest::test 15.25-runtime-4 { Test optimization in ?: } {
    
    compile_and_run [saveas T1525r4.java {
class T1525r4 {
    public static void main(String[] args) {
	boolean b = true;
	System.out.print(((b = false) ? -0. : 0) + " " + b);
    }
}
    }]

} {0.0 false}
Test Case: 15.25-runtime-5
Test optimization in ?:

Expected Result: true

Regression Test:

tcltest::test 15.25-runtime-5 { Test optimization in ?: } {
    
    compile_and_run [saveas T1525r5.java {
class T1525r5 {
    public static void main(String[] args) {
	boolean b = false;
	if ((b = true) ? true : true)
            System.out.print(b);
    }
}
    }]

} {true}
Test Case: 15.25-runtime-6
Test side effects in ?:

Expected Result: b1a2

Regression Test:

tcltest::test 15.25-runtime-6 { Test side effects in ?: } {
    
    compile_and_run [saveas T1525r6.java {
class T1525r6 {
    static boolean a() {
	System.out.print('a');
	return false;
    }
    static boolean b() {
	System.out.print('b');
	return false;
    }
    public static void main(String[] args) {
	boolean b = false;
	if (true | (b ? a() : b()))
            System.out.print(1);
	b = true;
	if (false & (b ? a() : b())) {
	    b = false;
	} else System.out.print(2);
    }
}
    }]

} {b1a2}
Test Case: 15.25-runtime-7
Test boolean ?:

Expected Result: OK

Regression Test:

tcltest::test 15.25-runtime-7 { Test boolean ?: } {
    
    compile_and_run [saveas T1525r7.java {
class T1525r7 {
    public static void main(String[] args) {
	boolean b, r = args.length > 0;
	if ((r && (b = r)) ? r : r && (b = r))
            r = b;
	System.out.print("OK");
    }
}
    }]

} {OK}
Test Case: 15.25-runtime-8
Test optimization in ?:

Expected Result: false

Regression Test:

tcltest::test 15.25-runtime-8 { Test optimization in ?: } {
    
    compile_and_run [saveas T1525r8.java {
class T1525r8 {
    public static void main(String[] args) {
	boolean b;
	boolean x = (args.length > 0 || (b = false)) ? true : b;
	System.out.print(x);
    }
}
    }]

} {false}

15.26.1

Directory : tests/runtime/jls/expressions/assignment-operators/simple-assignment-operator


Test Case: 15.26.1-runtime-1
Sun bug 4368664: with multi-dimensioned local variables initialized to null, the verifier needs to know that an array assignment is still legal

Expected Result: OK

Regression Test:

tcltest::test 15.26.1-runtime-1 { Sun bug 4368664: with multi-dimensioned
        local variables initialized to null, the verifier needs to know that
        an array assignment is still legal } {
    
    compile_and_run [saveas T15261r1.java {
class T15261r1 {
    public static void main(String[] args) {
	try {
	    // prior to JDK 1.5, the compiler must insert a checkcast when
	    // assigning null to an array type
	    int[][] i = null;
	    i[0] = new int[0];
	} catch (NullPointerException e) {
	    System.out.print('O');
	}
	try {
	    int[][] i;
	    i = null;
	    i[0] = new int[0];
	} catch (NullPointerException e) {
	    System.out.print('K');
	}
    }
}
    }]

} {OK}

15.26.2

Directory : tests/runtime/jls/expressions/assignment-operators/compound-assignment-operators


Test Case: 15.26.2-runtime-1
String += char[] should do same as s += char[].toString()

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-runtime-1 { String += char[] should do
        same as s += char[].toString() } {
    
    compile_and_run [saveas T15262r1.java {
class T15262r1 {
    public static void main(String args[]) {
	String s = "";
	char[] c = {'w','r','o','n','g'};
	s += c;
	if (s.equals(c.toString()))
	    System.out.print("OK");
	else
	    System.out.print("WRONG");
    }
}
    }]

} {OK}
Test Case: 15.26.2-runtime-2
String += char[] should do same as s += char[].toString()

Expected Result: OK

Regression Test:

tcltest::test 15.26.2-runtime-2 { String += char[] should do
        same as s += char[].toString() } {
    
    compile_and_run [saveas T15262r2.java {
class T15262r2 {
    public static void main(String args[]) {
        String s = "";
	char[] c = null;
        try {
            s += c;
            if (s.equals("null"))
    	        System.out.print("OK");
            else
	        System.out.print("WRONG string");
        } catch (NullPointerException e) {
            System.out.print("WRONG method");
        }
    }
}
    }]

} {OK}

15.28

Directory : tests/runtime/jls/expressions/constant-expression


Test Case: 15.28-runtime-constant-1
Constant string expressions must be compiled inline, including method returns

Expected Result: true

Regression Test:

tcltest::test 15.28-runtime-constant-1 { Constant string expressions must be
        compiled inline, including method returns } {
    
    compile_and_run [saveas T1528rc1.java {
class T1528rc1 {
    static String blah() { return "foo" + "bar"; }
    public static void main(String[] args) {
       System.out.print("foobar" == blah());
    }
}
    }]

} {true}
Test Case: 15.28-runtime-constant-2
Constant string expressions must be compiled inline, including method call qualifiers

Expected Result: true

Regression Test:

tcltest::test 15.28-runtime-constant-2 { Constant string expressions must be
        compiled inline, including method call qualifiers } {
    
    compile_and_run [saveas T1528rc2.java {
class T1528rc2 {
    public static void main(String[] args) {
       System.out.print("foobar" == ("foo" + "bar").toString());
    }
}
    }]

} {true}
Test Case: 15.28-runtime-constant-3
Constant string expressions must be compiled inline, including synchronized monitors

Expected Result: 1 2 3 4

Regression Test:

tcltest::test 15.28-runtime-constant-3 { Constant string expressions must be
        compiled inline, including synchronized monitors } {
    
    compile_and_run [saveas T1528rc3.java {
class T1528rc3 extends Thread {
    private static int i = 0;
    public static void main(String[] args) {
       synchronized ("foo" + "bar") {
           // did we sync on the same object? If the compiler correctly
           // inlined the String expression, and the JVM correctly
           // does mutual exclusion, then we have already locked
           // "foobar", stopping the second thread in its tracks.
           System.out.print("1 ");
           new T1528rc3().start(); // build new thread
           try {
               sleep(500); // give second thread a chance
           } catch (InterruptedException e) {
           }
           if (i == 2)
           System.out.println(" Constant not inlined; wrong object locked ");
           else if (i == 0)
           System.out.println(" Indeterminate - thread never ran ");
           else if (i == 1)
           System.out.print("3 ");
           else
           System.out.println(" Unexpected result ");
       }
    }
    public void run() {
       System.out.print("2 ");
       i = 1;
       synchronized ("foobar") {
           i = 2;
       }
       System.out.print("4");
    }
}
    }]

} {1 2 3 4}
Test Case: 15.28-runtime-constant-4
Test of the ldc_w bytecode instruction, caused when there are more than 255 entries in the constant pool. In particular, this exposed a buggy constant in one version of jikes which used sipush for a non-short

Expected Result: 30989800

Regression Test:

tcltest::test 15.28-runtime-constant-4 { Test of the ldc_w bytecode
        instruction, caused when there are more than 255 entries in the
        constant pool. In particular, this exposed a buggy constant in one
        version of jikes which used sipush for a non-short } {
    
    set class_data "
class T1528rc4 \{
    public static void main(String\[\] args) \{
        int i = 0;\n"
    set count 0
    while {$count < 400} {
        append class_data "\ti += 100$count;\n"
        incr count
    }
    append class_data "\tSystem.out.print(i);
    \}
\}\n"
    compile_and_run [saveas T1528rc4.java $class_data]

} {30989800}
Test Case: 15.28-runtime-constant-5
Division by integer 0 is not a constant, but must evaulate at runtime to an exception

Expected Result: OK OK

Regression Test:

tcltest::test 15.28-runtime-constant-5 { Division by integer 0 is not a
    constant, but must evaulate at runtime to an exception } {
    
    set result [ok_pass_or_warn [empty_class T1528rc5a {
	final int i = 1 / 0;
        final int j = 1 % 0;
        final long k = 1L / 0;
        final long l = 1L % 0;
        int m = i;
    }]]
    delete T1528rc5a.java
    list $result [compile_and_run -classpath . [saveas T1528rc5b.java {
class T1528rc5b {
    public static void main(String[] args) {
        try {
	    new T1528rc5a();
        } catch (ArithmeticException e) {
            System.out.print("OK");
        }
    }
}
    }]]

} {OK OK}

16.5

Directory : tests/runtime/jls/definite-assignment/anonymous-classes


Test Case: 16.5-runtime-1
Test access of definitely assigned local variable in an anonymous class

Expected Result: 1

Regression Test:

tcltest::test 16.5-runtime-1 { Test access of definitely assigned local
        variable in an anonymous class } {
    
    compile_and_run [saveas T165r1.java {
class T165r1 {
    T165r1(int j) {}
    public static void main(String[] args) {
        final int i;
        new T165r1(i = 1) {
            { System.out.print(i); }
        };
    }
}
    }]

} {1}
Test Case: 16.5-runtime-2
Test access of definitely assigned local variable in an anonymous class

Expected Result: 2

Regression Test:

tcltest::test 16.5-runtime-2 { Test access of definitely assigned local
        variable in an anonymous class } {
    
    compile_and_run [saveas T165r2.java {
class T165r2 {
    public static void main(String[] args) {
        final int i;
	i = 1;
	class Local { int j = i; }
	new Local() {
	    int i = j + 1;
	    { System.out.print(i); }
	};
    }
}
    }]

} {2}
Test Case: 16.5-runtime-3
Test access of definitely assigned local variable in an anonymous class

Expected Result: a b1 c d1 e1

Regression Test:

tcltest::test 16.5-runtime-3 { Test access of definitely assigned local
        variable in an anonymous class } {
    
    compile_and_run [saveas T165r3.java {
class T165r3 {
    public static void main(String[] args) {
	new T165r3(1);
    }
    T165r3(final int i) {
	class L {
	    L() {
		System.out.print("a ");
	    }
	    L(int j) {
		this(new L() {
		    { System.out.print("b" + i + ' '); }
		});
		System.out.print("d" + i + ' ');
            }
	    L(Object o) {
		System.out.print("c ");
	    }
	}
	new L(i) {
	    { System.out.print("e" + i); }
	};
    }
}
    }]

} {a b1 c d1 e1}
Test Case: 16.5-runtime-4
Test access of definitely assigned local variable in an anonymous class

Expected Result: a b c d1 e1

Regression Test:

tcltest::test 16.5-runtime-4 { Test access of definitely assigned local
        variable in an anonymous class } {
    
    compile_and_run [saveas T165r4.java {
class T165r4 {
    public static void main(String[] args) {
	new T165r4(1);
    }
    T165r4(final int i) {
	class L {
	    private L() {
		System.out.print("a ");
	    }
	    private L(int j) {
		this(new L() {
		    { System.out.print("b "); }
		});
		System.out.print("d" + i + ' ');
            }
	    private L(Object o) {
		System.out.print("c ");
	    }
	}
	new L(i) {
	    { System.out.print("e" + i); }
	};
    }
}
    }]

} {a b c d1 e1}
Test Case: 16.5-runtime-5
Test access of definitely assigned local variable in an anonymous class

Expected Result: 1

Regression Test:

tcltest::test 16.5-runtime-5 { Test access of definitely assigned local
        variable in an anonymous class } {
    
    compile_and_run [saveas T165r5.java {
class T165r5 {
    public static void main(String[] args) {
	final int i;
	i = 1;
	class A {
	    class B {
		class C {
		    {
			new A() {
			    { System.out.print(i); }
			};
		    }
		}
	    }
	}
	new A(){}.new B(){}.new C(){};
    }
}
    }]

} {1}

41.3

Directory : tests/runtime/non-jls/assert


Test Case: non-jls-jsr41.3-runtime-1
Asserts must be enabled before class is initialized

Expected Result: true false

Regression Test:

tcltest::test non-jls-jsr41.3-runtime-1 { Asserts must be enabled before
        class is initialized } {
    
    compile_and_run [saveas T413r1.java {
class T413r1 {
    public static void main(String args[]) {
        T413r1.class.getClassLoader().setDefaultAssertionStatus(false);
        Baz.testAsserts(); // Will execute after Baz is initialized.
    }
}
class Bar {
    static {
        Baz.testAsserts(); // Will execute before Baz is initialized!
    }
}
class Baz extends Bar {
    static void testAsserts(){
        boolean enabled = false;
        assert enabled = true;
        System.out.print(enabled + " ");
    }
}
    }]

} {true false }
Test Case: non-jls-jsr41.3-runtime-2
Asserts do not cause class initialization

Expected Result: AOK

Regression Test:

tcltest::test non-jls-jsr41.3-runtime-2 { Asserts do not cause class
        initialization } {
    
    compile_and_run [saveas T413r2b.java {
class T413r2a {
    static { System.out.print(" oops "); }
    static class Inner {
	static { System.out.print('O'); }
	static void m() {
	    boolean b = true;
	    assert b;
	}
    }
}
class T413r2b {
    public static void main(String[] args) {
	System.out.print('A');
	T413r2a.Inner.m();
	System.out.print('K');
    }
}
    }]

} {AOK}

non-jls tests


41.2

Directory : tests/non-jls/assert/syntax


Test Case: non-jls-jsr41.2-syntax-1
the one-argument form of assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-1 { the one-argument form of
        assert } {
    
    empty_main T412s1 {
	assert false;
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-2
the one-argument form of assert must have a boolean condition

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-2 { the one-argument form of assert must
        have a boolean condition } {
    
    empty_main T412s2 {
	assert 1;
    }

} {FAIL}
Test Case: non-jls-jsr41.2-syntax-3
the one-argument form of assert must have a boolean condition

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-3 { the one-argument form of assert must
        have a boolean condition } {
    
    empty_main T412s3 {
	assert null;
    }

} {FAIL}
Test Case: non-jls-jsr41.2-syntax-4
the one-argument form of assert must have a boolean condition

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-4 { the one-argument form of assert must
        have a boolean condition } {
    
    empty_main T412s4 {
	assert new Object();
    }

} {FAIL}
Test Case: non-jls-jsr41.2-syntax-5
the one-argument form of assert must have a boolean condition

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-5 { the one-argument form of assert must
        have a boolean condition } {
    
    empty_main T412s5 {
	assert System.out.println();
    }

} {FAIL}
Test Case: non-jls-jsr41.2-syntax-6
the two-argument form of assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-6 { the two-argument form of
        assert } {
    
    empty_main T412s6 {
	assert false : "Bad code!";
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-7
in the two-argument form of assert, the first argument must be boolean

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-7 { in the two-argument form of assert,
        the first argument must be boolean } {
    
    empty_main T412s7 {
	assert 1 : "Bad code!";
    }

} {FAIL}
Test Case: non-jls-jsr41.2-syntax-8
in the two-argument form of assert, the first argument must be boolean

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-8 { in the two-argument form of assert,
        the first argument must be boolean } {
    
    empty_main T412s8 {
	assert null : "Bad code!";
    }

} {FAIL}
Test Case: non-jls-jsr41.2-syntax-9
in the two-argument form of assert, the first argument must be boolean

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-9 { in the two-argument form of assert,
        the first argument must be boolean } {
    
    empty_main T412s9 {
	assert new Object() : "Bad code!";
    }

} {FAIL}
Test Case: non-jls-jsr41.2-syntax-10
in the two-argument form of assert, the first argument must be boolean

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-10 { in the two-argument form of assert,
        the first argument must be boolean } {
    
    empty_main T412s10 {
	assert System.out.println() : "Bad code!";
    }

} {FAIL}
Test Case: non-jls-jsr41.2-syntax-11
in the two-argument form of assert, the second argument may be anything but void

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-11 { in the two-argument form of assert,
        the second argument may be anything but void } {
    
    empty_main T412s11 {
	assert false : null;
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-12
in the two-argument form of assert, the second argument may be anything but void

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-12 { in the two-argument form of assert,
        the second argument may be anything but void } {
    
    empty_main T412s12 {
	assert false : new Object();
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-13
in the two-argument form of assert, the second argument may be anything but void

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-13 { in the two-argument form of assert,
        the second argument may be anything but void } {
    
    empty_main T412s13 {
	assert false : "String";
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-14
in the two-argument form of assert, the second argument may be anything but void

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-14 { in the two-argument form of assert,
        the second argument may be anything but void } {
    
    empty_main T412s14 {
	assert false : true;
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-15
in the two-argument form of assert, the second argument may be anything but void

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-15 { in the two-argument form of assert,
        the second argument may be anything but void } {
    
    empty_main T412s15 {
	assert false : (byte) 1;
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-16
in the two-argument form of assert, the second argument may be anything but void

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-16 { in the two-argument form of assert,
        the second argument may be anything but void } {
    
    empty_main T412s16 {
	assert false : (short) 1;
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-17
in the two-argument form of assert, the second argument may be anything but void

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-17 { in the two-argument form of assert,
        the second argument may be anything but void } {
    
    empty_main T412s17 {
	assert false : '1';
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-18
in the two-argument form of assert, the second argument may be anything but void

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-18 { in the two-argument form of assert,
        the second argument may be anything but void } {
    
    empty_main T412s18 {
	assert false : 1;
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-19
in the two-argument form of assert, the second argument may be anything but void

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-19 { in the two-argument form of assert,
        the second argument may be anything but void } {
    
    empty_main T412s19 {
	assert false : 1L;
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-20
in the two-argument form of assert, the second argument may be anything but void

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-20 { in the two-argument form of assert,
        the second argument may be anything but void } {
    
    empty_main T412s20 {
	assert false : 1f;
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-21
in the two-argument form of assert, the second argument may be anything but void

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-21 { in the two-argument form of assert,
        the second argument may be anything but void } {
    
    empty_main T412s21 {
	assert false : 1.0;
    }

} {PASS}
Test Case: non-jls-jsr41.2-syntax-22
in the two-argument form of assert, the second argument may be anything but void

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.2-syntax-22 { in the two-argument form of assert,
        the second argument may be anything but void } {
    
    empty_main T412s22 {
	assert false : System.out.println();
    }

} {FAIL}
Test Case: non-jls-jsr41.2-nesting-1
The assert statement has no trailing substatement. This tests that a source-to-source translation doesn't mismatch the implicit if statement of the assert with the trailing else statements, provided definite assignment works correctly.

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-nesting-1 { The assert statement has no trailing
        substatement.  This tests that a source-to-source translation
        doesn't mismatch the implicit if statement of the assert with
        the trailing else statements, provided definite assignment
        works correctly. } {
    
    empty_main T412n1 {
        final int i;
        i = 1;
	if (true)
	    assert false;
        else
            i = 1; // definite assignment allows this in provably dead branch
    }

} {PASS}
Test Case: non-jls-jsr41.2-nesting-2
The four legal uses of : nested in one statement

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-nesting-2 { The four legal uses of : nested in
        one statement } {
    
    empty_main T412n2 {
	int i = 1;
	switch (i) {
	case 1: label: assert i==1 ? true : false : i==1 ? "yes" : "no";
	}
    }

} {PASS}
Test Case: non-jls-jsr41.2-nesting-3
The arguments of assert may be any expression

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-nesting-3 { The arguments of assert may be any
        expression } {
    
    empty_main T412n3 {
	boolean b = true;
	int i;
	assert b &= false ^ (1L * 4 >>> 3 < 17.5) || "" != null : i = 1;
    }

} {PASS}
Test Case: non-jls-jsr41.2-nesting-4
The arguments of assert may be any expression (see Sun bug 4446137 for this example)

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.2-nesting-4 { The arguments of assert may be any
        expression (see Sun bug 4446137 for this example) } {
    
    empty_main T412n4 {
	int i = 1;
	assert (i & 1) == 0;
	assert ((i & 1) == 0);
	assert 0 == (i & 1);
    }

} {PASS}
Test Case: non-jls-jsr41.2-clash-1
The synthetic name used by the compiler should not clash with user names (if only the JLS would give compilers a reserved namespace...)

Expected Result: OK

Regression Test:

tcltest::test non-jls-jsr41.2-clash-1 { The synthetic name used by the compiler
        should not clash with user names (if only the JLS would give compilers
        a reserved namespace...) } {
    
    ok_pass_or_warn [empty_class T412c1 {
	int $assertionsDisabled = 1;
        void foo() {
	    assert false : $assertionsDisabled + 1;
	}
    }]

} {OK}

41.4

Directory : tests/non-jls/assert/definite-assignment


Test Case: non-jls-jsr41.4-definite-assignment-fail-1
V is DA before Expression1 iff V is DA before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-1 { V is DA before
        Expression1 iff V is DA before the assert } {
    
    empty_main T414daf1 {
	boolean b;
	assert b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-fail-2
V is DA before Expression2 iff V is DA after Expression1 when false

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-2 { V is DA before
        Expression2 iff V is DA after Expression1 when false } {
    
    empty_main T414daf2 {
	boolean b, b1 = false;
	assert b1 : b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-fail-3
V is DA before Expression2 iff V is DA after Expression1 when false

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-3 { V is DA before
        Expression2 iff V is DA after Expression1 when false } {
    
    empty_main T414daf3 {
	boolean b;
	assert false : b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-fail-4
V is DA after the assert iff V is DA before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-4 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414daf4 {
	boolean b, b1 = true;
	assert b1;
	b1 = b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-fail-5
V is DA after the assert iff V is DA before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-5 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414daf5 {
	boolean b, b1 = true;
	assert b1 : "";
	b1 = b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-fail-6
V is DA after the assert iff V is DA before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-6 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414daf6 {
	boolean b, b1;
	assert true : "";
	b1 = b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-fail-7
V is DA after the assert iff V is DA before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-7 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414daf7 {
	boolean b, b1;
	assert false : "";
	b1 = b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-fail-8
V is DA after the assert iff V is DA before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-8 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414daf8 {
	boolean b, b1 = true;
	assert b = b1;
	b1 = b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-fail-9
V is DA after the assert iff V is DA before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-9 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414daf9 {
	boolean b, b1;
	assert b = true;
	b1 = b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-fail-10
V is DA after the assert iff V is DA before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-10 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414daf10 {
	boolean b, b1;
	assert b = false;
	b1 = b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-fail-11
V is DA after the assert iff V is DA before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-11 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414daf11 {
	boolean b, b1 = true;
	assert b1 : b = b1;
	b1 = b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-fail-12
V is DA after the assert iff V is DA before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-12 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414daf12 {
	boolean b, b1;
	assert true : b = true;
	b1 = b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-fail-13
V is DA after the assert iff V is DA before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-fail-13 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414daf13 {
	boolean b, b1;
	assert false : b = false;
	b1 = b;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-assignment-pass-1
V is DA before Expression1 iff V is DA before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-pass-1 { V is DA before
        Expression1 iff V is DA before the assert } {
    
    empty_main T414dap1 {
	boolean b = true;
	assert b;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-assignment-pass-2
V is DA before Expression2 iff V is DA after Expression1 when false

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-pass-2 { V is DA before
        Expression2 iff V is DA after Expression1 when false } {
    
    empty_main T414dap2 {
	boolean b;
	assert true : b;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-assignment-pass-3
V is DA before Expression2 iff V is DA after Expression1 when false

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-pass-3 { V is DA before
        Expression2 iff V is DA after Expression1 when false } {
    
    empty_main T414dap3 {
	boolean b = true, b1 = true;
	assert b1 : b;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-assignment-pass-4
V is DA before Expression2 iff V is DA after Expression1 when false

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-pass-4 { V is DA before
        Expression2 iff V is DA after Expression1 when false } {
    
    empty_main T414dap4 {
	boolean b = true;
	assert true : b;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-assignment-pass-5
V is DA before Expression2 iff V is DA after Expression1 when false

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-pass-5 { V is DA before
        Expression2 iff V is DA after Expression1 when false } {
    
    empty_main T414dap5 {
	boolean b = true;
	assert false : b;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-assignment-pass-6
V is DA before Expression2 iff V is DA after Expression1 when false

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-pass-6 { V is DA before
        Expression2 iff V is DA after Expression1 when false } {
    
    empty_main T414dap6 {
	boolean b, b1 = true;
	assert b = b1 : b;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-assignment-pass-7
V is DA before Expression2 iff V is DA after Expression1 when false

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-pass-7 { V is DA before
        Expression2 iff V is DA after Expression1 when false } {
    
    empty_main T414dap7 {
	boolean b;
	assert b = true : b;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-assignment-pass-8
V is DA before Expression2 iff V is DA after Expression1 when false

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-pass-8 { V is DA before
        Expression2 iff V is DA after Expression1 when false } {
    
    empty_main T414dap8 {
	boolean b;
	assert b = false : b;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-assignment-pass-9
V is DA after the assert iff V is DA before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-pass-9 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414dap9 {
	boolean b = true, b1 = true;
	assert b1;
	b1 = b;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-assignment-pass-10
V is DA after the assert iff V is DA before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-pass-10 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414dap10 {
	boolean b = true, b1 = true;
	assert b1 : "";
	b1 = b;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-assignment-pass-11
V is DA after the assert iff V is DA before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-pass-11 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414dap11 {
	boolean b = true, b1;
	assert true : "";
	b1 = b;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-assignment-pass-12
V is DA after the assert iff V is DA before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-assignment-pass-12 { V is DA after
        the assert iff V is DA before the assert } {
    
    empty_main T414dap12 {
	boolean b = true, b1;
	assert false : "";
	b1 = b;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-1
V is DU before Expression1 iff V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-1 { V is DU before
        Expression1 iff V is DU before the assert } {
    
    empty_main T414duf1 {
	final boolean b;
	b = true;
	assert b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-2
V is DU before Expression2 iff V is DU after Expression1 when false

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-2 { V is DU before
        Expression2 iff V is DU after Expression1 when false } {
    
    empty_main T414duf2 {
	final boolean b;
	boolean b1 = b = true;
	assert b1 : b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-3
V is DU before Expression2 iff V is DU after Expression1 when false

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-3 { V is DU before
        Expression2 iff V is DU after Expression1 when false } {
    
    empty_main T414duf3 {
	final boolean b;
	b = true;
	assert false : b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-4
V is DU before Expression2 iff V is DU after Expression1 when false

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-4 { V is DU before
        Expression2 iff V is DU after Expression1 when false } {
    
    empty_main T414duf4 {
	final boolean b;
	boolean b1 = true;
	assert b = b1 : b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-5
V is DU before Expression2 iff V is DU after Expression1 when false

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-5 { V is DU before
        Expression2 iff V is DU after Expression1 when false } {
    
    empty_main T414duf5 {
	final boolean b;
	assert b = true : b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-6
V is DU before Expression2 iff V is DU after Expression1 when false

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-6 { V is DU before
        Expression2 iff V is DU after Expression1 when false } {
    
    empty_main T414duf6 {
	final boolean b;
	assert b = false : b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-7
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-7 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414duf7 {
	final boolean b;
	boolean b1 = b = true;
	assert b1;
	b = b1;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-8
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-8 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414duf8 {
	final boolean b;
	b = true;
	assert true;
	b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-9
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-9 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414duf9 {
	final boolean b;
	b = true;
	assert false;
	b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-10
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-10 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414duf10 {
	final boolean b;
	boolean b1 = b = true;
	assert b1 : "";
	b = b1;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-11
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-11 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414duf11 {
	final boolean b;
	b = true;
	assert true : "";
	b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-12
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-12 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414duf12 {
	final boolean b;
	b = true;
	assert false : "";
	b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-13
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-13 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414duf13 {
	final boolean b;
	boolean b1 = true;
	assert b = b1;
	b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-14
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-14 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414duf14 {
	final boolean b;
	assert b = true;
	b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-15
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-15 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414duf15 {
	final boolean b;
	assert b = false;
	b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-16
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-16 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414duf16 {
	final boolean b;
	boolean b1 = true;
	assert b = b1 : "";
	b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-17
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-17 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414duf17 {
	final boolean b;
	assert b = true : "";
	b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-18
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-18 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414duf18 {
	final boolean b;
	assert b = false : "";
	b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-19
DU only applies to blank finals. Initialized finals cannot be assigned.

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-19 { DU only applies
        to blank finals.  Initialized finals cannot be assigned. } {
    
    empty_main T414duf19 {
	final boolean b = true; // constant
	assert true : b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-20
DU only applies to blank finals. Initialized finals cannot be assigned.

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-20 { DU only applies
        to blank finals.  Initialized finals cannot be assigned. } {
    
    empty_main T414duf20 {
	final boolean b = Boolean.TRUE.booleanValue(); // non-constant
	assert true : b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-21
DU only applies to blank finals. Initialized finals cannot be assigned.

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-21 { DU only applies
        to blank finals.  Initialized finals cannot be assigned. } {
    
    empty_class T414duf21 {
	void foo(final boolean b) {
	    assert true : b = true;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-22
DU only applies to blank finals. Initialized finals cannot be assigned.

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-22 { DU only applies
        to blank finals.  Initialized finals cannot be assigned. } {
    
    empty_main T414duf22 {
	try {
	    throw new Exception();
	} catch (final Exception b) {
	    assert true : b = null;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-23
Blank final fields cannot be assigned outside constructor/initializer.

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-23 { Blank final fields
        cannot be assigned outside constructor/initializer. } {
    
    empty_class T414duf23 {
	static final boolean b;
	static { b = true; }
	void foo() {
	    assert true : b = true;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-fail-24
Blank final fields cannot be assigned outside constructor/initializer.

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-fail-24 { Blank final
        fields cannot be assigned outside constructor/initializer. } {
    
    empty_class T414duf24 {
	final boolean b;
	{ b = true; }
	void foo() {
	    assert true : b = true;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-pass-1
V is DU before Expression1 iff V is DU before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-pass-1 { V is DU before
        Expression1 iff V is DU before the assert } {
    
    empty_main T414dup1 {
	final boolean b;
	assert b = true;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-pass-2
V is DU before Expression2 iff V is DU after Expression1 when false

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-pass-2 { V is DU before
        Expression2 iff V is DU after Expression1 when false } {
    
    empty_main T414dup2 {
	final boolean b;
	b = true;
	assert true : b = true;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-pass-3
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-pass-3 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414dup3 {
	final boolean b;
	boolean b1 = true;
	assert b1;
	b = true;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-pass-4
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-pass-4 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414dup4 {
	final boolean b;
	assert true;
	b = true;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-pass-5
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-pass-5 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414dup5 {
	final boolean b;
	assert false;
	b = true;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-pass-6
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-pass-6 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414dup6 {
	final boolean b;
	boolean b1 = true;
	assert b1 : b = true;
	b = true;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-pass-7
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-pass-7 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414dup7 {
	final boolean b;
	assert true : b = true;
	b = true;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-pass-8
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-pass-8 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414dup8 {
	final boolean b;
	assert false : b = true;
	b = true;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-pass-9
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-pass-9 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414dup9 {
	final boolean b;
	assert (b = true) && false;
	b = true;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-pass-10
V is DU after the assert iff V is DU after Expression1 when true and V is DU before the assert

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-pass-10 { V is DU after
        the assert iff V is DU after Expression1 when true and
        V is DU before the assert } {
    
    empty_main T414dup10 {
	final boolean b;
	assert (b = true) && false : "";
	b = true;
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-try-1
V is DU before a catch block iff V is DU before the try block and V is not reachably assigned in the try block

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-try-1 { V is DU before
        a catch block iff V is DU before the try block and V is not reachably
        assigned in the try block } {
    
    empty_main T414dut1 {
	final boolean b;
	try {
	    assert b = false;
	} catch (AssertionError e) {
	    b = false;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-try-2
V is DU before a finally block iff V is DU before the try block and V is not reachably assigned in the try or catch blocks

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-try-2 { V is DU before
        a finally block iff V is DU before the try block and V is not
        reachably assigned in the try or catch blocks } {
    
    empty_main T414dut2 {
	final boolean b;
	try {
	    assert b = false;
	} finally {
	    b = false;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-try-3
V is DU before a finally block iff V is DU before the try block and V is not reachably assigned in the try or catch blocks

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-try-3 { V is DU before
        a finally block iff V is DU before the try block and V is not
        reachably assigned in the try or catch blocks } {
    
    empty_main T414dut3 {
	final boolean b;
	try {
	    throw new RuntimeException();
	} catch (RuntimeException e) {
	    assert b = false;
	} finally {
	    b = false;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-try-4
V is DU before a finally block iff V is DU before the try block and V is not reachably assigned in the try or catch blocks

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-try-4 { V is DU before
        a finally block iff V is DU before the try block and V is not
        reachably assigned in the try or catch blocks } {
    
    empty_main T414dut4 {
	final boolean b;
	try {
	    assert b = false;
	} catch (AssertionError e) {
	} finally {
	    b = false;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-try-5
V is DU before a catch block iff V is DU before the try block and V is not reachably assigned in the try block

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-try-5 { V is DU before
        a catch block iff V is DU before the try block and V is not reachably
        assigned in the try block } {
    
    empty_main T414dut5 {
	final boolean b;
	try {
	    assert false : b = true;
	} catch (AssertionError e) {
	    b = false;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-try-6
V is DU before a finally block iff V is DU before the try block and V is not reachably assigned in the try or catch blocks

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-try-6 { V is DU before
        a finally block iff V is DU before the try block and V is not
        reachably assigned in the try or catch blocks } {
    
    empty_main T414dut6 {
	final boolean b;
	try {
	    assert false : b = true;
	} finally {
	    b = false;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-try-7
V is DU before a finally block iff V is DU before the try block and V is not reachably assigned in the try or catch blocks

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-try-7 { V is DU before
        a finally block iff V is DU before the try block and V is not
        reachably assigned in the try or catch blocks } {
    
    empty_main T414dut7 {
	final boolean b;
	try {
	    throw new RuntimeException();
	} catch (RuntimeException e) {
	    assert false : b = true;
	} finally {
	    b = false;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-try-8
V is DU before a finally block iff V is DU before the try block and V is not reachably assigned in the try or catch blocks

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-try-8 { V is DU before
        a finally block iff V is DU before the try block and V is not
        reachably assigned in the try or catch blocks } {
    
    empty_main T414dut8 {
	final boolean b;
	try {
	    assert false : b = true;
	} catch (AssertionError e) {
	} finally {
	    b = false;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-definite-unassignment-try-9
V is DU before a catch block iff V is DU before the try block and V is not reachably assigned in the try block

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-try-9 { V is DU before
        a catch block iff V is DU before the try block and V is not reachably
        assigned in the try block } {
    
    empty_main T414dut9 {
	final boolean b;
	try {
	    assert true : b = true;
	} catch (AssertionError e) {
	    b = false;
	}
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-try-10
V is DU before a finally block iff V is DU before the try block and V is not reachably assigned in the try or catch blocks

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-try-10 { V is DU before
        a finally block iff V is DU before the try block and V is not
        reachably assigned in the try or catch blocks } {
    
    empty_main T414dut10 {
	final boolean b;
	try {
	    assert true : b = true;
	} finally {
	    b = false;
	}
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-try-11
V is DU before a finally block iff V is DU before the try block and V is not reachably assigned in the try or catch blocks

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-try-11 { V is DU before
        a finally block iff V is DU before the try block and V is not
        reachably assigned in the try or catch blocks } {
    
    empty_main T414dut11 {
	final boolean b;
	try {
	    throw new RuntimeException();
	} catch (RuntimeException e) {
	    assert true : b = true;
	} finally {
	    b = false;
	}
    }

} {PASS}
Test Case: non-jls-jsr41.4-definite-unassignment-try-12
V is DU before a finally block iff V is DU before the try block and V is not reachably assigned in the try or catch blocks

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-definite-unassignment-try-12 { V is DU before
        a finally block iff V is DU before the try block and V is not
        reachably assigned in the try or catch blocks } {
    
    empty_main T414dut12 {
	final boolean b;
	try {
	    assert true : b = true;
	} catch (AssertionError e) {
	} finally {
	    b = false;
	}
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-1
v must not be multiply assigned in loops

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-loop-1 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l1 {
	final boolean b;
	while (true)
	    assert (b = true) && false;
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-2
v must not be multiply assigned in loops

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-loop-2 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l2 {
	for (final boolean b; ; )
	    assert (b = true) && false;
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-3
v must not be multiply assigned in loops

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-loop-3 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l3 {
	final boolean b;
	do
	    assert (b = true) && false;
	while (true);
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-4
v must not be multiply assigned in loops

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-loop-4 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l4 {
	final boolean b;
	while (true)
	    assert b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-loop-5
v must not be multiply assigned in loops

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-loop-5 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l5 {
	for (final boolean b; ; )
	    assert b = true;
    }

} {FAIL}
Test Case: non-jls-jsr41.4-loop-6
v must not be multiply assigned in loops

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-loop-6 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l6 {
	final boolean b;
	do
	    assert b = true;
	while (true);
    }

} {FAIL}
Test Case: non-jls-jsr41.4-loop-7
v must not be multiply assigned in loops

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-loop-7 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l7 {
	final boolean b;
	while (true) {
	    assert b = true;
	    break;
	}
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-8
v must not be multiply assigned in loops

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-loop-8 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l8 {
	for (final boolean b; ; ) {
	    assert b = true;
	    break;
	}
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-9
v must not be multiply assigned in loops

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-loop-9 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l9 {
	final boolean b;
	do
	    assert b = true;
	while (false);
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-10
v must not be multiply assigned in loops

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-loop-10 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l10 {
	final boolean b;
	while (true)
	    assert true : b = true; // assignment not reachable
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-11
v must not be multiply assigned in loops

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-loop-11 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l11 {
	for (final boolean b; ; )
	    assert true : b = true; // assignment not reachable
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-12
v must not be multiply assigned in loops

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-loop-12 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l12 {
	final boolean b;
	do
	    assert true : b = true; // assignment not reachable
	while (true);
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-13
v must not be multiply assigned in loops

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-loop-13 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l13 {
	final boolean b;
	while (true)
	    assert false : b = true; // if assigned, loop completes abruptly
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-14
v must not be multiply assigned in loops

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-loop-14 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l14 {
	for (final boolean b; ; )
	    assert false : b = true; // if assigned, loop completes abruptly
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-15
v must not be multiply assigned in loops

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-loop-15 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l15 {
	final boolean b;
	do
	    assert false : b = true; // if assigned, loop completes abruptly
	while (true);
    }

} {PASS}
Test Case: non-jls-jsr41.4-loop-16
v must not be multiply assigned in loops

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-loop-16 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l16 {
	final boolean b;
	while (true) {
	    assert b = true;
	    assert false;
	    // even though an observer can prove that if b is assigned, the
	    // loop will complete abruptly, DU rules forbid this construct
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-loop-17
v must not be multiply assigned in loops

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-loop-17 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l17 {
	for (final boolean b; ; ) {
	    assert b = true;
	    assert false;
	    // even though an observer can prove that if b is assigned, the
	    // loop will complete abruptly, DU rules forbid this construct
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-loop-18
v must not be multiply assigned in loops

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-loop-18 { v must not be multiply assigned in
        loops } {
    
    empty_main T414l18 {
	final boolean b;
	do {
	    assert b = true;
	    assert false;
	    // even though an observer can prove that if b is assigned, the
	    // loop will complete abruptly, DU rules forbid this construct
	} while (true);
    }

} {FAIL}
Test Case: non-jls-jsr41.4-reachability-1
an assert can complete normally iff it is reachable

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-reachability-1 { an assert can complete normally
        iff it is reachable } {
    
    empty_main T414r1 {
	System.out.println();
	assert false;
	System.out.println();
    }

} {PASS}
Test Case: non-jls-jsr41.4-reachability-2
an assert can complete normally iff it is reachable

Expected Result: PASS

Regression Test:

tcltest::test non-jls-jsr41.4-reachability-2 { an assert can complete normally
        iff it is reachable } {
    
    empty_main T414r2 {
	System.out.println();
	assert false : "";
	System.out.println();
    }

} {PASS}
Test Case: non-jls-jsr41.4-reachability-3
an assert can complete normally iff it is reachable, but non-void methods cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-reachability-3 { an assert can complete normally
        iff it is reachable, but non-void methods cannot complete
        normally } {
    
    empty_class T414r3 {
	int foo() {
	    assert false;
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-reachability-4
an assert can complete normally iff it is reachable, but non-void methods cannot complete normally

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-reachability-4 { an assert can complete normally
        iff it is reachable, but non-void methods cannot complete
        normally } {
    
    empty_class T414r4 {
	int foo() {
	    assert false : "";
	}
    }

} {FAIL}
Test Case: non-jls-jsr41.4-reachability-5
an assert must be reachable

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-jsr41.4-reachability-5 { an assert must be
        reachable } {
    
    empty_main T414r5 {
	return;
	assert false;
    }

} {FAIL}

argument-expansion

Directory : tests/non-jls/argument-expansion


Test Case: non-jls-argument-expansion-1
Under Windows, the compiler should expand command line arguments

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-1 { Under Windows, the compiler
        should expand command line arguments } {
    
    compile C*.java D3.java

} {PASS}
Test Case: non-jls-argument-expansion-2
The @ symbol indicates that the compiler should read file names from the given file

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-2 { The @ symbol indicates that
        the compiler should read file names from the given file} {
    
    saveas list2 "C1.java"
    compile @list2

} {PASS}
Test Case: non-jls-argument-expansion-3
EOL chars in @ file argument

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-3 { EOL chars in @ file
        argument } {
    
    saveas list3 "C1.java\nC2.java"
    compile @list3

} {PASS}
Test Case: non-jls-argument-expansion-4
EOL chars in @ file argument

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-4 { EOL chars in @ file
        argument } {
    
    saveas list4 "C1.java\r\nC2.java"
    compile @list4

} {PASS}
Test Case: non-jls-argument-expansion-5
EOL chars in @ file argument

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-5 { EOL chars in @ file
        argument } {
    
    saveas list5 "C1.java\rC2.java"
    compile @list5

} {PASS}
Test Case: non-jls-argument-expansion-6
Empty line in @ file argument

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-6 { Empty line in @ file
        argument } {
    
    saveas list6 "C1.java\n\rC2.java"
    compile @list6

} {PASS}
Test Case: non-jls-argument-expansion-7
Spaces in a @ argument file should not cause the compile to fail

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-7 { Spaces in a @ argument file
        should not cause the compile to fail } {
    
    saveas list7 "C1.java \n C2.java "
    compile @list7

} {PASS}
Test Case: non-jls-argument-expansion-8
Tabs in a @ argument file should not cause the compile to fail

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-8 { Tabs in a @ argument file
        should not cause the compile to fail } {
    
    saveas list8 "\tC1.java\nC2.java\t"
    compile @list8

} {PASS}
Test Case: non-jls-argument-expansion-9
Tabs and spaces in a @ argument file should not cause the compile to fail

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-9 { Tabs and spaces in a @ argument
        file should not cause the compile to fail } {
    
    saveas list9 "\t C1.java \n C2.java \t"
    compile @list9

} {PASS}
Test Case: non-jls-argument-expansion-10
Tabs and spaces in empty line of a @ argument should be ignored

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-10 { Tabs and spaces in empty line
        of a @ argument should be ignored } {
    
    saveas list10 "C1.java\n\t \nC2.java"
    compile @list10

} {PASS}
Test Case: non-jls-argument-expansion-11
Expand empty @ argument. this will terminate without doing anything for JDK 1.3 compatibility

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-11 { Expand empty @ argument.
        this will terminate without doing anything for JDK 1.3
        compatibility } {
    
    saveas list11 ""
    compile @list11

} {PASS}
Test Case: non-jls-argument-expansion-12
Expand empty @ argument

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-12 { Expand empty @ argument
    } {
    
    saveas list12 "\n\n"
    compile @list12

} {PASS}
Test Case: non-jls-argument-expansion-13
Expand empty @ argument

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-13 { Expand empty @ argument
    } {
    
    saveas list13 ""
    compile C1.java @list13

} {PASS}
Test Case: non-jls-argument-expansion-error-1
Error: Same class compiled twice

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-argument-expansion-error-1 { Error: Same class compiled
    twice } {
    
    saveas error1 "C1.java"
    compile C1.java @error1

} {FAIL}
Test Case: non-jls-argument-expansion-error-2
Error: Same class compiled twice

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-argument-expansion-error-2 { Error: Same class compiled
    twice } {
    
    saveas error2 "C1.java C1.java"
    compile @error2

} {FAIL}
Test Case: non-jls-argument-expansion-error-3
Error: @ file does not exist

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-argument-expansion-error-3 { Error: @ file does not exist
    } {
    
    compile @notthere

} {FAIL}
Test Case: non-jls-argument-expansion-tokens-1
Two files on the same line are NOT parsed as two tokens

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-argument-expansion-tokens-1 { Two files on
    the same line are NOT parsed as two tokens } {
    
    saveas tokens1 "C1.java C2.java"
    compile @tokens1

} {FAIL}
Test Case: non-jls-argument-expansion-tokens-2
A file name surrounded by double quotes is valid

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-tokens-2 { A file name
    surrounded by double quotes is valid } {
    
    saveas tokens2 "\"C1.java\""
    compile @tokens2

} {PASS}
Test Case: non-jls-argument-expansion-tokens-3
A empty file name is not valid

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-argument-expansion-tokens-3 { A empty
    file name is not valid } {
    
    saveas tokens3 "\"\""
    compile @tokens3

} {FAIL}
Test Case: non-jls-argument-expansion-tokens-4
A file name the contains a space surrounded by double quotes is valid

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-tokens-4 { A file name
    the contains a space surrounded by double quotes is valid } {
    
    saveas "With Space.java" {class WithSpace {}}
    saveas tokens4 "\"With Space.java\""
    compile @tokens4

} {PASS}
Test Case: non-jls-argument-expansion-tokens-5
A file name the contains a space surrounded by double quotes is valid

Expected Result: PASS

Regression Test:

tcltest::test non-jls-argument-expansion-tokens-5 { A file name
    the contains a space surrounded by double quotes is valid } {
    
    saveas "Dir With Space/Space2.java" {class Space2 {}}
    saveas tokens5 "\"Dir With Space/Space2.java\""
    compile @tokens5

} {PASS}
Test Case: non-jls-argument-expansion-tokens-6
@ files may not invoke other @ files

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-argument-expansion-tokens-6 { @ files may not invoke
    other @ files } {
    
    saveas tokens6 "C1.java"
    saveas tokens6a "@tokens10"
    compile @tokens6a

} {FAIL}

encoding

Directory : tests/non-jls/encoding


Test Case: non-jls-encoding-1
works with the cp437 encoding

Expected Result: PASS

Regression Test:

tcltest::test non-jls-encoding-1 { works with the
        cp437 encoding } {
    
    constant_encoded_expression E1 cp437  \x84 {\u00e4}

} {PASS}
Test Case: non-jls-encoding-2
same character in utf-8

Expected Result: PASS

Regression Test:

tcltest::test non-jls-encoding-2 { same character in
        utf-8 } {
    
    constant_encoded_expression E2 utf-8  \xC3\xA4 {\u00e4}

} {PASS}
Test Case: non-jls-encoding-3
257 is out of the ASCII range, but in 8859-1 it is defined as lower case a with macron from Latin Extended-A

Expected Result: PASS

Regression Test:

tcltest::test non-jls-encoding-3 { 257 is out of the
        ASCII range, but in 8859-1 it is defined as
        lower case a with macron from Latin
        Extended-A  } {
    
    constant_encoded_expression E3 ISO-8859-4  \xE0 {\u0101}

} {PASS}
Test Case: non-jls-encoding-4
same character in utf-8

Expected Result: PASS

Regression Test:

tcltest::test non-jls-encoding-4 { same character in
        utf-8 } {
    
    constant_encoded_expression E4 utf-8  \xC4\x81 {\u0101}

} {PASS}
Test Case: non-jls-encoding-5
65533 (FFFD) is the last symbol in "Specials" category

Expected Result: PASS

Regression Test:

tcltest::test non-jls-encoding-5 { 65533 (FFFD) is the last
          symbol in "Specials" category } {
    
    constant_encoded_expression E5 utf-8  \xEF\xBF\xBD {\uFFFD}

} {PASS}
Test Case: non-jls-encoding-6
Latin small letter e with acute (233) is in the Latin-1 Suppliment

Expected Result: PASS

Regression Test:

tcltest::test non-jls-encoding-6 { Latin small letter e with
        acute (233) is in the Latin-1 Suppliment } {
    
    constant_encoded_expression E6 iso-8859-1  \xE9 {\u00E9}

} {PASS}
Test Case: non-jls-invalid-encoding-1
Unknown encoding

Expected Result: FAIL

Regression Test:

tcltest::test non-jls-invalid-encoding-1 { Unknown encoding
        } {
    
    saveas invalid-encoding.java {
class invalid-encoding {}
    }

    compile -encoding FooIsNotValidOnAnyCompilerIKnow  invalid-encoding.java

} {FAIL}

random-crashers

Directory : tests/non-jls/random-crashers


Test Case: non-jls-random-crashers-1
crash

Expected Result: PASS

Regression Test:

tcltest::test non-jls-random-crashers-1 { crash } {
    
    saveas I.java {
public interface I {
    int hashCode();
}
}

    saveas I2.java {
interface I2 extends I { }
}

    compile I.java I2.java

} {PASS}

zip

Directory : tests/non-jls/zip


Test Case: non-jls-zip-1
Load .class file from zip without comment

Expected Result: PASS

Regression Test:

tcltest::test non-jls-zip-1 {Load .class file from zip without comment} {
    
    saveas ZipNoComment.java {
class ZipNoComment {
  pkg.Example inst;
}
}
    compile -classpath ZipNoComment.zip ZipNoComment.java

} {PASS}
Test Case: non-jls-zip-2
Load .class file from zip with comment

Expected Result: PASS

Regression Test:

tcltest::test non-jls-zip-2 {Load .class file from zip with comment} {
    
    saveas ZipComment.java {
class ZipComment {
  pkg.Example inst;
}
}
    compile -classpath ZipComment.zip ZipComment.java

} {PASS}
Test Case: non-jls-zip-3
Load .class file from a compressed zip

Expected Result: PASS

Regression Test:

tcltest::test non-jls-zip-3 {Load .class file from a compressed zip} {
    
    saveas ZipCompressed.java {
class ZipCompressed {
  pkg.Example inst;
}
}
    compile -classpath ZipCompressed.zip ZipCompressed.java

} {PASS}
Test Case: non-jls-zip-4
ignore zip file that does not exist

Expected Result: OK

Regression Test:

tcltest::test non-jls-zip-4 {ignore zip file that does not exist} {
    
    saveas ZipNotThere.java {class ZipNotThere {}}
    ok_pass_or_warn  [compile -classpath ZipNotThere.zip ZipNotThere.java]

} {OK}

gcj tests


gcj

Directory : tests/gcj


Test Case: gcj-PR198
test case for gcj PR198

Expected Result: PASS

Regression Test:

tcltest::test gcj-PR198 { test case for gcj PR198 } {
    
  compile PR198.java

} {PASS}

jikes tests


3.1

Directory : tests/jikes/jls/lexical-structure/unicode


Test Case: 3.1-jikes-comments-non-ascii-1
a comment can be formed from non-ASCII characters, Jikes should convert an 8 bit character to unicode without an encoding

Expected Result: PASS

Regression Test:

tcltest::test 3.1-jikes-comments-non-ascii-1 { a comment can be
        formed from non-ASCII characters, Jikes should convert
        an 8 bit character to unicode without an encoding } {
    
    empty_class T31jcna1 "\n // A comment \xa3 \n"

} {PASS}
Test Case: 3.1-jikes-identifier-non-ascii-1
an identifier can be formed from non-ASCII characters, Jikes should convert an 8 bit character to unicode without an encoding

Expected Result: PASS

Regression Test:

tcltest::test 3.1-jikes-identifier-non-ascii-1 { an identifier can
        be formed from non-ASCII characters, Jikes should convert
        an 8 bit character to unicode without an encoding } {
    
    empty_main T31jina1 "int \xa3 = 0; \n \xa3 = 1;"

} {PASS}
Test Case: 3.1-jikes-character-literal-non-ascii-1
a character literal can be formed from non-ASCII characters, Jikes should convert an 8 bit character to unicode without an encoding

Expected Result: PASS

Regression Test:

tcltest::test 3.1-jikes-character-literal-non-ascii-1 { a character
        literal can be formed from non-ASCII characters, Jikes should
        convert an 8 bit character to unicode without an encoding } {
    
    empty_class T31jclna1 "char c = '\xa3';"

} {PASS}
Test Case: 3.1-jikes-string-literal-non-ascii-1
a string literal can be formed from non-ASCII characters, Jikes should convert an 8 bit character to unicode without an encoding

Expected Result: PASS

Regression Test:

tcltest::test 3.1-jikes-string-literal-non-ascii-1 { a string
        literal can be formed from non-ASCII characters, Jikes should
        convert an 8 bit character to unicode without an encoding } {
    
    empty_class T31jslna1 "String s = \"\xa3\";"

} {PASS}
Test Case: 3.1-jikes-non-ascii-1
0xF7 returns false for Character.isJavaIdentifierStart() so it is not a valid identifier

Expected Result: FAIL

Regression Test:

tcltest::test 3.1-jikes-non-ascii-1 { 0xF7 returns false for
        Character.isJavaIdentifierStart() so it is not a
        valid identifier } {
    
    compile [saveas T31jna1.java "class T31na2 { \xF7 v; }\n"]

} {FAIL}

3.10.4

Directory : tests/jikes/jls/lexical-structure/literals/character-literals


Test Case: 3.10.4-jikes-non-ascii-1
It is a compile-time error for the character following the SingleCharacter be other than a '. We check the format of the printed error message for this case to make sure a valid \uXXXX escape sequence appears in the error message.

Expected Result: FAIL 1

Regression Test:

tcltest::test 3.10.4-jikes-non-ascii-1 { It is a compile-time
        error for the character following the SingleCharacter
        be other than a '. We check the format of the printed
        error message for this case to make sure a valid
        \uXXXX escape sequence appears in the error message. } {
    

    saveas T3104jna1.java "
        class T3104jna1 {
            char c = 'a\xa3';
        }
    "
    list [compile T3104jna1.java] [expr {
	[match_err_or_warn {*\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]*}]
	+ [match_err_or_warn {*£*}]}]

} {FAIL 1}
Test Case: 3.10.4-jikes-non-ascii-2
It is a compile-time error for the character following the EscapeSequence be other than a '. We check the format of the printed error message for this case to make sure a valid \uXXXX escape sequence appears in the error message.

Expected Result: FAIL 1

Regression Test:

tcltest::test 3.10.4-jikes-non-ascii-2 { It is a compile-time
        error for the character following the EscapeSequence
        be other than a '. We check the format of the printed
        error message for this case to make sure a valid
        \uXXXX escape sequence appears in the error message. } {
    

    saveas T3104jna2.java {
        class T3104jna2 {
            char c = '\u0e0ea';
        }
    }
    list [compile T3104jna2.java]  [match_err_or_warn  {*\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]*}]

} {FAIL 1}

7.5.2

Directory : tests/jikes/jls/packages/import-declarations/type-import-on-demand-declaration


Test Case: 7.5.2-jikes-package-not-found-1
Check the error message printed by Jikes when a package of a given given name can not be found

Expected Result: FAIL 1

Regression Test:

tcltest::test 7.5.2-jikes-package-not-found-1 { Check the error
        message printed by Jikes when a package of a given
        given name can not be found } {
    

    saveas T752pnf1.java {
import pkg.not.found.*;
class NotFound {}
    }

    list [compile -classpath /notadir T752pnf1.java]  [match_err_or_warn  "*Error:*Package \"pkg/not/found\" could not be found in:*"]

} {FAIL 1}

8.3.2

Directory : tests/jikes/jls/classes/field-declarations/initialization-of-fields


Test Case: 8.3.2-jikes-message-1
jikes should not report incompatible types when the initializer already has an error

Expected Result: FAIL 1

Regression Test:

tcltest::test 8.3.2-jikes-message-1 { jikes should not report incompatible
        types when the initializer already has an error } {
    
    list [empty_class T832jm1 {
	T832jm1 t = new T832JM1(); // oops, T832JM1 is mispelled
    }] [match_err_or_warn "*1 semantic error*"]

} {FAIL 1}

8.4.5

Directory : tests/jikes/jls/classes/method-declarations/method-body


Test Case: 8.4.5-jikes-1
see if jikes output is mangled by a typo in src/error.cpp

Expected Result: FAIL 1

Regression Test:

tcltest::test 8.4.5-jikes-1 { see if jikes output is mangled
        by a typo in src/error.cpp } {
    
    saveas MangleJikesOutputNoReturn.java {
class MangleJikesOutputNoReturn {
    boolean processCommand(String s) {}
}
    }

    list [compile MangleJikesOutputNoReturn.java]  [match_err_or_warn  "*Error:*contain a return statement with an expression compatible*"]

} {FAIL 1}

8.8.5.1

Directory : tests/jikes/jls/classes/constructor-declarations/constructor-body/explicit-constructor-invocations


Test Case: 8.8.5.1-jikes-before-block-statements-1
An ExplicitConstructorInvocation must appear before the optional BlockStatements

Expected Result: FAIL 1

Regression Test:

tcltest::test 8.8.5.1-jikes-before-block-statements-1 {
        An ExplicitConstructorInvocation must appear
        before the optional BlockStatements } {
    
    list [empty_class T8851jbb1 {
    T8851jbb1() {}
    T8851jbb1(int i) {
        i = 0;
        this();
    }
    }] [match_err_or_warn  "*Error:* first statement in constructor*"]

} {FAIL 1}
Test Case: 8.8.5.1-jikes-before-block-statements-2
An ExplicitConstructorInvocation must appear before the optional BlockStatements

Expected Result: FAIL 1

Regression Test:

tcltest::test 8.8.5.1-jikes-before-block-statements-2 {
        An ExplicitConstructorInvocation must appear
        before the optional BlockStatements } {
    
    list [empty_class T8851jbb2 {
    T8851jbb2() {}
    T8851jbb2(int i) {
        i = 0;
        super();
    }
    }] [match_err_or_warn  "*Error:* first statement in constructor*"]

} {FAIL 1}

14.7

Directory : tests/jikes/jls/blocks-and-statements/labeled-statements


Test Case: 14.7-jikes-message-1
Some versions of jikes grabbed the wrong label in the error message

Expected Result: FAIL 1

Regression Test:

tcltest::test 14.7-jikes-message-1 { Some versions of jikes grabbed the wrong
        label in the error message } {
    
    list [empty_main T147jm1 {
        int i = 1;
        a: labelone:
        a: labeltwo:
        while (i-- > 0) break a;
    }] [match_err_or_warn "*a: labeltwo*"]

} {FAIL 1}

14.19

Directory : tests/jikes/jls/blocks-and-statements/try-statement


Test Case: 14.19-jikes-message-1
Some versions of jikes turned a bad catch into Error, causing spurious warnings about subsequent catches of Error

Expected Result: FAIL 0

Regression Test:

tcltest::test 14.19-jikes-message-1 { Some versions of jikes turned a bad
        catch into Error, causing spurious warnings about subsequent catches
        of Error } {
    
    list [empty_main T1419jm1 {
	try {
	    throw new Error();
	} catch (int e) {
	} catch (Error e) {
	}
    }] [match_err_or_warn "*catch block is unreachable*"]

} {FAIL 0}

14.20

Directory : tests/jikes/jls/blocks-and-statements/unreachable-statements


Test Case: 14.20-jikes-message-1
jikes should not report an unreachable catch clause when fixing an earlier error in the try block can make the catch reachable

Expected Result: FAIL 0

Regression Test:

tcltest::test 14.20-jikes-message-1 { jikes should not report an unreachable
        catch clause when fixing an earlier error in the try block can make
        the catch reachable } {
    
    list [empty_class T1420jm1 {
	class E extends Exception {}
	void longname() throws E {}
	void foo() {
	    try {
		longName(); // oops, misspelled
	    } catch (E e) {
		// would be reachable if error is fixed
	    }
	}
    }] [match_err_or_warn "*catch block is unreachable*"]

} {FAIL 0}
Test Case: 14.20-jikes-message-2
jikes should not report an unreachable catch clause when fixing an earlier error in the try block can make the catch reachable

Expected Result: FAIL 0

Regression Test:

tcltest::test 14.20-jikes-message-2 { jikes should not report an unreachable
        catch clause when fixing an earlier error in the try block can make
        the catch reachable } {
    
    list [empty_class T1420jm2 {
	class E extends Exception {}
	T1420jm2(String s) throws Exception {}
	void foo() {
	    try {
		new T1420jm2('1'); // oops, wrong parameter type
	    } catch (E e) {
		// would be reachable if error is fixed
	    }
	}
    }] [match_err_or_warn "*catch block is unreachable*"]

} {FAIL 0}
Test Case: 14.20-jikes-message-3
jikes should not report an unreachable catch clause when fixing an earlier error in the try block can make the catch reachable

Expected Result: FAIL 0

Regression Test:

tcltest::test 14.20-jikes-message-3 { jikes should not report an unreachable
        catch clause when fixing an earlier error in the try block can make
        the catch reachable } {
    
    list [empty_class T1420jm3 {
	class MyException extends Exception {}
	void foo() {
	    try {
		throw new Myexception(); // oops, misspelled
	    } catch (MyException e) {
		// would be reachable if error is fixed
	    }
	}
    }] [match_err_or_warn "*catch block is unreachable*"]

} {FAIL 0}

jikes

Directory : tests/jikes


Test Case: jikes-1
jikes should fail but not core dump on this dependency

Expected Result: FAIL

Regression Test:

tcltest::test jikes-1 { jikes should fail but not core dump on
        this dependency } {
    
    saveas BrokenDependency.java {
import a_package_that_can_not_be_found.Two;

public class BrokenDependency {
    void foo() {
        Object o = new Two();
    }
}
    }

    # Cleanup the .u file that is produced
    cleanup BrokenDependency.u

    compile -d . +M BrokenDependency.java

} {FAIL}
Test Case: jikes-3
jikes should fail but not core dump on illegal import from anonymous package

Expected Result: FAIL

Regression Test:

tcltest::test jikes-3 { jikes should fail but not core dump on illegal
        import from anonymous package } {
    
    saveas Anon.java {public class Anon {}}
    saveas p/Import.java {
package p;
import Anon; // illegal
class Import {
    Object o = new Anon();
}
    }
    compile +P Anon.java p/Import.java

} {FAIL}

jvms tests


4.7.10

Directory : tests/jvms/class-file-format/attributes/deprecated-attribute


Test Case: 4.7.10-jvms-class-1
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-1 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc1a.java {
// most compact form, need not start line
import java.lang.*;/**@deprecated*/ class T4710jc1a {}
    }]
    delete T4710jc1a.java
    list [compile -classpath . -deprecation [saveas T4710jc1b.java {
class T4710jc1b extends T4710jc1a {}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-class-2
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-2 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc2a.java {
// one-liner form
/** @deprecated */
class T4710jc2a {}
    }]
    delete T4710jc2a.java
    list [compile -classpath . -deprecation [saveas T4710jc2b.java {
class T4710jc2b extends T4710jc2a {}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-class-3
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-3 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc3a.java {
/**
 * all leading whitespace and * are ignored
 	* ** 	 @deprecated
 **/
class T4710jc3a {}
    }]
    delete T4710jc3a.java
    list [compile -classpath . -deprecation [saveas T4710jc3b.java {
class T4710jc3b extends T4710jc3a {}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-class-4
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-4 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc4a.java {
/**
 leading * is optional
 @deprecated
 */
class T4710jc4a {}
    }]
    delete T4710jc4a.java
    list [compile -classpath . -deprecation [saveas T4710jc4b.java {
class T4710jc4b extends T4710jc4a {}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-class-5
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-5 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc5a.java {
/**
 @deprecated
 */ /* */ // additional comments don't matter
class T4710jc5a {}
    }]
    delete T4710jc5a.java
    list [compile -classpath . -deprecation [saveas T4710jc5b.java {
class T4710jc5b extends T4710jc5a {}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-class-6
Test that a class can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-class-6 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc6a.java {
/**
 @deprecated
 */
; // oops, must be directly before class
class T4710jc6a {}
    }]
    delete T4710jc6a.java
    list [compile -classpath . -deprecation [saveas T4710jc6b.java {
class T4710jc6b extends T4710jc6a {}
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-class-7
Test that a class can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-class-7 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc7a.java {
/**
 @deprecated
 */
import java.lang.*; // oops, must be directly before class
class T4710jc7a {}
    }]
    delete T4710jc7a.java
    list [compile -classpath . -deprecation [saveas T4710jc7b.java {
class T4710jc7b extends T4710jc7a {}
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-class-8
Test that a class can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-class-8 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc8a.java {
public
/** oops - too late
 * @deprecated */
       class T4710jc8a {}
    }]
    delete T4710jc8a.java
    list [compile -classpath . -deprecation [saveas T4710jc8b.java {
class T4710jc8b extends T4710jc8a {}
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-class-9
Test that a class can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-class-9 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc9a.java {
/** characters besides whitespace or * before @ deactivate tag @deprecated */
class T4710jc9a {}
    }]
    delete T4710jc9a.java
    list [compile -classpath . -deprecation [saveas T4710jc9b.java {
class T4710jc9b extends T4710jc9a {}
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-class-10
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-10 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc10a.java {
/** @deprecated */
class T4710jc10a {}
    }]
    delete T4710jc10a.java
    list [compile -classpath . -deprecation [saveas T4710jc10b.java {
class T4710jc10b {
    Object o = new T4710jc10a();
}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-class-11
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-11 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc11a.java {
/** @deprecated */
class T4710jc11a {
    static int i;
}
    }]
    delete T4710jc11a.java
    list [compile -classpath . -deprecation [saveas T4710jc11b.java {
class T4710jc11b {
    int i = T4710jc11a.i;
}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-class-12
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-12 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc12a.java {
/** @deprecated */
class T4710jc12a {}
    }]
    delete T4710jc12a.java
    list [compile -classpath . -deprecation [saveas T4710jc12b.java {
class T4710jc12b {
    Object o;
    boolean b = o instanceof T4710jc12a;
}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-class-13
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-13 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc13a.java {
/** @deprecated */
class T4710jc13a {}
    }]
    delete T4710jc13a.java
    list [compile -classpath . -deprecation [saveas T4710jc13b.java {
class T4710jc13b {
    T4710jc13a t;
}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-class-14
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-14 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc14a.java {
/** @deprecated */
class T4710jc14a {}
    }]
    delete T4710jc14a.java
    list [compile -classpath . -deprecation [saveas T4710jc14b.java {
class T4710jc14b {
    T4710jc14a[] t;
}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-class-15
Test that a class can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-class-15 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc15a.java {
/** @deprecated */
/** Only the most recent doc comment applies */
class T4710jc15a {}
    }]
    delete T4710jc15a.java
    list [compile -classpath . -deprecation [saveas T4710jc15b.java {
class T4710jc15b extends T4710jc15a {}
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-class-16
Test that a class can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-class-16 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc16a.java {
/** @deprecated */
/**/ // degenerate doc comment; only most recent one applies
class T4710jc16a {}
    }]
    delete T4710jc16a.java
    list [compile -classpath . -deprecation [saveas T4710jc16b.java {
class T4710jc16b extends T4710jc16a {}
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-class-17
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-17 { Test that a class can be deprecated } {
    
    compile [saveas p1/T4710jc17a.java {
package p1;
/** @deprecated */
public class T4710jc17a {}
    }]
    delete p1/T4710jc17a.java
    list [compile -classpath . -deprecation [saveas T4710jc17b.java {
import p1.T4710jc17a;
class T4710jc17b {}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-class-18
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-18 { Test that a class can be deprecated } {
    
    compile [saveas p1/T4710jc18a.java {
package p1;
/** @deprecated */
public class T4710jc18a {
    public static class Inner {}
}
    }]
    delete p1/T4710jc18a.java
    list [compile -classpath . -deprecation [saveas T4710jc18b.java {
import p1.T4710jc18a.*;
class T4710jc18b extends Inner {}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-class-19
Test that a class can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-class-19 { Test that a class can be deprecated } {
    
    compile [saveas T4710jc19a.java {
public class T4710jc19a {
    /** @deprecated */
    public static class Inner {}
}
    }]
    delete T4710jc19a.java
    list [compile -classpath . -deprecation [saveas T4710jc19b.java {
class T4710jc19b extends T4710jc19a.Inner {}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-method-1
Test that a method can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-method-1 { Test that a method can be deprecated } {
    
    empty_class T4710jm1a {
	// most compact form, need not start line
	int i;/**@deprecated*/ static int m() { return 1; }
    }
    delete T4710jm1a.java
    list [compile -classpath . -deprecation [saveas T4710jm1b.java {
class T4710jm1b { int i = T4710jm1a.m(); }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-method-2
Test that a method can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-method-2 { Test that a method can be deprecated } {
    
    empty_class T4710jm2a {
	// one-liner form
	/** @deprecated */
	static int m() { return 1; }
    }
    delete T4710jm2a.java
    list [compile -classpath . -deprecation [saveas T4710jm2b.java {
class T4710jm2b { int i = T4710jm2a.m(); }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-method-3
Test that a method can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-method-3 { Test that a method can be deprecated } {
    
    empty_class T4710jm3a {
	/**
          * all leading whitespace and * are ignored
	 	* ** 	 @deprecated
	 **/
	static int m() { return 1; }
    }
    delete T4710jm3a.java
    list [compile -classpath . -deprecation [saveas T4710jm3b.java {
class T4710jm3b { int i = T4710jm3a.m(); }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-method-4
Test that a method can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-method-4 { Test that a method can be deprecated } {
    
    empty_class T4710jm4a {
	/**
	  leading * is optional
	  @deprecated
	 */
	static int m() { return 1; }
    }
    delete T4710jm4a.java
    list [compile -classpath . -deprecation [saveas T4710jm4b.java {
class T4710jm4b { int i = T4710jm4a.m(); }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-method-5
Test that a method can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-method-5 { Test that a method can be deprecated } {
    
    empty_class T4710jm5a {
	/**
	  @deprecated
	 */ /* */ // additional comments don't matter
	static int m() { return 1; }
    }
    delete T4710jm5a.java
    list [compile -classpath . -deprecation [saveas T4710jm5b.java {
class T4710jm5b { int i = T4710jm5a.m(); }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-method-6
Test that a method can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-method-6 { Test that a method can be deprecated } {
    
    empty_class T4710jm6a {
	/**
	  @deprecated
	 */
	; // oops, must be directly before method
	static int m() { return 1; }
    }
    delete T4710jm6a.java
    list [compile -classpath . -deprecation [saveas T4710jm6b.java {
class T4710jm6b { int i = T4710jm6a.m(); }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-method-7
Test that a method can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-method-7 { Test that a method can be deprecated } {
    
    empty_class T4710jm7a {
	/**
	  @deprecated
	 */
	int j; // oops, must be directly before method
	static int m() { return 1; }
    }
    delete T4710jm7a.java
    list [compile -classpath . -deprecation [saveas T4710jm7b.java {
class T4710jm7b { int i = T4710jm7a.m(); }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-method-8
Test that a method can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-method-8 { Test that a method can be deprecated } {
    
    empty_class T4710jm8a {
	public
	  /** oops - too late
	   * @deprecated */
               static int m() { return 1; }
    }
    delete T4710jm8a.java
    list [compile -classpath . -deprecation [saveas T4710jm8b.java {
class T4710jm8b { int i = T4710jm8a.m(); }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-method-9
Test that a method can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-method-9 { Test that a method can be deprecated } {
    
    empty_class T4710jm9a {
/** characters besides whitespace or * before @ deactivate tag @deprecated */
        static int m() { return 1; }
    }
    delete T4710jm9a.java
    list [compile -classpath . -deprecation [saveas T4710jm9b.java {
class T4710jm9b { int i = T4710jm9a.m(); }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-method-10
Test that a method can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-method-10 { Test that a method can be deprecated } {
    
    empty_class T4710jm10a {
	/** @deprecated */
        static int m() { return 1; }
    }
    delete T4710jm10a.java
    list [compile -classpath . -deprecation [saveas T4710jm10b.java {
class T4710jm10b extends T4710jm10a { int j = m(); }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-method-11
Test that a method can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-method-11 { Test that a method can be deprecated } {
    
    empty_class T4710jm11a {
	/** @deprecated */
	/** Only the most recent doc comment applies */
	static int m() { return 1; }
    }
    delete T4710jm11a.java
    list [compile -classpath . -deprecation [saveas T4710jm11b.java {
class T4710jm11b { int i = T4710jm11a.m(); }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-method-12
Test that a method can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-method-12 { Test that a method can be deprecated } {
    
    empty_class T4710jm12a {
	/** @deprecated */
	/**/ // degenerate doc comment; only most recent one applies
	static int m() { return 1; }
    }
    delete T4710jm12a.java
    list [compile -classpath . -deprecation [saveas T4710jm12b.java {
class T4710jm12b { int i = T4710jm12a.m(); }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-constructor-1
Test that a constructor can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-constructor-1 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon1a {
	// most compact form, need not start line
	int i;/**@deprecated*/ T4710jcon1a() {}
    }
    delete T4710jcon1a.java
    list [compile -classpath . -deprecation [saveas T4710jcon1b.java {
class T4710jcon1b { { new T4710jcon1a(); } }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-constructor-2
Test that a constructor can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-constructor-2 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon2a {
	// one-liner form
	/** @deprecated */
	T4710jcon2a() {}
    }
    delete T4710jcon2a.java
    list [compile -classpath . -deprecation [saveas T4710jcon2b.java {
class T4710jcon2b { { new T4710jcon2a(); } }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-constructor-3
Test that a constructor can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-constructor-3 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon3a {
	/**
          * all leading whitespace and * are ignored
	 	* ** 	 @deprecated
	 **/
	T4710jcon3a() {}
    }
    delete T4710jcon3a.java
    list [compile -classpath . -deprecation [saveas T4710jcon3b.java {
class T4710jcon3b { { new T4710jcon3a(); } }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-constructor-4
Test that a constructor can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-constructor-4 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon4a {
	/**
	  leading * is optional
	  @deprecated
	 */
	T4710jcon4a() {}
    }
    delete T4710jcon4a.java
    list [compile -classpath . -deprecation [saveas T4710jcon4b.java {
class T4710jcon4b { { new T4710jcon4a(); } }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-constructor-5
Test that a constructor can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-constructor-5 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon5a {
	/**
	  @deprecated
	 */ /* */ // additional comments don't matter
	T4710jcon5a() {}
    }
    delete T4710jcon5a.java
    list [compile -classpath . -deprecation [saveas T4710jcon5b.java {
class T4710jcon5b { { new T4710jcon5a(); } }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-constructor-6
Test that a constructor can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-constructor-6 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon6a {
	/**
	  @deprecated
	 */
	; // oops, must be directly before constructor
	T4710jcon6a() {}
    }
    delete T4710jcon6a.java
    list [compile -classpath . -deprecation [saveas T4710jcon6b.java {
class T4710jcon6b { { new T4710jcon6a(); } }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-constructor-7
Test that a constructor can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-constructor-7 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon7a {
	/**
	  @deprecated
	 */
	int i; // oops, must be directly before constructor
	T4710jcon7a() {}
    }
    delete T4710jcon7a.java
    list [compile -classpath . -deprecation [saveas T4710jcon7b.java {
class T4710jcon7b { { new T4710jcon7a(); } }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-constructor-8
Test that a constructor can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-constructor-8 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon8a {
	public
	  /** oops - too late
	   * @deprecated */
               T4710jcon8a() {}
    }
    delete T4710jcon8a.java
    list [compile -classpath . -deprecation [saveas T4710jcon8b.java {
class T4710jcon8b { { new T4710jcon8a(); } }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-constructor-9
Test that a constructor can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-constructor-9 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon9a {
/** characters besides whitespace or * before @ deactivate tag @deprecated */
        T4710jcon9a() {}
    }
    delete T4710jcon9a.java
    list [compile -classpath . -deprecation [saveas T4710jcon9b.java {
class T4710jcon9b { { new T4710jcon9a(); } }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-constructor-10
Test that a constructor can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-constructor-10 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon10a {
	/** @deprecated */
        T4710jcon10a() {}
    }
    delete T4710jcon10a.java
    list [compile -classpath . -deprecation [saveas T4710jcon10b.java {
class T4710jcon10b extends T4710jcon10a {}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-constructor-11
Test that a constructor can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-constructor-11 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon11a {
	/** @deprecated */
        T4710jcon11a() {}
    }
    delete T4710jcon11a.java
    list [compile -classpath . -deprecation [saveas T4710jcon11b.java {
class T4710jcon11b extends T4710jcon11a {
    T4710jcon11b() {
	super();
    }
}
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-constructor-12
Test that a constructor can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-constructor-12 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon12a {
	/** @deprecated */
        T4710jcon12a() {}
    }
    delete T4710jcon12a.java
    list [compile -classpath . -deprecation [saveas T4710jcon12b.java {
class T4710jcon12b { { new T4710jcon12a() {}; } }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-constructor-13
Test that a constructor can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-constructor-13 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon13a {
	/** @deprecated */
	/** Only the most recent doc comment applies */
	T4710jcon13a() {}
    }
    delete T4710jcon13a.java
    list [compile -classpath . -deprecation [saveas T4710jcon13b.java {
class T4710jcon13b { { new T4710jcon13a() {}; } }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-constructor-14
Test that a constructor can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-constructor-14 { Test that a constructor can be
        deprecated } {
    
    empty_class T4710jcon14a {
	/** @deprecated */
	/**/ // degenerate doc comment; only most recent one applies
	T4710jcon14a() {}
    }
    delete T4710jcon14a.java
    list [compile -classpath . -deprecation [saveas T4710jcon14b.java {
class T4710jcon14b { { new T4710jcon14a() {}; } }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-field-1
Test that a field can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-field-1 { Test that a field can be deprecated } {
    
    empty_class T4710jf1a {
	// most compact form, need not start line
	int j;/**@deprecated*/ static int i;
    }
    delete T4710jf1a.java
    list [compile -classpath . -deprecation [saveas T4710jf1b.java {
class T4710jf1b { int i = T4710jf1a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-field-2
Test that a field can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-field-2 { Test that a field can be deprecated } {
    
    empty_class T4710jf2a {
	// one-liner form
	/** @deprecated */
	static int i;
    }
    delete T4710jf2a.java
    list [compile -classpath . -deprecation [saveas T4710jf2b.java {
class T4710jf2b { int i = T4710jf2a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-field-3
Test that a field can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-field-3 { Test that a field can be deprecated } {
    
    empty_class T4710jf3a {
	/**
          * all leading whitespace and * are ignored
	 	* ** 	 @deprecated
	 **/
	static int i;
    }
    delete T4710jf3a.java
    list [compile -classpath . -deprecation [saveas T4710jf3b.java {
class T4710jf3b { int i = T4710jf3a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-field-4
Test that a field can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-field-4 { Test that a field can be deprecated } {
    
    empty_class T4710jf4a {
	/**
	  leading * is optional
	  @deprecated
	 */
	static int i;
    }
    delete T4710jf4a.java
    list [compile -classpath . -deprecation [saveas T4710jf4b.java {
class T4710jf4b { int i = T4710jf4a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-field-5
Test that a field can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-field-5 { Test that a field can be deprecated } {
    
    empty_class T4710jf5a {
	/**
	  @deprecated
	 */ /* */ // additional comments don't matter
	static int i;
    }
    delete T4710jf5a.java
    list [compile -classpath . -deprecation [saveas T4710jf5b.java {
class T4710jf5b { int i = T4710jf5a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-field-6
Test that a field can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-field-6 { Test that a field can be deprecated } {
    
    empty_class T4710jf6a {
	/**
	  @deprecated
	 */
	; // oops, must be directly before field
	static int i;
    }
    delete T4710jf6a.java
    list [compile -classpath . -deprecation [saveas T4710jf6b.java {
class T4710jf6b { int i = T4710jf6a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-field-7
Test that a field can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-field-7 { Test that a field can be deprecated } {
    
    empty_class T4710jf7a {
	/**
	  @deprecated
	 */
	int j; // oops, must be directly before field
	static int i;
    }
    delete T4710jf7a.java
    list [compile -classpath . -deprecation [saveas T4710jf7b.java {
class T4710jf7b { int i = T4710jf7a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-field-8
Test that a field can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-field-8 { Test that a field can be deprecated } {
    
    empty_class T4710jf8a {
	public
	  /** oops - too late
	   * @deprecated */
               static int i;
    }
    delete T4710jf8a.java
    list [compile -classpath . -deprecation [saveas T4710jf8b.java {
class T4710jf8b { int i = T4710jf8a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-field-9
Test that a field can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-field-9 { Test that a field can be deprecated } {
    
    empty_class T4710jf9a {
/** characters besides whitespace or * before @ deactivate tag @deprecated */
        static int i;
    }
    delete T4710jf9a.java
    list [compile -classpath . -deprecation [saveas T4710jf9b.java {
class T4710jf9b { int i = T4710jf9a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-field-10
Test that a field can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-field-10 { Test that a field can be deprecated } {
    
    empty_class T4710jf10a {
	/** @deprecated */
        static int i;
    }
    delete T4710jf10a.java
    list [compile -classpath . -deprecation [saveas T4710jf10b.java {
class T4710jf10b extends T4710jf10a { int j = i; }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-field-11
Test that a field can be deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-field-11 { Test that a field can be deprecated } {
    
    empty_class T4710jf11a {
	/**
	 * multiple fields in the same declaration are all deprecated
	 * @deprecated
	 */
        static int j, i;
    }
    delete T4710jf11a.java
    list [compile -classpath . -deprecation [saveas T4710jf11b.java {
class T4710jf11b { int i = T4710jf11a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-field-12
Test that a field can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-field-12 { Test that a field can be deprecated } {
    
    empty_class T4710jf12a {
	/** @deprecated */
	/** Only the most recent doc comment applies */
	static int i;
    }
    delete T4710jf12a.java
    list [compile -classpath . -deprecation [saveas T4710jf12b.java {
class T4710jf12b { int i = T4710jf12a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-field-13
Test that a field can be deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-field-13 { Test that a field can be deprecated } {
    
    empty_class T4710jf13a {
	/** @deprecated */
	/**/ // degenerate doc comment; only most recent one applies
	static int i;
    }
    delete T4710jf13a.java
    list [compile -classpath . -deprecation [saveas T4710jf13b.java {
class T4710jf13b { int i = T4710jf13a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-lex-1
Test lexing of deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-lex-1 { Test lexing of deprecated } {
    
    empty_class T4710jl1a {
	/** / before tag disables tag (except starting /**)
	/* @deprecated */
	static int i;
	/**
	/** @deprecated */
	static int j;
    }
    delete T4710j1a.java
    list [compile -classpath . -deprecation [saveas T4710jl1b.java {
class T4710jl1b { int i = T4710jl1a.i + T4710jl1a.j; }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-lex-2
Test lexing of deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-lex-2 { Test lexing of deprecated } {
    
    empty_class T4710jl2a {
	/** whitespace excludes < \u0009, > \u000d
	* @deprecated\u0008 */
	static int i;
	/** @deprecated\u000e */
	static int j;
    }
    delete T4710j2a.java
    list [compile -classpath . -deprecation [saveas T4710jl2b.java {
class T4710jl2b { int i = T4710jl2a.i + T4710jl2a.j; }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-lex-3
Test lexing of deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-lex-3 { Test lexing of deprecated } {
    
    empty_class T4710jl3a {
	/** whitespace excludes < \u001c, > \u0020
	* @deprecated\u001b */
	static int i;
	/** @deprecated\u0021 */
	static int j;
    }
    delete T4710j3a.java
    list [compile -classpath . -deprecation [saveas T4710jl3b.java {
class T4710jl3b { int i = T4710jl3a.i + T4710jl3a.j; }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-lex-4
Test lexing of deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-lex-4 { Test lexing of deprecated } {
    
    empty_class T4710jl4a {
	/** whitespace excludes \u00a0, \u2007, \u202f
	* @deprecated\u00a0 */
	static int i;
	/** @deprecated\u2007 */
	static int j;
	/** @deprecated\u202f */
	static int k;
    }
    delete T4710j4a.java
    list [compile -classpath . -deprecation [saveas T4710jl4b.java {
class T4710jl4b { int i = T4710jl4a.i + T4710jl4a.j + T4710jl4a.k; }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-lex-5
Test lexing of deprecated

Expected Result: PASS 0

Regression Test:

tcltest::test 4.7.10-jvms-lex-5 { Test lexing of deprecated } {
    
    empty_class T4710jl5a {
	/** only Character.isSpace() may appear before @ sign
	* \u000b @deprecated */
	static int i;
	/** \u001e @deprecated */
	static int j;
	/** \u2028 @deprecated */
	static int k;
    }
    delete T4710j5a.java
    list [compile -classpath . -deprecation [saveas T4710jl5b.java {
class T4710jl5b { int i = T4710jl5a.i + T4710jl5a.j + T4710jl5a.k; }
    }]] [match_err_or_warn {*depreca*}]

} {PASS 0}
Test Case: 4.7.10-jvms-lex-6
Test lexing of deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-lex-6 { Test lexing of deprecated } {
    
    empty_class T4710jl6a {
	/** whitespace includes \v, even though the rest of the source doesn't
	* @deprecated\u000b */
	static int i;
    }
    delete T4710j6a.java
    list [compile -classpath . -deprecation [saveas T4710jl6b.java {
class T4710jl6b { int i = T4710jl6a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-lex-7
Test lexing of deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-lex-7 { Test lexing of deprecated } {
    
    empty_class T4710jl7a {
	/** whitespace includes the ASCII separators (\u001c - \u001f),
	* even though the rest of the source doesn't
	* @deprecated\u001d */
	static int i;
    }
    delete T4710j7a.java
    list [compile -classpath . -deprecation [saveas T4710jl7b.java {
class T4710jl7b { int i = T4710jl7a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-lex-8
Test lexing of deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-lex-8 { Test lexing of deprecated } {
    
    empty_class T4710jl8a {
	/** whitespace includes Unicode space characters,
	* even though the rest of the source doesn't
	* @deprecated\u2002 */
	static int i;
    }
    delete T4710j8a.java
    list [compile -classpath . -deprecation [saveas T4710jl8b.java {
class T4710jl8b { int i = T4710jl8a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-lex-9
Test lexing of deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-lex-9 { Test lexing of deprecated } {
    
    empty_class T4710jl9a {
	/** whitespace includes Unicode line separator characters,
	* even though the rest of the source doesn't
	* @deprecated\u2028 */
	static int i;
    }
    delete T4710j9a.java
    list [compile -classpath . -deprecation [saveas T4710jl9b.java {
class T4710jl9b { int i = T4710jl9a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}
Test Case: 4.7.10-jvms-lex-10
Test lexing of deprecated

Expected Result: WARN 1

Regression Test:

tcltest::test 4.7.10-jvms-lex-10 { Test lexing of deprecated } {
    
    empty_class T4710jl10a {
	/** whitespace includes Unicode paragraph separator characters,
	* even though the rest of the source doesn't
	* @deprecated\u2029 */
	static int i;
    }
    delete T4710j10a.java
    list [compile -classpath . -deprecation [saveas T4710jl10b.java {
class T4710jl10b { int i = T4710jl10a.i; }
    }]] [match_err_or_warn {*depreca*}]

} {WARN 1}

4.10

Directory : tests/jvms/class-file-format/limitations


Test Case: 4.10-jvms-1
A class can have at most 65535 entries in the constant pool

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-1 { A class can have at most
        65535 entries in the constant pool } {
    

    set buff "class T410jvms1 \{\n"

    set over [expr {65555 / 5}]
    for {set i 0} {$i < $over} {incr i} {
        append buff "\tString m${i}(int i) \{\n"
        append buff "\t\treturn \"m${i}-1\" + i + \"m${i}-2\"\n"
        append buff "\t\t    + i + \"m${i}-3\" + i + \"m${i}-4\"\n"
        append buff "\t\t    + i + \"m${i}-5\";\n"
        append buff "\t\}\n"
    }

    append buff "\}\n"

    compile [saveas T410jvms1.java $buff]

} {FAIL}
Test Case: 4.10-jvms-2
A single method can safely have no more than 65534 byte codes, because of the limitations of exception handlers. However, the hard limit is 65535 bytes

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-2 { A single method can safely have no more than
        65534 byte codes, because of the limitations of exception handlers.
        However, the hard limit is 65535 bytes } {
    

    set buff ""
    append buff "class T410jvms2 \{\n"
    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tint i = 0;\n"

    set over 21900
    for {set i 0} {$i < $over} {incr i} {
        append buff "\t\ti++;\n"
    }

    append buff "\t\}\n"
    append buff "\}\n"

    compile [saveas T410jvms2.java $buff]

} {FAIL}
Test Case: 4.10-jvms-3
A single class can have at most 65535 member variables, although more than that can be inherited. Note that this test overflows the constant pool first

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-3 { A single class can have at most 65535 member
        variables, although more than that can be inherited. Note that this
        test overflows the constant pool first } {
    

    set buff ""
    append buff "class T410jvms3 \{\n"

    set over 65536
    for {set i 0} {$i < $over} {incr i} {
        append buff "\tint v${i};\n"
    }

    append buff "\}\n"

    compile [saveas T410jvms3.java $buff]

} {FAIL}
Test Case: 4.10-jvms-4
A single class can have at most 65535 member variables, although more than that can be inherited

Expected Result: PASS

Regression Test:

tcltest::test 4.10-jvms-4 { A single class can have at most 65535 member
        variables, although more than that can be inherited } {
    

    set buff ""
    set interfaces 7
    set over 10000
    for {set j 0} {$j < $interfaces} {incr j} {
	append buff "interface T410jvms4_${j} \{\n"
	for {set i 0} {$i < $over} {incr i} {
	    append buff "\tint v${j}_${i} = 1;\n"
	}
	append buff "\}\n"
    }

    append buff "class T410jvms4 implements T410jvms4_0"
    for {set j 1} {$j < $interfaces} {incr j} {
        append buff ",\n\tT410jvms4_${j}"
    }

    append buff " \{\n\t\tint v = 1;\n\}\n"

    compile [saveas T410jvms4.java $buff]

} {PASS}
Test Case: 4.10-jvms-5
A single class can have at most 65535 methods, although more than that can be inherited. Note that this test overflows the constant pool first

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-5 { A single class can
        have at most 65535 methods, although more than that can be inherited.
        Note that this test overflows the constant pool first } {
    

    set buff ""
    append buff "class T410jvms5 \{\n"

    set over 65536
    for {set i 0} {$i < $over} {incr i} {
        append buff "\tvoid m${i}() {}\n"
    }

    append buff "\}\n"

    compile [saveas T410jvms5.java $buff]

} {FAIL}
Test Case: 4.10-jvms-6
A single class can have at most 65535 member variables, although more than that can be inherited

Expected Result: PASS

Regression Test:

tcltest::test 4.10-jvms-6 { A single class can have at most 65535 member
        variables, although more than that can be inherited } {
    

    set buff ""
    set interfaces 7
    set over 10000
    for {set j 0} {$j < $interfaces} {incr j} {
	append buff "interface T410jvms6_${j} \{\n"
	for {set i 0} {$i < $over} {incr i} {
	    append buff "\tint m${j}_${i}();\n"
	}
	append buff "\}\n"
    }

    append buff "abstract class T410jvms6 implements T410jvms6_0"
    for {set j 1} {$j < $interfaces} {incr j} {
        append buff ",\n\tT410jvms6_${j}"
    }

    append buff " \{\n\t\tvoid m() \{\}\n\}\n"

    compile [saveas T410jvms6.java $buff]

} {PASS}
Test Case: 4.10-jvms-7
A method can have at most 255 parameters

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-7 { A method can have
       at most 255 parameters } {
    

    set buff ""
    append buff "class T410jvms7 \{\n"
    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tfoo("

    set over 255
    for {set i 0} {$i < $over} {incr i} {
        append buff "${i}, "
    }
    append buff "255); \n"

    append buff "\t\}\n"

    append buff "\tstatic void foo("
    for {set i 0} {$i < $over} {incr i} {
        append buff "int p${i}, "
    }
    append buff "int p255)"
    append buff "\{\n"
    append buff "\t\}\n"

    append buff "\}\n"

    compile [saveas T410jvms7.java $buff]

} {FAIL}
Test Case: 4.10-jvms-8
A method can have at most 255 parameters. This limit is reduced to 127 doubles or longs in an instance method

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-8 { A method can have at most 255 parameters. This
        limit is reduced to 127 doubles or longs in an instance method } {
    

    set buff ""
    append buff "class T410jvms8 \{\n"
    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tnew T410jvms8().foo("

    set over 127
    for {set i 0} {$i < $over} {incr i} {
        append buff "${i}, "
    }
    append buff "127); \n"

    append buff "\t\}\n"

    append buff "\tvoid foo("
    for {set i 0} {$i < $over} {incr i} {
        append buff "long p${i}, "
    }
    append buff "int p127)"
    append buff "\{\n"
    append buff "\t\}\n"

    append buff "\}\n"

    compile [saveas T410jvms8.java $buff]

} {FAIL}
Test Case: 4.10-jvms-9
A method can have at most 255 parameters. This limit is reduced to 127 doubles or longs in interface methods

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-9 { A method can have at most 255 parameters. This
        limit is reduced to 127 doubles or longs in interface methods } {
    

    set buff ""
    append buff "interface T410jvms9 \{\n"
    set over 127
    append buff "\tvoid foo("
    for {set i 0} {$i < $over} {incr i} {
        append buff "double p${i}, "
    }
    append buff "int p127);\n"
    append buff "\}\n"

    compile [saveas T410jvms9.java $buff]

} {FAIL}
Test Case: 4.10-jvms-10
The number of dimensions in an array is limited to 255.

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-10 { The number of dimensions
       in an array is limited to 255. } {
    

    set buff ""
    append buff "class T410jvms10 \{\n"
    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tObject intArray = new int"

    set over 256
    for {set i 0} {$i < $over} {incr i} {
        append buff "\[\]"
    }

    append buff "{null};\n"
    append buff "\t\}\n"
    append buff "\}\n"

    compile [saveas T410jvms10.java $buff]

} {FAIL}
Test Case: 4.10-jvms-11
The number of dimensions in an array is limited to 255.

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-11 { The number of dimensions
       in an array is limited to 255. } {
    

    set buff ""
    append buff "class T410jvms11 \{\n"
    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tObject o = null;\n"
    append buff "\t\tboolean b = o instanceof int"

    set over 256
    for {set i 0} {$i < $over} {incr i} {
        append buff "\[\]"
    }

    append buff ";\n\t\}\n"
    append buff "\}\n"

    compile [saveas T410jvms11.java $buff]

} {FAIL}
Test Case: 4.10-jvms-12
The number of dimensions in an array is limited to 255.

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-12 { The number of dimensions
       in an array is limited to 255. } {
    

    set buff ""
    append buff "class T410jvms12 \{\n"
    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tClass c = int"

    set over 256
    for {set i 0} {$i < $over} {incr i} {
        append buff "\[\]"
    }

    append buff ".class;\n\t\}\n"
    append buff "\}\n"

    compile [saveas T410jvms12.java $buff]

} {FAIL}
Test Case: 4.10-jvms-13
The number of dimensions in an array is limited to 255.

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-13 { The number of dimensions
       in an array is limited to 255. } {
    

    set buff ""
    append buff "class T410jvms13 \{\n"
    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tSystem.out.println(i);\n"
    append buff "\t\}"
    append buff "\tstatic int"

    set over 128
    for {set i 0} {$i < $over} {incr i} {
        append buff "\[\]"
    }

    append buff " i"
    for {set i 0} {$i < $over} {incr i} {
        append buff "\[\]"
    }
    append buff ";\n\}\n"

    compile [saveas T410jvms13.java $buff]

} {FAIL}
Test Case: 4.10-jvms-14
The number of dimensions in an array is limited to 255.

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-14 { The number of dimensions
       in an array is limited to 255. } {
    

    set buff ""
    append buff "class T410jvms14 \{\n"
    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tSystem.out.println(m());\n"
    append buff "\t\}"
    append buff "\tstatic int"

    set over 128
    for {set i 0} {$i < $over} {incr i} {
        append buff "\[\]"
    }

    append buff " m()"
    for {set i 0} {$i < $over} {incr i} {
        append buff "\[\]"
    }
    append buff "\{ return null; \}\n\}\n"

    compile [saveas T410jvms14.java $buff]

} {FAIL}
Test Case: 4.10-jvms-15
The number of dimensions in an array is limited to 255.

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-15 { The number of dimensions
       in an array is limited to 255. } {
    

    set buff ""
    append buff "class T410jvms15 \{\n"
    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tSystem.out.println(m(null));\n"
    append buff "\t\}"
    append buff "\tstatic int m(int"

    set over 128
    for {set i 0} {$i < $over} {incr i} {
        append buff "\[\]"
    }

    append buff " i"
    for {set i 0} {$i < $over} {incr i} {
        append buff "\[\]"
    }
    append buff ")\{ return 0; \}\n\}\n"

    compile [saveas T410jvms15.java $buff]

} {FAIL}
Test Case: 4.10-jvms-16
The number of dimensions in an array is limited to 255.

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-16 { The number of dimensions
       in an array is limited to 255. } {
    

    set buff ""
    append buff "class T410jvms16 \{\n"
    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tint"

    set over 128
    for {set i 0} {$i < $over} {incr i} {
        append buff "\[\]"
    }

    append buff " i"
    for {set i 0} {$i < $over} {incr i} {
        append buff "\[\]"
    }
    append buff "; \}\n\}\n"

    compile [saveas T410jvms16.java $buff]

} {FAIL}
Test Case: 4.10-jvms-17
The number of dimensions in an array is limited to 255.

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-17 { The number of dimensions
       in an array is limited to 255. } {
    

    set buff ""
    append buff "class T410jvms17 \{\n"
    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tObject o = null;\n"
    append buff "\t\to = (int"

    set over 256
    for {set i 0} {$i < $over} {incr i} {
        append buff "\[\]"
    }

    append buff ") null; \}\n\}\n"

    compile [saveas T410jvms17.java $buff]

} {FAIL}
Test Case: 4.10-jvms-18
Strings that occupy more than 65535 UTF8 bytes do not fit in the constant pool

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-18 { Strings that occupy more than 65535 UTF8
        bytes do not fit in the constant pool } {
    
    set buff ""
    append buff "class T410jvms18 \{\n"
    append buff "\tint a"

    set over 21845
    for {set i 0} {$i < $over} {incr i} {
        append buff "\\ufffb"
    }

    append buff " = 1;\n"
    append buff "\tpublic static void main(String\[\] args) \{\}\n\}\n"
	    
    compile [saveas T410jvms18.java $buff]

} {FAIL}
Test Case: 4.10-jvms-19
Strings that occupy more than 0xffff UTF8 bytes cannot be constant, according to JVMS.

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-19 { Strings that occupy more than 0xffff UTF8
        bytes cannot be constant, according to JVMS. } {
    
    empty_class T410jvms19 {
	static final String s0001 = "a";
	static final String s0002 = s0001 + s0001;
	static final String s0004 = s0002 + s0002;
	static final String s0008 = s0004 + s0004;
	static final String s0010 = s0008 + s0008;
	static final String s0020 = s0010 + s0010;
	static final String s0040 = s0020 + s0020;
	static final String s0080 = s0040 + s0040;
	static final String s0100 = s0080 + s0080;
	static final String s0200 = s0100 + s0100;
	static final String s0400 = s0200 + s0200;
	static final String s0800 = s0400 + s0400;
	static final String s1000 = s0800 + s0800;
	static final String s2000 = s1000 + s1000;
	static final String s4000 = s2000 + s2000;
	static final String s8000 = s4000 + s4000;
	// sffff is still constant!
	static final String sffff = s8000 + s4000 + s2000 + s1000
                                  + s0800 + s0400 + s0200 + s0100
                                  + s0080 + s0040 + s0020 + s0010
                                  + s0008 + s0004 + s0002 + "b";

	static final String toobig = sffff + "c"; // can't be constant
	void m(int i) {
	    switch (i) {
		case 0:
		case (toobig == "a" ? 0 : 1): // using non-constant case label
	    }
	}
    }

} {FAIL}
Test Case: 4.10-jvms-20
Strings that occupy more than 65535 UTF8 bytes do not fit in the constant pool

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-20 { Strings that occupy more than 65535 UTF8
        bytes do not fit in the constant pool } {
    
    set buff ""
# 12 bytes
    set huge "abcdefghijkl"
# 48 bytes
    set huge "${huge}${huge}${huge}${huge}"
# 192 bytes
    set huge "${huge}${huge}${huge}${huge}"
# We have to be careful of filename length limits, so stop here
    set over 180

    for {set i 0} {$i < $over} {incr i} {
	append buff "\class ${huge}${i} \{\}\n"
    }
    append buff "class T410jvms20 \{\n"
    append buff "\tstatic void foo(${huge}0 p0"
    for {set i 1} {$i < $over} {incr i} {
	append buff ",\n\t\t ${huge}${i} p${i}"
	for {set j 0} {$j < $over} {incr j} {
	    append buff "\[\]"
	}
    }
    append buff ") \{\}\n"

    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tfoo(null"
    for {set i 1} {$i < $over} {incr i} {
	append buff ", null"
    }
    append buff ");\n\t\}\n\}\n"
	    
    compile [saveas T410jvms20.java $buff]

} {FAIL}
Test Case: 4.10-jvms-21
A single method, including , can safely have no more than 65534 byte codes, because of the limitations of exception handlers. However, the hard limit is 65535 bytes

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-21 { A single method, including , can safely
        have no more than 65534 byte codes, because of the limitations of
        exception handlers. However, the hard limit is 65535 bytes } {
    

    set buff ""
    append buff "class T410jvms21 \{\n"
    append buff "\tpublic static void main(String\[\] args) {}\n"
    append buff "\tstatic double\[\] d = \{\n"

    set over 30000
    for {set i 0} {$i < $over} {incr i} {
        append buff "1, "
    }
    append buff "\n\t\};\n\}\n"

    compile [saveas T410jvms21.java $buff]

} {FAIL}
Test Case: 4.10-jvms-22
A single method, including instance initializers (whether inlined into constructors or not), can safely have no more than 65534 byte codes, because of the limitations of exception handlers. However, the hard limit is 65535 bytes

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-22 { A single method, including instance initializers
        (whether inlined into constructors or not), can safely have no more
        than 65534 byte codes, because of the limitations of exception
        handlers. However, the hard limit is 65535 bytes } {
    

    set buff ""
    append buff "class T410jvms22 \{\n"
    append buff "\tpublic static void main(String\[\] args) {}\n"
    append buff "\tdouble\[\] d = \{\n"

    set over 30000
    for {set i 0} {$i < $over} {incr i} {
        append buff "1, "
    }
    append buff "\n\t\};\n\}\n"

    compile [saveas T410jvms22.java $buff]

} {FAIL}
Test Case: 4.10-jvms-23
A single method can safely have no more than 65534 byte codes, because of the limitations of exception handlers. However, the hard limit is 65535 bytes

Expected Result: FAIL

Regression Test:

tcltest::test 4.10-jvms-23 { A single method can safely have no more than
        65534 byte codes, because of the limitations of exception handlers.
        However, the hard limit is 65535 bytes } {
    

    set buff ""
    append buff "class T410jvms23 \{\n"
    append buff "\tpublic static void main(String\[\] args) \{\n"
    append buff "\t\tif (args.length > 0) \{\n"
    append buff "\t\t\tdouble\[\] d = \{\n"

    set over 30000
    for {set i 0} {$i < $over} {incr i} {
        append buff "1, "
    }
    append buff "\n\t\t\t\};\n\t\t\}\n\t\}\n\}\n"

    compile [saveas T410jvms23.java $buff]

} {FAIL}

Index of all 4744 tests