compiler/tests/PPCClassBuilderTest.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 24 Jul 2015 15:06:54 +0100
changeset 502 1e45d3c96ec5
permissions -rw-r--r--
Updated to PetitCompiler-JanVrany.135, PetitCompiler-Tests-JanKurs.93, PetitCompiler-Extras-Tests-JanVrany.16, PetitCompiler-Benchmarks-JanKurs.12 Name: PetitCompiler-JanVrany.135 Author: JanVrany Time: 22-07-2015, 06:53:29.127 PM UUID: 890178b5-275d-46af-a2ad-1738998f07cb Ancestors: PetitCompiler-JanVrany.134 Name: PetitCompiler-Tests-JanKurs.93 Author: JanKurs Time: 20-07-2015, 11:30:10.283 PM UUID: 6473e671-ad70-42ca-b6c3-654b78edc531 Ancestors: PetitCompiler-Tests-JanKurs.92 Name: PetitCompiler-Extras-Tests-JanVrany.16 Author: JanVrany Time: 22-07-2015, 05:18:22.387 PM UUID: 8f6f9129-dbba-49b1-9402-038470742f98 Ancestors: PetitCompiler-Extras-Tests-JanKurs.15 Name: PetitCompiler-Benchmarks-JanKurs.12 Author: JanKurs Time: 06-07-2015, 02:10:06.901 PM UUID: cb24f1ac-46a4-494d-9780-64576f0f0dba Ancestors: PetitCompiler-Benchmarks-JanKurs.11, PetitCompiler-Benchmarks-JanVrany.e29bd90f388e.20150619081300

"{ 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.
! !