compiler/tests/PPCClassBuilderTest.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 19 Mar 2016 00:12:47 +0100
changeset 556 51c6afba5c91
parent 502 1e45d3c96ec5
permissions -rw-r--r--
CI: Use VM provided by Pharo team on both Linux and Windows. Hand-crafter Pharo VM is no longer needed as the Linux slave in SWING build farm has been upgraded so it has compatible GLIBC. This makes CI scripts simpler and more usable for other people.

"{ Package: 'stx:goodies/petitparser/compiler/tests' }"

"{ NameSpace: Smalltalk }"

TestCase subclass:#PPCClassBuilderTest
	instanceVariableNames:'builder method1 result'
	classVariableNames:''
	poolDictionaries:''
	category:'PetitCompiler-Tests-Core'
!

!PPCClassBuilderTest methodsFor:'as yet unclassified'!

foo
    ^ PPCMethod new
        id: #foo; 
        code: '^ 1';
        yourself
!

setUp
    super setUp.
    builder := PPCClassBuilder new.
!

tearDown
    super tearDown.
    result removeFromSystem.
!

testCompileClass
    builder compiledClassName: #PPCGenerated.
    builder compiledSuperclass: Object.
    
    method1 := self foo.
    builder methodDictionary at: #foo put: method1.
    
    builder instvars add: #foo.
    
    builder constants at: #foobar put: #foobar.
    builder constants at: #barbar put: #barbar.
    
    result := builder compileClass.
    
    self assert: result isNil not.
    self assert: result name = #PPCGenerated.
    self assert: result superclass  = Object.
    
    self assert: result methodDictionary size =1.
    self assert: result instanceVariables size = 1.
    self assert: result classVariables size = 2.
    self assert: (result classVariableNamed: #foobar) value = #foobar.
    self assert: (result classVariableNamed: #barbar) value = #barbar.

    self assert: result new foo = 1.	
!

testCompileClass2
    Object subclass: #PPCGenerated
        instanceVariableNames: ''
        classVariableNames: 'foobar'
        category: 'PetitCompiler-generated'.
        
    (Smalltalk at: #PPCGenerated) compileSilently: 'bar ^ 12' classified: 'test'.
    (Smalltalk at: #PPCGenerated) compileSilently: 'foo ^ 123' classified: 'generated'.
    (Smalltalk at: #PPCGenerated) compileSilently: 'foo2 ^ 1234' classified: 'generated'.

    builder compiledClassName: #PPCGenerated.
    builder compiledSuperclass: Object.
    
    method1 := self foo.
    builder methodDictionary at: #foo put: method1.
    
    result := builder compileClass.
    
    self assert: result isNil not.
    self assert: result name = #PPCGenerated.
    self assert: result superclass  = Object.
    self assert: result methodDictionary size = 2.

    self assert: result classVariables size = 0.
    
    self assert: result new foo = 1.	
    self assert: result new bar = 12.	
!

testCompileClass3
    Object subclass: #PPCGenerated
        instanceVariableNames: ''
        classVariableNames: 'foobar'
        category: 'PetitCompiler-generated'.
        
    (Smalltalk at: #PPCGenerated) compileSilently: 'foo ^ 123' classified: 'testing'.

    builder compiledClassName: #PPCGenerated.
    builder compiledSuperclass: Object.
    
    method1 := self foo.
    builder methodDictionary at: #foo put: method1.
    
    result := builder compileClass.
    
    self assert: result isNil not.
    self assert: result name = #PPCGenerated.
    self assert: result superclass  = Object.
    self assert: result methodDictionary size = 1.

    self assert: result new foo = 123.
! !