from director_nested import *


class A(FooBar_int):
  def do_step(self):
    return "A::do_step;"
  
  def get_value(self):
    return "A::get_value"

  pass


a = A()
if a.step() != "Bar::step;Foo::advance;Bar::do_advance;A::do_step;":
  raise RuntimeError,"Bad A virtual resolution"


class B(FooBar_int):
  def do_advance(self):
    return "B::do_advance;" + self.do_step()

  def do_step(self):
    return "B::do_step;"
  
  def get_value(self):
    return 1

  pass


b = B()

if b.step() != "Bar::step;Foo::advance;B::do_advance;B::do_step;":
  raise RuntimeError,"Bad B virtual resolution"



class C(FooBar_int):
  def do_advance(self):
    return "C::do_advance;" + FooBar_int.do_advance(self)

  def do_step(self):
    return "C::do_step;"
  
  def get_value(self):
    return 2

  def get_name(self):
    return FooBar_int.get_name(self) + " hello"

  
  pass

cc = C()
c = FooBar_int_get_self(cc)
c.advance()

if c.get_name() != "FooBar::get_name hello":
  raise RuntimeError

if c.name() != "FooBar::get_name hello":
  raise RuntimeError
