JavaByteCodeDisassemblerTests.st
author Claus Gittinger <cg@exept.de>
Wed, 10 Dec 2003 11:06:45 +0100
changeset 2114 cbdc4c02a8e2
parent 749 e898eaeff091
child 2152 1cbdfbcc685c
permissions -rw-r--r--
ExecutionErrorSignal -> ExecutionError

"
 COPYRIGHT (c) 1996-2011 by Claus Gittinger
 COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
                            SWING Research Group, Czech Technical University in Prague

 Parts of the code written by Claus Gittinger are under following
 license:

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.

 Parts of the code written at SWING Reasearch Group [1] are MIT licensed:

 Permission is hereby granted, free of charge, to any person
 obtaining a copy of this software and associated documentation
 files (the 'Software'), to deal in the Software without
 restriction, including without limitation the rights to use,
 copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the
 Software is furnished to do so, subject to the following
 conditions:

 The above copyright notice and this permission notice shall be
 included in all copies or substantial portions of the Software.

 THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 OTHER DEALINGS IN THE SOFTWARE.

 [1] Code written at SWING Research Group contain a signature
     of one of the above copright owners.
"
"{ Package: 'stx:libjava' }"

JavaByteCodeProcessorTests subclass:#JavaByteCodeDisassemblerTests
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'Languages-Java-Tests'
!

!JavaByteCodeDisassemblerTests class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 1996-2011 by Claus Gittinger
 COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
                            SWING Research Group, Czech Technical University in Prague

 Parts of the code written by Claus Gittinger are under following
 license:

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.

 Parts of the code written at SWING Reasearch Group [1] are MIT licensed:

 Permission is hereby granted, free of charge, to any person
 obtaining a copy of this software and associated documentation
 files (the 'Software'), to deal in the Software without
 restriction, including without limitation the rights to use,
 copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the
 Software is furnished to do so, subject to the following
 conditions:

 The above copyright notice and this permission notice shall be
 included in all copies or substantial portions of the Software.

 THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 OTHER DEALINGS IN THE SOFTWARE.

 [1] Code written at SWING Research Group contain a signature
     of one of the above copright owners.

"
! !

!JavaByteCodeDisassemblerTests class methodsFor:'resources'!

resources

    ^ Array with: JavaInitializedResource with: JavaTestsResource.

    "Created: / 15-03-2011 / 17:29:22 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 16-03-2011 / 14:43:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaByteCodeDisassemblerTests methodsFor:'tests'!

