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_getouterscope, "avm2/getouterscope", 1),
|
||||||
(as3_hasownproperty_namespaces, "avm2/hasownproperty_namespaces", 1),
|
(as3_hasownproperty_namespaces, "avm2/hasownproperty_namespaces", 1),
|
||||||
(as3_propertyisenumerable_namespaces, "avm2/propertyisenumerable_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.
|
// 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