--- /dev/null
+--TEST--
+Testing callback in alias
+--FILE--
+<?php
+
+class foo {
+ static public function test() {
+ print "hello\n";
+ }
+ public function test2() {
+ print "foobar!\n";
+ }
+}
+
+class_alias('FOO', 'bar');
+
+call_user_func(array('bar', 'test'));
+
+
+$a = new bar;
+call_user_func(array($a, 'test2'));
+
+?>
+--EXPECT--
+hello
+foobar!
--- /dev/null
+--TEST--
+Testing dynamic alias name
+--FILE--
+<?php
+
+namespace test::baz;
+
+class foo {
+}
+
+new foo;
+
+class_alias(__NAMESPACE__ .'::foo', __NAMESPACE__ .'::T');
+
+var_dump(new foo);
+var_dump(new T);
+
+$var = __NAMESPACE__ .'::foo';
+var_dump(new $var);
+
+$var = __NAMESPACE__ .'::T';
+var_dump(new $var);
+
+?>
+--EXPECTF--
+object(test::baz::foo)#%d (0) {
+}
+object(test::baz::foo)#%d (0) {
+}
+object(test::baz::foo)#%d (0) {
+}
+object(test::baz::foo)#%d (0) {
+}
--- /dev/null
+--TEST--
+Testing alias of alias
+--FILE--
+<?php
+
+namespace test::baz;
+
+class foo {
+}
+
+new foo;
+
+$alias1 = __NAMESPACE__ .'::T';
+class_alias(__NAMESPACE__ .'::foo', $alias1);
+
+$alias2 = $alias1 .'::BAR';
+class_alias($alias1, $alias2);
+
+var_dump(new test::baz::foo, new test::baz::T::BAR);
+
+?>
+--EXPECTF--
+object(test::baz::foo)#%d (0) {
+}
+object(test::baz::foo)#%d (0) {
+}
--- /dev/null
+--TEST--
+Testing creation of alias to class name without namespace prefix
+--FILE--
+<?php
+
+namespace foo;
+
+class bar {
+}
+
+class_alias('bar', 'baz');
+
+?>
+--EXPECTF--
+Warning: Class 'bar' not found in %s on line %d
--- /dev/null
+--TEST--
+Testing instantiation using namespace:: prefix
+--FILE--
+<?php
+
+namespace foo;
+
+class bar {
+}
+
+class_alias('foo::bar', 'foo::baz');
+
+var_dump(new namespace::baz);
+
+?>
+--EXPECTF--
+object(foo::bar)#%d (0) {
+}
--- /dev/null
+--TEST--
+Testing creation of alias to global scope
+--FILE--
+<?php
+
+namespace foo;
+
+class bar {
+}
+
+class_alias('foo::bar', 'foo');
+
+var_dump(new ::foo);
+var_dump(new foo);
+
+?>
+--EXPECTF--
+object(foo::bar)#%d (0) {
+}
+
+Fatal error: Class 'foo::foo' not found in %s on line %d
--- /dev/null
+--TEST--
+Testing alias with get_called_class() and get_class()
+--FILE--
+<?php
+
+class foo {
+ public function __construct() {
+ echo get_called_class(), "\n";
+ }
+ static public function test() {
+ echo get_class(), "\n";
+ }
+}
+
+class_alias('foo', 'bar');
+
+new bar;
+
+
+class baz extends bar {
+}
+
+new baz;
+baz::test();
+
+bar::test();
+
+?>
+--EXPECTF--
+foo
+baz
+foo
+foo
--- /dev/null
+--TEST--
+Testing class alias with is_subclass_of()
+--FILE--
+<?php
+
+class foo {
+}
+
+class_alias('foo', 'bar');
+
+
+class baz extends bar {
+}
+
+var_dump(is_subclass_of(new foo, 'foo'));
+var_dump(is_subclass_of(new foo, 'bar'));
+var_dump(is_subclass_of(new foo, 'baz'));
+
+var_dump(is_subclass_of(new bar, 'foo'));
+var_dump(is_subclass_of(new bar, 'bar'));
+var_dump(is_subclass_of(new bar, 'baz'));
+
+var_dump(is_subclass_of(new baz, 'foo'));
+var_dump(is_subclass_of(new baz, 'bar'));
+var_dump(is_subclass_of(new baz, 'baz'));
+
+?>
+--EXPECT--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(true)
+bool(true)
+bool(false)
--- /dev/null
+--TEST--
+Trying to redeclare class name in global scope inside namespace
+--FILE--
+<?php
+
+namespace foo;
+
+
+class foo {
+}
+
+class_alias(__NAMESPACE__ .'::foo', 'foo');
+class_alias('::foo', 'foo');
+
+?>
+--EXPECTF--
+Warning: Cannot redeclare class foo in %s on line %d
--- /dev/null
+--TEST--
+Testing class alias in multiple namespaces
+--FILE--
+<?php
+
+namespace foo;
+
+
+class foo {
+}
+
+class_alias(__NAMESPACE__ .'::foo', 'foo');
+
+namespace foo::bar;
+
+class foo {
+}
+
+class_alias(__NAMESPACE__ .'::foo', 'bar');
+
+
+var_dump(new ::foo, new ::bar);
+
+var_dump(new foo::foo, new foo::bar);
+
+?>
+--EXPECTF--
+object(foo::foo)#1 (0) {
+}
+object(foo::bar::foo)#2 (0) {
+}
+
+Fatal error: Class 'foo::bar' not found in %s on line %d