testAnd
    | result |
    self shouldnt: 
            [ result := self 
                invoke: #'and(II)I'
                class: self loadSimpleMathJavaClass
                args: #( 255 149 )]raise: Error. 

    "static method

     0    iload_0
     1    iload_1
     2    iand
     3    ireturn"

    "Created: / 14-03-2011 / 17:02:09 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:49:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testBitShiftLeft
    |  |

     self shouldnt: 
            [ self 
                invoke: #'bitShiftLeft(II)I'
                class: self loadSimpleMathJavaClass
                args: #( 21 4 )]
                        raise: Error.
    "static method

     0    iload_0
     1    iload_1
     2    ishl
     3    ireturn"

    "Created: / 14-03-2011 / 16:56:49 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:50:37 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testBitShiftRight
    |  |

     self shouldnt: 
             [ self 
                invoke: #'bitShiftRight(II)I'
                class: self loadSimpleMathJavaClass
                args: #( 439 4 )]
                        raise: Error.

    "static method

     0    iload_0
     1    iload_1
     2    ishr
     3    ireturn"

    "Created: / 14-03-2011 / 16:57:02 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:50:50 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testDec2
    self shouldnt: 
    
    
    [ self 
        invoke: #'dec2(I)I'
        class: self loadSimpleMathJavaClass
        args: #( 3 ). ] raise: Error.
    

    "static method

     0    iinc 0 -1
     3    iinc 0 -1
     6    iload_0
     7    ireturn"

    "Created: / 14-03-2011 / 16:58:12 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 22:59:53 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testDiv
    |  |

    self shouldnt: 
            [ self 
                invoke: #'div(II)I'
                class: self loadSimpleMathJavaClass
                args: #( 101 10 ) ]
                        raise: Error.

    "static method

     0    iload_0
     1    iload_1
     2    irem
     3    ireturn"

    "Created: / 14-03-2011 / 16:54:43 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:51:16 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testDivision
    |  |

   self shouldnt: 
            [ self 
                invoke: #'division(II)I'
                class: self loadSimpleMathJavaClass
                args: #( 101 10 ) ]
                        raise: Error.
    "static method

     0    iload_0
     1    iload_1
     2    idiv
     3    ireturn"

    "Created: / 14-03-2011 / 16:57:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:51:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testInc2
    |  |

    self shouldnt: 
            [ self 
                invoke: #'inc2(I)I'
                class: self loadSimpleMathJavaClass
                args: #( 3 ) ]
                        raise: Error.
    "static method

     0    iinc 0 1
     3    iinc 0 1
     6    iload_0
     7    ireturn"

    "Created: / 14-03-2011 / 16:58:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:51:49 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testInheritedMethodCall
    self shouldnt:  [ 
    
    self 
        invoke: #'foo()Ljava/lang/String;'
        class: self loadSimpleInheritingJavaClass
        args: nil.

    ]       raise: Error.
    "0    ldc1 2 ['foo'] 
     2    areturn"

    "Created: / 14-03-2011 / 16:21:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 23:01:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testJustLoadConstants
    self shouldnt:  [ 
    
    self 
        invoke: #'justUseConstants()V'
        class: self loadSimpleMathJavaClass
        args: #().

    ]        raise: Error.
    "static method

     0    lconst_0
     1    lstore_0
     2    lconst_1
     3    lstore_2
     4    fconst_0
     5    fstore 4
     7    fconst_1
     8    fstore 5
     10   fconst_2
     11   fstore 6
     13   dconst_0
     14   dstore 7
     16   dconst_1
     17   dstore 9
     19   return"

    "Created: / 14-03-2011 / 17:05:22 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 23:02:24 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testLookupSwitch
        self shouldnt:            [ 
    
    self 
        invoke: #'switchInt(I)I'
        class: self loadSwitchExamplesClass
        receiver: self loadSwitchExamplesClass new
        args: #( -1000 )

     ]        raise: Error.

    "Created: / 21-03-2011 / 13:51:49 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 21-03-2011 / 15:12:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testMultipy
   self shouldnt: 
             [ self 
                invoke: #'multiply(II)I'
                class: self loadSimpleMathJavaClass
                args: (Array with: 20 with: 10)]
                        raise: Error.

    "static method

     0    iload_0
     1    iload_1
     2    imul
     3    ireturn"

    "Created: / 06-03-2011 / 14:17:53 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:53:07 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testNegateInt
    self shouldnt: 
             [ self 
                invoke: #'negateInt(I)I'
                class: self loadSimpleMathJavaClass
                args: #( 55 )]
                        raise: Error.

    "0    iload_0 
     1    iconst_m1
     2    ixor
     3    ireturn"

    "Created: / 14-03-2011 / 16:55:55 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:53:23 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testOr
    |  |

    self shouldnt: 
            [ self 
                invoke: #'or(II)I'
                class: self loadSimpleMathJavaClass
                args: #( 55 66 )]
                        raise: Error.

    "0    iload_0 
     1    iload_1
     2    ior
     3    ireturn"

    "Created: / 14-03-2011 / 17:02:21 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:53:39 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testOverridenMethodCall
    self shouldnt: 
             [ self 
                        invoke: #'bar()Ljava/lang/String;'
                        class: self loadSimpleInheritingJavaClass
                        args: nil.]
                                raise: Error.

    "0    ldc1 2 ['bar'] 
     2    areturn"

    "Modified: / 20-03-2011 / 21:53:56 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testPower
     self shouldnt: 
             [ self 
                invoke: #'power(II)I'
                class: self loadSimpleMathJavaClass
                args: (Array with: 2 with: 10)]
                        raise: Error.

    "0    iload_0 
     1    iload_1
     2    iconst_1
     3    invokestatic 2 [JavaMethod(stx.libjava.tests.simpleClasses.SimpleMath::int powerAcc (int int int))]
     6    ireturn"

    "Created: / 06-03-2011 / 14:18:03 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:54:10 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testReturnArrayOfLongs


    self shouldnt: 
            [ self 
                        invoke: #'giveMeArrayOfLongs()[J'
                        class: self loadSimpleMathJavaClass
                        args: #(). ]
        raise: Error.

    "0    bipush 100
     2    newarray 11 [T_LONG]
     4    areturn"

    "Created: / 14-03-2011 / 17:08:11 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:54:23 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testSimpleAdd
    self shouldnt: 
             [ self 
                invoke: #'add2To2000Expect2002()I'
                class: self loadSimpleMathJavaClass
                args: nil ]
                        raise: Error.

    "static method

     0    iconst_2
     1    istore_0
     2    sipush 2000
     5    istore_1
     6    iload_0
     7    iload_1
     8    iadd
     9    istore_2
     10   iload_2
     11   ireturn"

    "Created: / 06-03-2011 / 14:18:09 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:55:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testSimpleAdd2
    self shouldnt: 
             [ self 
                invoke: #'addMinus5ToArg(I)I'
                class: self loadSimpleMathJavaClass
                args: (Array with: 10) ]
                        raise: Error.

    "static method

     0    iload_0
     1    bipush -5
     3    iadd
     4    ireturn"

    "Created: / 06-03-2011 / 14:18:14 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:55:10 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testStackCreation
    self shouldnt: 
             [ self 
                invoke: #'isYourStackCreatedCorrectly()I'
                class: self loadSimpleMathJavaClass
                args: #()]
                        raise: Error.

    "0    iconst_0 
     1    istore_0
     2    iconst_1
     3    istore_1
     4    iconst_2
     5    istore_0
     6    iconst_3
     7    istore_1
     8    iconst_4
     9    istore_0
     10   iconst_5
     11   istore_0
     12   bipush 6
     14   istore_1
     15   bipush 7
     17   istore_0
     18   bipush 8
     20   istore_1
     21   bipush 9
     23   istore_1
     24   iload_0
     25   ireturn"

    "Created: / 14-03-2011 / 17:03:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:55:24 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testSumArray
    self shouldnt:   [
    
    self 
        invoke: #'sumArray([I)I'
        class: self loadSimpleMathJavaClass
        args: #( #(1 2 3 4 5) )

    ]        raise: Error.
    "
     Decompiled source:
     Static method
     0    iconst_0
     1    istore_1
     2    iconst_0
     3    istore_2
     4    iload_2
     5    aload_0
     6    arraylength
     7    if_icmpge 15 [22]
     10   iload_1
     11   aload_0
     12   iload_2
     13   iaload
     14   iadd
     15   istore_1
     16   iinc 2 1
     19   goto -15 [4]
     22   iload_1
     23   ireturn"

    "Created: / 14-03-2011 / 17:06:31 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 23:05:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testSumArrayOfDoubles
    self shouldnt: 
             [self 
                invoke: #'sumArrayOfDoubles([D)D'
                class: self loadSimpleMathJavaClass
                args: #( #(1.1 2.2 3.3 4.4 5.5) ) ]
                        raise: Error.
    "0    dconst_0 
     1    dstore_1
     2    iconst_0
     3    istore_3
     4    iload_3
     5    aload_0
     6    arraylength
     7    if_icmpge 15 [22]
     10   dload_1
     11   aload_0
     12   iload_3
     13   daload
     14   dadd
     15   dstore_1
     16   iinc 3 1
     19   goto -15 [4]
     22   dload_1
     23   dreturn"

    "Created: / 14-03-2011 / 17:07:27 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:55:59 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testTableSwitch
         self shouldnt:             [ 
    
    self 
        invoke: #'switchChar(C)I'
        class: self loadSwitchExamplesClass
        receiver: self loadSwitchExamplesClass new
        args: #( $b ).

    ]        raise: Error.

    "Created: / 21-03-2011 / 13:51:25 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 21-03-2011 / 15:02:42 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testUnsignedBitShiftLeft
   self shouldnt: 
             [ self 
                invoke: #'unsignedBitShiftRight(II)I'
                class: self loadSimpleMathJavaClass
                args: #( 1234 5 ) ]
                        raise: Error.

    "0    iload_0 
     1    iload_1
     2    iushr
     3    ireturn"

    "Created: / 14-03-2011 / 17:01:21 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:56:12 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testXor
    self shouldnt: 
             [ self 
                invoke: #'xor(II)I'
                class: self loadSimpleMathJavaClass
                args: #( 1234 5 )]
                        raise: Error.

    "0    iload_0 
     1    iload_1
     2    ixor
     3    ireturn"

    "Modified: / 06-03-2011 / 15:11:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Created: / 14-03-2011 / 17:02:40 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 21:56:24 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !

!JavaByteCodeDisassemblerTests methodsFor:'tests - manual'!

diassembleAll
    | fails |

    fails := OrderedCollection new.
    JavaMethod allSubInstances do: 
            [:method | 
            method isNative 
                ifFalse: 
                    [ [ JavaByteCodeDisassembler new diassemble: method to: String new writeStream ] 
                        on: Error
                        do: [ fails add: method ] ] ].
    fails size ~~ 0 
        ifTrue: [ self error: 'Some java methods failed to disassemble' ].

    "
        JavaByteCodeDisassemblerTests new diassembleAll"

    "Created: / 21-03-2011 / 21:13:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 22-03-2011 / 21:05:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 23-03-2011 / 16:54:56 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !

!JavaByteCodeDisassemblerTests methodsFor:'tests-helpers'!

invoke:methodName class:aClass receiver:receiver args:args 
    |method result|

    method := aClass lookupMethodFor:methodName.
    result := JavaByteCodeDisassembler diassemble:method.

    "Created: / 10-03-2011 / 23:30:13 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 20-03-2011 / 17:42:18 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 22-03-2011 / 21:05:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaByteCodeDisassemblerTests methodsFor:'tests2'!

testGetBoolean

            self 
                invoke: #'getBoolean()Z'
                class: self loadSimpleClassWithManyReferences
                receiver: self loadSimpleClassWithManyReferences new
                args: nil. 

    "
     Deassembling getBoolean
     1:      ALOAD_0     (42)  ARGS: []                  STACK: [.. -> FIELD 0: stx.libjava.tests.simpleClasses.SimpleClassWithManyReferences]
     2:      GETFIELD    (180) ARGS: [JavaFieldRef (stx.libjava.tests.simpleClasses.SimpleClassWithManyReferences 'values'[Ljava/lang/Object; offs=1)] STACK: [objectRef -> objectRef]
     5:      BIPUSH      (16)  ARGS: [9]                 STACK: [.. -> value]
     7:      AALOAD      (50)  ARGS: []                  STACK: [arrayRef, index -> value]
     8:      CHECKCAST   (192) ARGS: [java.lang.Boolean] STACK: [objectRef -> objectRef]
     11:     INVVIRT     (182) ARGS: [JavaMethodRef (java.lang.Boolean 'booleanValue'()Z)] STACK: [objectRef, [arg1, arg2, ...]  -> ..]
     14:     IRETURN     (172) ARGS: []                  STACK: [value -> EMPTY]
"

    "Created: / 14-03-2011 / 21:36:37 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 22-03-2011 / 16:06:38 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testGetByte
    self shouldnt:[  self 
                invoke: #'getByte()B'
                class: self loadSimpleClassWithManyReferences
                receiver: self loadSimpleClassWithManyReferences new
                args: nil]       raise: Error.

    "0    aload_0 
     1    getfield 3 [JavaFieldRef (stx.libjava.tests.simpleClasses.SimpleClassWithManyReferences 'values'[Ljava/lang/Object; offs=1)]
     4    bipush 7
     6    aaload
     7    checkcast 17 [java.lang.Byte]
     10   invokevirtual 31 [JavaMethodRef (java.lang.Byte 'byteValue'()B)]
     13   ireturn"

    "Created: / 14-03-2011 / 21:34:23 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 21-03-2011 / 15:38:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testGetChar
   self shouldnt:[   self 
                invoke: #'getChar()C'
                class: self loadSimpleClassWithManyReferences
                receiver: self loadSimpleClassWithManyReferences new
                args: nil]       raise: Error.

    "0    aload_0 
     1    getfield 3 [JavaFieldRef (stx.libjava.tests.simpleClasses.SimpleClassWithManyReferences 'values'[Ljava/lang/Object; offs=1)]
     4    iconst_3
     5    aaload
     6    checkcast 25 [java.lang.Character]
     9    invokevirtual 26 [JavaMethodRef (java.lang.Character 'charValue'()C)]
     12   ireturn"

    "Created: / 14-03-2011 / 21:31:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 21-03-2011 / 15:39:09 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testGetDateArray
   self shouldnt:[   self 
                invoke: #'getDateArray()[Ljava/util/Date;'
                class: self loadSimpleClassWithManyReferences
                receiver: self loadSimpleClassWithManyReferences new
                args: nil]       raise: Error.

    "0    aload_0 
     1    getfield 3 [JavaFieldRef (stx.libjava.tests.simpleClasses.SimpleClassWithManyReferences 'values'[Ljava/lang/Object; offs=1)]
     4    bipush 8
     6    aaload
     7    checkcast 32 [UnresolvedClass([Ljava.util.Date;)]
     10   checkcast 32 [UnresolvedClass([Ljava.util.Date;)]
     13   areturn"

    "Created: / 14-03-2011 / 21:35:33 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 21-03-2011 / 15:39:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testGetDouble
   self shouldnt:[     self 
                invoke: #'getDouble()Ljava/lang/Double;'
                class: self loadSimpleClassWithManyReferences
                receiver: self loadSimpleClassWithManyReferences new
                args: nil]       raise: Error.

    "0    aload_0 
     1    getfield 3 [JavaFieldRef (stx.libjava.tests.simpleClasses.SimpleClassWithManyReferences 'values'[Ljava/lang/Object; offs=1)]
     4    iconst_2
     5    aaload
     6    checkcast 24 [java.lang.Double]
     9    areturn"

    "Created: / 14-03-2011 / 21:30:47 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 21-03-2011 / 15:39:43 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testGetInt
  self shouldnt:[     self 
                invoke: #'getInt()I'
                class: self loadSimpleClassWithManyReferences
                receiver: self loadSimpleClassWithManyReferences new
                args: nil]       raise: Error.

    "0    aload_0 
     1    getfield 3 [JavaFieldRef (stx.libjava.tests.simpleClasses.SimpleClassWithManyReferences 'values'[Ljava/lang/Object; offs=1)]
     4    iconst_1
     5    aaload
     6    checkcast 13 [java.lang.Integer]
     9    invokevirtual 23 [JavaMethodRef (java.lang.Integer 'intValue'()I)]
     12   ireturn"

    "Created: / 14-03-2011 / 21:30:47 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 21-03-2011 / 15:39:53 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testGetIntArray
self shouldnt:[    self 
                invoke: #'getIntArray()[I'
                class: self loadSimpleClassWithManyReferences
                receiver: self loadSimpleClassWithManyReferences new
                args: nil.
    ]       raise: Error.

    "0    aload_0 
     1    getfield 3 [JavaFieldRef (stx.libjava.tests.simpleClasses.SimpleClassWithManyReferences 'values'[Ljava/lang/Object; offs=1)]
     4    iconst_5
     5    aaload
     6    checkcast 29 [JavaBuiltInClassPointerRef(class:IntegerArray ; name&type: '[I')]
     9    checkcast 29 [JavaBuiltInClassPointerRef(class:IntegerArray ; name&type: '[I')]
     12   areturn"

    "Created: / 14-03-2011 / 21:33:13 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 21-03-2011 / 15:40:12 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testGetLong
  self shouldnt:[   self 
                invoke: #'getLong()J'
                class: self loadSimpleClassWithManyReferences
                receiver: self loadSimpleClassWithManyReferences new
                args: nil]       raise: Error.

    "0    aload_0 
     1    getfield 3 [JavaFieldRef (stx.libjava.tests.simpleClasses.SimpleClassWithManyReferences 'values'[Ljava/lang/Object; offs=1)]
     4    iconst_4
     5    aaload
     6    checkcast 27 [java.lang.Long]
     9    invokevirtual 28 [JavaMethodRef (java.lang.Long 'longValue'()J)]
         12   lreturn"

    "Created: / 14-03-2011 / 21:32:14 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 21-03-2011 / 15:40:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testGetShort
  self shouldnt:[     self 
                invoke: #'getShort()S'
                class: self loadSimpleClassWithManyReferences
                receiver: self loadSimpleClassWithManyReferences new
                args: nil]       raise: Error.

    "0    aload_0 
     1    getfield 3 [JavaFieldRef (stx.libjava.tests.simpleClasses.SimpleClassWithManyReferences 'values'[Ljava/lang/Object; offs=1)]
     4    bipush 6
     6    aaload
     7    checkcast 14 [java.lang.Short]
     10   invokevirtual 30 [JavaMethodRef (java.lang.Short 'shortValue'()S)]
     13   ireturn"

    "Created: / 14-03-2011 / 21:33:48 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 21-03-2011 / 15:40:45 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testGetString
 self shouldnt:[    self 
                invoke: #'getString()Ljava/lang/String;'
                class: self loadSimpleClassWithManyReferences
                receiver: self loadSimpleClassWithManyReferences new
                args: nil]       raise: Error.

    "0    aload_0 
     1    getfield 3 [JavaFieldRef (stx.libjava.tests.simpleClasses.SimpleClassWithManyReferences 'values'[Ljava/lang/Object; offs=1)]
     4    iconst_0
     5    aaload
     6    checkcast 22 [java.lang.String]
     9    areturn"

    "Created: / 14-03-2011 / 21:27:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 21-03-2011 / 15:40:55 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testMultiBytePrintString
|badClass|
badClass := Java classForName: 'java.nio.charset.CharsetDecoder'.


self 
                invoke: #'<init>(Ljava/nio/charset/Charset;FF)V'
                class: badClass
                args: #( 21 4 ).

    "Created: / 23-03-2011 / 16:58:50 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

testSetBoolean
       self shouldnt:         [
    
    self 
        invoke: #'setBoolean(I)V'
        class: self loadSimpleClassWithManyReferences
        receiver: self loadSimpleClassWithManyReferences new
        args: nil.

    ]        raise: Error.

    "Created: / 22-03-2011 / 12:17:12 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !

!JavaByteCodeDisassemblerTests class methodsFor:'documentation'!

version_SVN
    ^ '$Id$'
! !