69 lines
2.0 KiB
Haskell
69 lines
2.0 KiB
Haskell
module TestByteCodeGenerator where
|
|
|
|
import Test.HUnit
|
|
import ByteCode.ClassFile.Generator
|
|
import ByteCode.ClassFile
|
|
import ByteCode.Constants
|
|
import Ast
|
|
|
|
nakedClass = Class "Testklasse" [] []
|
|
expectedClass = ClassFile {
|
|
constantPool = [
|
|
ClassInfo 4,
|
|
MethodRefInfo 1 3,
|
|
NameAndTypeInfo 5 6,
|
|
Utf8Info "java/lang/Object",
|
|
Utf8Info "<init>",
|
|
Utf8Info "()V",
|
|
Utf8Info "Code",
|
|
ClassInfo 9,
|
|
Utf8Info "Testklasse"
|
|
],
|
|
accessFlags = accessPublic,
|
|
thisClass = 8,
|
|
superClass = 1,
|
|
fields = [],
|
|
methods = [],
|
|
attributes = []
|
|
}
|
|
|
|
classWithFields = Class "Testklasse" [] [VariableDeclaration "int" "testvariable" Nothing]
|
|
expectedClassWithFields = ClassFile {
|
|
constantPool = [
|
|
ClassInfo 4,
|
|
MethodRefInfo 1 3,
|
|
NameAndTypeInfo 5 6,
|
|
Utf8Info "java/lang/Object",
|
|
Utf8Info "<init>",
|
|
Utf8Info "()V",
|
|
Utf8Info "Code",
|
|
ClassInfo 9,
|
|
Utf8Info "Testklasse",
|
|
FieldRefInfo (fromIntegral 8) (fromIntegral 11),
|
|
NameAndTypeInfo (fromIntegral 12) (fromIntegral 13),
|
|
Utf8Info "testvariable",
|
|
Utf8Info "I"
|
|
],
|
|
accessFlags = accessPublic,
|
|
thisClass = 8,
|
|
superClass = 1,
|
|
fields = [
|
|
MemberInfo {
|
|
memberAccessFlags = accessPublic,
|
|
memberNameIndex = 12,
|
|
memberDescriptorIndex = 13,
|
|
memberAttributes = []
|
|
}
|
|
],
|
|
methods = [],
|
|
attributes = []
|
|
}
|
|
|
|
|
|
testBasicConstantPool = TestCase $ assertEqual "basic constant pool" expectedClass $ classBuilder nakedClass emptyClassFile
|
|
testFields = TestCase $ assertEqual "fields in constant pool" expectedClassWithFields $ classBuilder classWithFields emptyClassFile
|
|
|
|
tests = TestList [
|
|
TestLabel "Basic constant pool" testBasicConstantPool,
|
|
TestLabel "Fields constant pool" testFields
|
|
] |