| <?php |
| |
| require "tests.php"; |
| |
| // No new functions |
| check::functions(array()); |
| // New classes |
| check::classes(array('Foo_int','Bar','FooBar_int')); |
| // No new vars |
| check::globals(array()); |
| |
| class A extends FooBar_int { |
| function do_step() { |
| return "A::do_step;"; |
| } |
| |
| function get_value() { |
| return "A::get_value"; |
| } |
| } |
| |
| $a = new A(); |
| check::equal($a->step(), "Bar::step;Foo::advance;Bar::do_advance;A::do_step;", "Bad A virtual resolution"); |
| |
| class B extends FooBar_int { |
| function do_advance() { |
| return "B::do_advance;" . $this->do_step(); |
| } |
| |
| function do_step() { |
| return "B::do_step;"; |
| } |
| |
| function get_value() { |
| return 1; |
| } |
| } |
| |
| $b = new B(); |
| |
| check::equal($b->step(), "Bar::step;Foo::advance;B::do_advance;B::do_step;", "Bad B virtual resolution"); |
| |
| class C extends FooBar_int { |
| function do_advance() { |
| return "C::do_advance;" . parent::do_advance(); |
| } |
| |
| function do_step() { |
| return "C::do_step;"; |
| } |
| |
| function get_value() { |
| return 2; |
| } |
| |
| function get_name() { |
| return parent::get_name() . " hello"; |
| } |
| } |
| |
| $cc = new C(); |
| $c = Foobar_int::get_self($cc); |
| $c->advance(); |
| |
| check::equal($c->get_name(), "FooBar::get_name hello", "get_name failed"); |
| |
| check::equal($c->name(), "FooBar::get_name hello", "name failed"); |
| |
| check::done(); |