tests: Add test for interface namespaces (accessed via coercion semantic sugar)
This commit is contained in:
parent
867ad14302
commit
9d3e249cf9
|
@ -710,6 +710,7 @@ swf_tests! {
|
|||
(as3_getouterscope, "avm2/getouterscope", 1),
|
||||
(as3_hasownproperty_namespaces, "avm2/hasownproperty_namespaces", 1),
|
||||
(as3_propertyisenumerable_namespaces, "avm2/propertyisenumerable_namespaces", 1),
|
||||
(as3_interface_namespaces, "avm2/interface_namespaces", 1),
|
||||
}
|
||||
|
||||
// TODO: These tests have some inaccuracies currently, so we use approx_eq to test that numeric values are close enough.
|
||||
|
|
|
@ -0,0 +1,152 @@
|
|||
package {
|
||||
public class Test {
|
||||
}
|
||||
}
|
||||
|
||||
namespace ruffle = "https://ruffle.rs/AS3/test_ns";
|
||||
|
||||
interface ITest2 {
|
||||
function method();
|
||||
function method2();
|
||||
}
|
||||
|
||||
class Test2 implements ITest2 {
|
||||
function Test2() {
|
||||
}
|
||||
|
||||
public function method() {
|
||||
trace("Instance method");
|
||||
}
|
||||
|
||||
public function method2() {
|
||||
trace("Instance method 2");
|
||||
}
|
||||
|
||||
ruffle function method() {
|
||||
trace("Ruffle-NS instance method");
|
||||
}
|
||||
}
|
||||
|
||||
interface ITest3 extends ITest2 {
|
||||
function method3()
|
||||
}
|
||||
|
||||
class Test3 extends Test2 implements ITest3 {
|
||||
function Test3() {
|
||||
}
|
||||
|
||||
public override function method() {
|
||||
trace("Child instance method pre-super");
|
||||
super.method();
|
||||
trace("Child instance method post-super");
|
||||
}
|
||||
|
||||
public function method3() {
|
||||
trace("Child instance method3 pre-super");
|
||||
super.method();
|
||||
trace("Child instance method3 post-super");
|
||||
}
|
||||
}
|
||||
|
||||
class Test4 extends Test3 {
|
||||
function Test4() {
|
||||
}
|
||||
|
||||
public override function method2() {
|
||||
trace("Grandchild instance method2 pre-super");
|
||||
super.method2();
|
||||
trace("Grandchild instance method2 post-super");
|
||||
}
|
||||
|
||||
public override function method3() {
|
||||
trace("Grandchild instance method3 pre-super");
|
||||
super.method3();
|
||||
trace("Grandchild instance method3 post-super");
|
||||
}
|
||||
}
|
||||
|
||||
interface IConflictTest2 {
|
||||
function method();
|
||||
}
|
||||
|
||||
class ConflictTest implements ITest2, IConflictTest2 {
|
||||
public function method() {
|
||||
trace("Conflicting instance method");
|
||||
}
|
||||
|
||||
public function method2() {
|
||||
trace("Nonconflicting instance method 2");
|
||||
}
|
||||
}
|
||||
|
||||
trace("///var x = new Test3();");
|
||||
var x = new Test3();
|
||||
trace("///var x_as_iface2: ITest2 = x;");
|
||||
var x_as_iface2: ITest2 = x;
|
||||
trace("///var x_as_iface3: ITest3 = x;");
|
||||
var x_as_iface3: ITest3 = x;
|
||||
|
||||
trace("///x_as_iface2.method();");
|
||||
trace(x_as_iface2.method());
|
||||
|
||||
trace("///x_as_iface2.method2();");
|
||||
trace(x_as_iface2.method2());
|
||||
|
||||
trace("///x_as_iface2.ruffle::method();");
|
||||
trace(x_as_iface2.ruffle::method());
|
||||
|
||||
trace("///x_as_iface3.method();");
|
||||
trace(x_as_iface3.method());
|
||||
|
||||
trace("///x_as_iface3.method2();");
|
||||
trace(x_as_iface3.method2());
|
||||
|
||||
trace("///x_as_iface3.ruffle::method();");
|
||||
trace(x_as_iface3.ruffle::method());
|
||||
|
||||
trace("///x_as_iface3.method3();");
|
||||
trace(x_as_iface3.method3());
|
||||
|
||||
trace("///var y = new Test4();");
|
||||
var y = new Test4();
|
||||
trace("///var y_as_iface2: ITest2 = y;");
|
||||
var y_as_iface2: ITest2 = y;
|
||||
trace("///var y_as_iface3: ITest3 = y;");
|
||||
var y_as_iface3: ITest3 = y;
|
||||
|
||||
trace("///y_as_iface2.method();");
|
||||
trace(y_as_iface2.method());
|
||||
|
||||
trace("///y_as_iface2.method2();");
|
||||
trace(y_as_iface2.method2());
|
||||
|
||||
trace("///y_as_iface2.ruffle::method();");
|
||||
trace(y_as_iface2.ruffle::method());
|
||||
|
||||
trace("///y_as_iface3.method();");
|
||||
trace(y_as_iface3.method());
|
||||
|
||||
trace("///y_as_iface3.method2();");
|
||||
trace(y_as_iface3.method2());
|
||||
|
||||
trace("///y_as_iface3.method3();");
|
||||
trace(y_as_iface3.method3());
|
||||
|
||||
trace("///y_as_iface3.ruffle::method();");
|
||||
trace(y_as_iface3.ruffle::method());
|
||||
|
||||
trace("///var z = new ConflictTest();");
|
||||
var z = new ConflictTest();
|
||||
trace("///var z_as_iface2: ITest2 = z;");
|
||||
var z_as_iface2: ITest2 = z;
|
||||
trace("///var z_as_conflict: IConflictTest2 = z;");
|
||||
var z_as_conflict: IConflictTest2 = z;
|
||||
|
||||
trace("///z_as_iface2.method();");
|
||||
trace(z_as_iface2.method());
|
||||
|
||||
trace("///z_as_iface2.method2();");
|
||||
trace(z_as_iface2.method2());
|
||||
|
||||
trace("///z_as_conflict.method();");
|
||||
trace(z_as_conflict.method());
|
|
@ -0,0 +1,78 @@
|
|||
///var x = new Test3();
|
||||
///var x_as_iface2: ITest2 = x;
|
||||
///var x_as_iface3: ITest3 = x;
|
||||
///x_as_iface2.method();
|
||||
Child instance method pre-super
|
||||
Instance method
|
||||
Child instance method post-super
|
||||
undefined
|
||||
///x_as_iface2.method2();
|
||||
Instance method 2
|
||||
undefined
|
||||
///x_as_iface2.ruffle::method();
|
||||
Ruffle-NS instance method
|
||||
undefined
|
||||
///x_as_iface3.method();
|
||||
Child instance method pre-super
|
||||
Instance method
|
||||
Child instance method post-super
|
||||
undefined
|
||||
///x_as_iface3.method2();
|
||||
Instance method 2
|
||||
undefined
|
||||
///x_as_iface3.ruffle::method();
|
||||
Ruffle-NS instance method
|
||||
undefined
|
||||
///x_as_iface3.method3();
|
||||
Child instance method3 pre-super
|
||||
Instance method
|
||||
Child instance method3 post-super
|
||||
undefined
|
||||
///var y = new Test4();
|
||||
///var y_as_iface2: ITest2 = y;
|
||||
///var y_as_iface3: ITest3 = y;
|
||||
///y_as_iface2.method();
|
||||
Child instance method pre-super
|
||||
Instance method
|
||||
Child instance method post-super
|
||||
undefined
|
||||
///y_as_iface2.method2();
|
||||
Grandchild instance method2 pre-super
|
||||
Instance method 2
|
||||
Grandchild instance method2 post-super
|
||||
undefined
|
||||
///y_as_iface2.ruffle::method();
|
||||
Ruffle-NS instance method
|
||||
undefined
|
||||
///y_as_iface3.method();
|
||||
Child instance method pre-super
|
||||
Instance method
|
||||
Child instance method post-super
|
||||
undefined
|
||||
///y_as_iface3.method2();
|
||||
Grandchild instance method2 pre-super
|
||||
Instance method 2
|
||||
Grandchild instance method2 post-super
|
||||
undefined
|
||||
///y_as_iface3.method3();
|
||||
Grandchild instance method3 pre-super
|
||||
Child instance method3 pre-super
|
||||
Instance method
|
||||
Child instance method3 post-super
|
||||
Grandchild instance method3 post-super
|
||||
undefined
|
||||
///y_as_iface3.ruffle::method();
|
||||
Ruffle-NS instance method
|
||||
undefined
|
||||
///var z = new ConflictTest();
|
||||
///var z_as_iface2: ITest2 = z;
|
||||
///var z_as_conflict: IConflictTest2 = z;
|
||||
///z_as_iface2.method();
|
||||
Conflicting instance method
|
||||
undefined
|
||||
///z_as_iface2.method2();
|
||||
Nonconflicting instance method 2
|
||||
undefined
|
||||
///z_as_conflict.method();
|
||||
Conflicting instance method
|
||||
undefined
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue