package main

import . "director_protected"

type FooBar struct{} // From Bar
func (p *FooBar) Ping() string {
	return "FooBar::ping();"
}

type FooBar2 struct{} // From Bar
func (p *FooBar2) Ping() string {
	return "FooBar2::ping();"
}
func (p *FooBar2) Pang() string {
	return "FooBar2::pang();"
}

type FooBar3 struct{} // From Bar
func (p *FooBar3) Cheer() string {
	return "FooBar3::cheer();"
}

func main() {
	b := NewBar()
	f := b.Create()
	fb := NewDirectorBar(&FooBar{})
	fb2 := NewDirectorBar(&FooBar2{})
	fb3 := NewDirectorBar(&FooBar3{})

	s := fb.Used()
	if s != "Foo::pang();Bar::pong();Foo::pong();FooBar::ping();" {
		panic(0)
	}

	s = fb2.Used()
	if s != "FooBar2::pang();Bar::pong();Foo::pong();FooBar2::ping();" {
		panic(0)
	}

	s = b.Pong()
	if s != "Bar::pong();Foo::pong();Bar::ping();" {
		panic(0)
	}

	s = f.Pong()
	if s != "Bar::pong();Foo::pong();Bar::ping();" {
		panic(0)
	}

	s = fb.Pong()
	if s != "Bar::pong();Foo::pong();FooBar::ping();" {
		panic(0)
	}

	s = fb3.DirectorInterface().(*FooBar3).Cheer()
	if s != "FooBar3::cheer();" {
		panic(s)
	}
	if fb2.Callping() != "FooBar2::ping();" {
		panic("bad fb2.callping")
	}
	if fb2.Callcheer() != "FooBar2::pang();Bar::pong();Foo::pong();FooBar2::ping();" {
		panic("bad fb2.callcheer")
	}

	if fb3.Callping() != "Bar::ping();" {
		panic("bad fb3.callping")
	}

	if fb3.Callcheer() != "FooBar3::cheer();" {
		panic("bad fb3.callcheer")
	}
}
