tests: Add test for interface namespaces (accessed via coercion semantic sugar)

This commit is contained in:
David Wendt 2021-10-30 15:34:14 -04:00 committed by kmeisthax
parent 867ad14302
commit 9d3e249cf9
5 changed files with 231 additions and 0 deletions

View File

@ -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.

View File

@ -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());

View File

@ -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.