<?php

require "tests.php";
require "director_basic.php";

// No new functions
check::functions(array('foo_ping','foo_pong','foo_get_self','a_f','a_rg','a1_ff','myclass_method','myclass_vmethod','myclass_pmethod','myclass_cmethod','myclass_get_self','myclass_call_pmethod','myclasst_i_method','myclass_nonvirtual','myclass_nonoverride','myclass_call_nonvirtual','myclass_call_nonoverride','myclass_connect'));
// No new classes
check::classes(array('Foo','A','A1','Bar','MyClass','MyClassT_i'));
// now new vars
check::globals(array('bar_x'));

class PhpFoo extends Foo {
  function ping() {
    return "PhpFoo::ping()";
  }
}

$a = new PhpFoo();

check::equal($a->ping(), "PhpFoo::ping()", "ping failed");

check::equal($a->pong(), "Foo::pong();PhpFoo::ping()", "pong failed");

$b = new Foo();

check::equal($b->ping(), "Foo::ping()", "ping failed");

check::equal($b->pong(), "Foo::pong();Foo::ping()", "pong failed");

$a = new A1(1);

check::equal($a->rg(2), 2, "rg failed");

class PhpClass extends MyClass {
  function vmethod($b) {
    $b->x = $b->x + 31;
    return $b;
  }
}

$b = new Bar(3);
$d = new MyClass();
$c = new PhpClass();

$cc = MyClass::get_self($c);
$dd = MyClass::get_self($d);

$bc = $cc->cmethod($b);
$bd = $dd->cmethod($b);

$cc->method($b);

check::equal($bc->x, 34, "bc failed");
check::equal($bd->x, 16, "bd failed");

check::done();
?>
