/trunk/Examples/test-suite/go/director_classic_runme.go
Go | 135 lines | 98 code | 29 blank | 8 comment | 10 complexity | 00dc505eaf3a8efa2490e7fd8b94900f MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
- package main
- import "fmt"
- import . "./director_classic"
- type TargetLangPerson struct{} // From Person
- func (p *TargetLangPerson) Id() string {
- return "TargetLangPerson"
- }
- type TargetLangChild struct{} // Form Child
- func (p *TargetLangChild) Id() string {
- return "TargetLangChild"
- }
- type TargetLangGrandChild struct{} // From Grandchild
- func (p *TargetLangGrandChild) Id() string {
- return "TargetLangGrandChild"
- }
- // Semis - don't override id() in target language
- type TargetLangSemiPerson struct{} // From Person
- type TargetLangSemiChild struct{} // From Child
- type TargetLangSemiGrandChild struct{} // From GrandChild
- // Orphans - don't override id() in C++
- type TargetLangOrphanPerson struct{} // From OrphanPerson
- func (p *TargetLangOrphanPerson) Id() string {
- return "TargetLangOrphanPerson"
- }
- type TargetLangOrphanChild struct{} // From OrphanChild
- func (p *TargetLangOrphanChild) Id() string {
- return "TargetLangOrphanChild"
- }
- func check(person Person, expected string) {
- debug := false
- // Normal target language polymorphic call
- ret := person.Id()
- if debug {
- fmt.Println(ret)
- }
- if ret != expected {
- panic("Failed. Received: " + ret + " Expected: " + expected)
- }
- // Polymorphic call from C++
- caller := NewCaller()
- caller.SetCallback(person)
- ret = caller.Call()
- if debug {
- fmt.Println(ret)
- }
- if ret != expected {
- panic("Failed. Received: " + ret + " Expected: " + expected)
- }
- // Polymorphic call of object created in target language and
- // passed to C++ and back again
- baseclass := caller.BaseClass()
- ret = baseclass.Id()
- if debug {
- fmt.Println(ret)
- }
- if ret != expected {
- panic("Failed. Received: " + ret + " Expected: " + expected)
- }
- caller.ResetCallback()
- if debug {
- fmt.Println("----------------------------------------")
- }
- }
- func main() {
- person := NewPerson()
- check(person, "Person")
- DeletePerson(person)
- person = NewChild()
- check(person, "Child")
- DeletePerson(person)
- person = NewGrandChild()
- check(person, "GrandChild")
- DeletePerson(person)
- person = NewDirectorPerson(&TargetLangPerson{})
- check(person, "TargetLangPerson")
- DeleteDirectorPerson(person)
- person = NewDirectorChild(&TargetLangChild{})
- check(person, "TargetLangChild")
- DeleteDirectorChild(person.(Child))
- person = NewDirectorGrandChild(&TargetLangGrandChild{})
- check(person, "TargetLangGrandChild")
- DeleteDirectorGrandChild(person.(GrandChild))
- // Semis - don't override id() in target language
- person = NewDirectorPerson(&TargetLangSemiPerson{})
- check(person, "Person")
- DeleteDirectorPerson(person)
- person = NewDirectorChild(&TargetLangSemiChild{})
- check(person, "Child")
- DeleteDirectorChild(person.(Child))
- person = NewDirectorGrandChild(&TargetLangSemiGrandChild{})
- check(person, "GrandChild")
- DeleteDirectorGrandChild(person.(GrandChild))
- // Orphans - don't override id() in C++
- person = NewOrphanPerson()
- check(person, "Person")
- DeleteOrphanPerson(person.(OrphanPerson))
- person = NewOrphanChild()
- check(person, "Child")
- DeleteOrphanChild(person.(OrphanChild))
- person = NewDirectorOrphanPerson(&TargetLangOrphanPerson{})
- check(person, "TargetLangOrphanPerson")
- DeleteDirectorOrphanPerson(person.(OrphanPerson))
- person = NewDirectorOrphanChild(&TargetLangOrphanChild{})
- check(person, "TargetLangOrphanChild")
- DeleteDirectorOrphanChild(person.(OrphanChild))
- }