|
@@ -4,15 +4,17 @@ import php.*;
|
|
|
|
|
|
using StringTools;
|
|
using StringTools;
|
|
|
|
|
|
-class TestPhp extends Test
|
|
|
|
-{
|
|
|
|
- var list : Array<Dynamic>;
|
|
|
|
- var list2 : Array<Dynamic>;
|
|
|
|
- function empty() return true;
|
|
|
|
|
|
+class TestPhp extends Test {
|
|
|
|
+ var list:Array<Dynamic>;
|
|
|
|
+ var list2:Array<Dynamic>;
|
|
|
|
+
|
|
|
|
+ function empty()
|
|
|
|
+ return true;
|
|
|
|
+
|
|
function testAbstractEnum() {
|
|
function testAbstractEnum() {
|
|
eq(Abstract.getName(), "Abstract");
|
|
eq(Abstract.getName(), "Abstract");
|
|
var x = Const("foo");
|
|
var x = Const("foo");
|
|
- var s = switch(x) {
|
|
|
|
|
|
+ var s = switch (x) {
|
|
case Const(s): s;
|
|
case Const(s): s;
|
|
case Abstract: "null";
|
|
case Abstract: "null";
|
|
}
|
|
}
|
|
@@ -25,17 +27,18 @@ class TestPhp extends Test
|
|
|
|
|
|
function testList2() {
|
|
function testList2() {
|
|
list2 = new Array<Dynamic>();
|
|
list2 = new Array<Dynamic>();
|
|
- for( l in list2 ) {} // fails here
|
|
|
|
|
|
+ for (l in list2) {} // fails here
|
|
t(true);
|
|
t(true);
|
|
}
|
|
}
|
|
|
|
|
|
function testList() {
|
|
function testList() {
|
|
list = new Array<Dynamic>();
|
|
list = new Array<Dynamic>();
|
|
- for( l in list ) {} // fails here
|
|
|
|
|
|
+ for (l in list) {} // fails here
|
|
t(true);
|
|
t(true);
|
|
}
|
|
}
|
|
|
|
|
|
var switchVal = "1";
|
|
var switchVal = "1";
|
|
|
|
+
|
|
function testIssue7257_looseSwitchComparison() {
|
|
function testIssue7257_looseSwitchComparison() {
|
|
var result = switch (switchVal) {
|
|
var result = switch (switchVal) {
|
|
case "01": false;
|
|
case "01": false;
|
|
@@ -49,12 +52,12 @@ class TestPhp extends Test
|
|
var a = Syntax.customArrayDecl([1 => 'hello', 'world' => true]);
|
|
var a = Syntax.customArrayDecl([1 => 'hello', 'world' => true]);
|
|
var keys:Array<Dynamic> = [];
|
|
var keys:Array<Dynamic> = [];
|
|
var values:Array<Dynamic> = [];
|
|
var values:Array<Dynamic> = [];
|
|
- for(k => v in a) {
|
|
|
|
|
|
+ for (k => v in a) {
|
|
keys.push(k);
|
|
keys.push(k);
|
|
values.push(v);
|
|
values.push(v);
|
|
}
|
|
}
|
|
- aeq(([1, 'world']:Array<Dynamic>), keys);
|
|
|
|
- aeq((['hello', true]:Array<Dynamic>), values);
|
|
|
|
|
|
+ aeq(([1, 'world'] : Array<Dynamic>), keys);
|
|
|
|
+ aeq((['hello', true] : Array<Dynamic>), values);
|
|
}
|
|
}
|
|
|
|
|
|
function testIssue1828() {
|
|
function testIssue1828() {
|
|
@@ -68,7 +71,7 @@ class TestPhp extends Test
|
|
|
|
|
|
function testIssue1521() {
|
|
function testIssue1521() {
|
|
var pattern = "$a$b";
|
|
var pattern = "$a$b";
|
|
- var result = pattern.replace("$a","A").replace("$b","B");
|
|
|
|
|
|
+ var result = pattern.replace("$a", "A").replace("$b", "B");
|
|
eq("AB", result);
|
|
eq("AB", result);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -92,14 +95,14 @@ class TestPhp extends Test
|
|
|
|
|
|
function testStupidShit9000() {
|
|
function testStupidShit9000() {
|
|
var f = make();
|
|
var f = make();
|
|
- f.handle( function() {
|
|
|
|
|
|
+ f.handle(function() {
|
|
eq("ok", "ok");
|
|
eq("ok", "ok");
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
@:analyzer(ignore)
|
|
@:analyzer(ignore)
|
|
function testIssue9924() {
|
|
function testIssue9924() {
|
|
- var v = Std.random(10);
|
|
|
|
|
|
+ var v:Any = Std.random(10);
|
|
|
|
|
|
var GLOBALS = v;
|
|
var GLOBALS = v;
|
|
var _SERVER = v;
|
|
var _SERVER = v;
|
|
@@ -130,7 +133,8 @@ class TestPhp extends Test
|
|
Check compiler will generate proper function signature with `Ref<T>` arguments
|
|
Check compiler will generate proper function signature with `Ref<T>` arguments
|
|
**/
|
|
**/
|
|
function testRef() {
|
|
function testRef() {
|
|
- function modify(i:Ref<Int>) i = 10; //avoid inlining
|
|
|
|
|
|
+ function modify(i:Ref<Int>)
|
|
|
|
+ i = 10; // avoid inlining
|
|
|
|
|
|
var i = 0;
|
|
var i = 0;
|
|
modify(i);
|
|
modify(i);
|
|
@@ -173,7 +177,9 @@ class TestPhp extends Test
|
|
var result = add(null, 'b');
|
|
var result = add(null, 'b');
|
|
eq(result, 'nullb');
|
|
eq(result, 'nullb');
|
|
}
|
|
}
|
|
- function add(a:Dynamic, b:Dynamic):Dynamic return a + b;
|
|
|
|
|
|
+
|
|
|
|
+ function add(a:Dynamic, b:Dynamic):Dynamic
|
|
|
|
+ return a + b;
|
|
|
|
|
|
function testStringClosureType() {
|
|
function testStringClosureType() {
|
|
var fn:Dynamic = 'foo'.toUpperCase;
|
|
var fn:Dynamic = 'foo'.toUpperCase;
|
|
@@ -185,16 +191,16 @@ class TestPhp extends Test
|
|
function testStringAsAnon() {
|
|
function testStringAsAnon() {
|
|
var str = 'bar';
|
|
var str = 'bar';
|
|
var anon:{
|
|
var anon:{
|
|
- function toUpperCase() : String;
|
|
|
|
- function toLowerCase() : String;
|
|
|
|
- function charAt( index : Int) : String;
|
|
|
|
- function indexOf( str : String, ?startIndex : Int ) : Int;
|
|
|
|
- function lastIndexOf( str : String, ?startIndex : Int ) : Int;
|
|
|
|
- function split( delimiter : String ) : Array<String>;
|
|
|
|
- function toString() : String;
|
|
|
|
- function substring( startIndex : Int, ?endIndex : Int ) : String;
|
|
|
|
- function charCodeAt( index : Int) : Null<Int> ;
|
|
|
|
- function substr( pos : Int, ?len : Int ) : String ;
|
|
|
|
|
|
+ function toUpperCase():String;
|
|
|
|
+ function toLowerCase():String;
|
|
|
|
+ function charAt(index:Int):String;
|
|
|
|
+ function indexOf(str:String, ?startIndex:Int):Int;
|
|
|
|
+ function lastIndexOf(str:String, ?startIndex:Int):Int;
|
|
|
|
+ function split(delimiter:String):Array<String>;
|
|
|
|
+ function toString():String;
|
|
|
|
+ function substring(startIndex:Int, ?endIndex:Int):String;
|
|
|
|
+ function charCodeAt(index:Int):Null<Int>;
|
|
|
|
+ function substr(pos:Int, ?len:Int):String;
|
|
} = str;
|
|
} = str;
|
|
|
|
|
|
eq(str.charAt(0), anon.charAt(0));
|
|
eq(str.charAt(0), anon.charAt(0));
|
|
@@ -202,7 +208,7 @@ class TestPhp extends Test
|
|
eq(str.indexOf("a"), anon.indexOf("a"));
|
|
eq(str.indexOf("a"), anon.indexOf("a"));
|
|
eq(str.lastIndexOf("r"), anon.lastIndexOf("r"));
|
|
eq(str.lastIndexOf("r"), anon.lastIndexOf("r"));
|
|
eq(str.split("a")[1], anon.split("a")[1]);
|
|
eq(str.split("a")[1], anon.split("a")[1]);
|
|
- eq(str.substr(1),anon.substr(1, 2));
|
|
|
|
|
|
+ eq(str.substr(1), anon.substr(1, 2));
|
|
eq(str.substring(0, 2), anon.substring(0, 2));
|
|
eq(str.substring(0, 2), anon.substring(0, 2));
|
|
eq(str, anon.toLowerCase());
|
|
eq(str, anon.toLowerCase());
|
|
eq(str.toUpperCase(), anon.toUpperCase());
|
|
eq(str.toUpperCase(), anon.toUpperCase());
|
|
@@ -210,33 +216,33 @@ class TestPhp extends Test
|
|
}
|
|
}
|
|
|
|
|
|
function testClosureComparison() {
|
|
function testClosureComparison() {
|
|
- var fn1:()->Void;
|
|
|
|
- var fn2:()->Void;
|
|
|
|
|
|
+ var fn1:() -> Void;
|
|
|
|
+ var fn2:() -> Void;
|
|
eq(ClosureDummy.testStatic, ClosureDummy.testStatic);
|
|
eq(ClosureDummy.testStatic, ClosureDummy.testStatic);
|
|
- //Waiting for a fix: https://github.com/HaxeFoundation/haxe/issues/6719
|
|
|
|
|
|
+ // Waiting for a fix: https://github.com/HaxeFoundation/haxe/issues/6719
|
|
// t(ClosureDummy.testStatic == ClosureDummy.testStatic);
|
|
// t(ClosureDummy.testStatic == ClosureDummy.testStatic);
|
|
- t((ClosureDummy:Dynamic).testStatic == (ClosureDummy:Dynamic).testStatic);
|
|
|
|
- fn1 = (ClosureDummy:Dynamic).testStatic;
|
|
|
|
- fn2 = (ClosureDummy:Dynamic).testStatic;
|
|
|
|
|
|
+ t((ClosureDummy : Dynamic).testStatic == (ClosureDummy : Dynamic).testStatic);
|
|
|
|
+ fn1 = (ClosureDummy : Dynamic).testStatic;
|
|
|
|
+ fn2 = (ClosureDummy : Dynamic).testStatic;
|
|
t(fn1 == fn2);
|
|
t(fn1 == fn2);
|
|
|
|
|
|
var inst = new ClosureDummy();
|
|
var inst = new ClosureDummy();
|
|
eq(inst.test, inst.test);
|
|
eq(inst.test, inst.test);
|
|
- //Waiting for a fix: https://github.com/HaxeFoundation/haxe/issues/6719
|
|
|
|
|
|
+ // Waiting for a fix: https://github.com/HaxeFoundation/haxe/issues/6719
|
|
// t(inst.test == inst.test);
|
|
// t(inst.test == inst.test);
|
|
- t((inst:Dynamic).test == (inst:Dynamic).test);
|
|
|
|
- fn1 = (inst:Dynamic).test;
|
|
|
|
- fn2 = (inst:Dynamic).test;
|
|
|
|
|
|
+ t((inst : Dynamic).test == (inst : Dynamic).test);
|
|
|
|
+ fn1 = (inst : Dynamic).test;
|
|
|
|
+ fn2 = (inst : Dynamic).test;
|
|
t(fn1 == fn2);
|
|
t(fn1 == fn2);
|
|
var a = [fn1];
|
|
var a = [fn1];
|
|
t(a.indexOf(fn2) == 0);
|
|
t(a.indexOf(fn2) == 0);
|
|
t(a.remove(fn2));
|
|
t(a.remove(fn2));
|
|
|
|
|
|
var inst2 = new ClosureDummy();
|
|
var inst2 = new ClosureDummy();
|
|
- //Waiting for a fix: https://github.com/HaxeFoundation/haxe/issues/6719
|
|
|
|
|
|
+ // Waiting for a fix: https://github.com/HaxeFoundation/haxe/issues/6719
|
|
// f(inst.test == inst2.test);
|
|
// f(inst.test == inst2.test);
|
|
a = [fn1];
|
|
a = [fn1];
|
|
- fn2 = (inst2:Dynamic).test;
|
|
|
|
|
|
+ fn2 = (inst2 : Dynamic).test;
|
|
t(a.indexOf(fn2) < 0);
|
|
t(a.indexOf(fn2) < 0);
|
|
f(a.remove(fn2));
|
|
f(a.remove(fn2));
|
|
}
|
|
}
|
|
@@ -249,6 +255,7 @@ class TestPhp extends Test
|
|
}
|
|
}
|
|
|
|
|
|
var a = 2;
|
|
var a = 2;
|
|
|
|
+
|
|
function testSyntaxCodeParens() {
|
|
function testSyntaxCodeParens() {
|
|
eq(8, Syntax.code("{0} * {1}", a, a + a));
|
|
eq(8, Syntax.code("{0} * {1}", a, a + a));
|
|
}
|
|
}
|
|
@@ -258,8 +265,6 @@ class TestPhp extends Test
|
|
var phpPrefix = #if php_prefix Boot.getPrefix() + "\\" #else "" #end;
|
|
var phpPrefix = #if php_prefix Boot.getPrefix() + "\\" #else "" #end;
|
|
eq(phpPrefix + "Array_hx", Syntax.nativeClassName(Array));
|
|
eq(phpPrefix + "Array_hx", Syntax.nativeClassName(Array));
|
|
eq(phpPrefix + "unit\\Annotation", Syntax.nativeClassName(Annotation));
|
|
eq(phpPrefix + "unit\\Annotation", Syntax.nativeClassName(Annotation));
|
|
- var cls = php.Web;
|
|
|
|
- eq(phpPrefix + "php\\Web", Syntax.nativeClassName(cls));
|
|
|
|
var enm = Annotation;
|
|
var enm = Annotation;
|
|
eq(phpPrefix + "unit\\Annotation", Syntax.nativeClassName(enm));
|
|
eq(phpPrefix + "unit\\Annotation", Syntax.nativeClassName(enm));
|
|
}
|
|
}
|
|
@@ -268,14 +273,14 @@ class TestPhp extends Test
|
|
var expected:php.NativeString = '123456';
|
|
var expected:php.NativeString = '123456';
|
|
|
|
|
|
var actual = '';
|
|
var actual = '';
|
|
- for(c in expected) {
|
|
|
|
|
|
+ for (c in expected) {
|
|
actual += c;
|
|
actual += c;
|
|
}
|
|
}
|
|
eq(expected, actual);
|
|
eq(expected, actual);
|
|
|
|
|
|
var actual = '';
|
|
var actual = '';
|
|
var keys = [];
|
|
var keys = [];
|
|
- for(i => c in expected) {
|
|
|
|
|
|
+ for (i => c in expected) {
|
|
keys.push(i);
|
|
keys.push(i);
|
|
actual += c;
|
|
actual += c;
|
|
}
|
|
}
|
|
@@ -287,16 +292,16 @@ class TestPhp extends Test
|
|
var keys:Array<Dynamic> = ['hello', 12];
|
|
var keys:Array<Dynamic> = ['hello', 12];
|
|
var values:Array<Dynamic> = [10, 'world'];
|
|
var values:Array<Dynamic> = [10, 'world'];
|
|
var a = new php.NativeArray();
|
|
var a = new php.NativeArray();
|
|
- for(i in 0...keys.length) {
|
|
|
|
|
|
+ for (i in 0...keys.length) {
|
|
a[keys[i]] = values[i];
|
|
a[keys[i]] = values[i];
|
|
}
|
|
}
|
|
|
|
|
|
- var actualValues = [for(v in a) v];
|
|
|
|
|
|
+ var actualValues = [for (v in a) v];
|
|
aeq(values, actualValues);
|
|
aeq(values, actualValues);
|
|
|
|
|
|
var actualKeys:Array<Dynamic> = [];
|
|
var actualKeys:Array<Dynamic> = [];
|
|
var actualValues:Array<Dynamic> = [];
|
|
var actualValues:Array<Dynamic> = [];
|
|
- for(k => v in a) {
|
|
|
|
|
|
+ for (k => v in a) {
|
|
actualKeys.push(k);
|
|
actualKeys.push(k);
|
|
actualValues.push(v);
|
|
actualValues.push(v);
|
|
}
|
|
}
|
|
@@ -307,20 +312,20 @@ class TestPhp extends Test
|
|
function testNativeIndexedArray() {
|
|
function testNativeIndexedArray() {
|
|
var expected = [10, 20, 30];
|
|
var expected = [10, 20, 30];
|
|
var a = new NativeIndexedArray<Int>();
|
|
var a = new NativeIndexedArray<Int>();
|
|
- for(v in expected) {
|
|
|
|
|
|
+ for (v in expected) {
|
|
a.push(v);
|
|
a.push(v);
|
|
}
|
|
}
|
|
|
|
|
|
- var actual = [for(v in a) v];
|
|
|
|
|
|
+ var actual = [for (v in a) v];
|
|
aeq(expected, actual);
|
|
aeq(expected, actual);
|
|
|
|
|
|
var indexes = [];
|
|
var indexes = [];
|
|
var values = [];
|
|
var values = [];
|
|
- for(i => v in a) {
|
|
|
|
|
|
+ for (i => v in a) {
|
|
indexes.push(i);
|
|
indexes.push(i);
|
|
values.push(v);
|
|
values.push(v);
|
|
}
|
|
}
|
|
- aeq([for(i in 0...expected.length) i], indexes);
|
|
|
|
|
|
+ aeq([for (i in 0...expected.length) i], indexes);
|
|
aeq(expected, values);
|
|
aeq(expected, values);
|
|
|
|
|
|
eq('[10,20,30]', Std.string(a));
|
|
eq('[10,20,30]', Std.string(a));
|
|
@@ -330,16 +335,16 @@ class TestPhp extends Test
|
|
var keys = ['one', 'two'];
|
|
var keys = ['one', 'two'];
|
|
var values = [1, 2];
|
|
var values = [1, 2];
|
|
var a = new NativeAssocArray<Int>();
|
|
var a = new NativeAssocArray<Int>();
|
|
- for(i in 0...keys.length) {
|
|
|
|
|
|
+ for (i in 0...keys.length) {
|
|
a[keys[i]] = values[i];
|
|
a[keys[i]] = values[i];
|
|
}
|
|
}
|
|
|
|
|
|
- var actualValues = [for(v in a) v];
|
|
|
|
|
|
+ var actualValues = [for (v in a) v];
|
|
aeq(values, actualValues);
|
|
aeq(values, actualValues);
|
|
|
|
|
|
var actualKeys = [];
|
|
var actualKeys = [];
|
|
var actualValues = [];
|
|
var actualValues = [];
|
|
- for(k => v in a) {
|
|
|
|
|
|
+ for (k => v in a) {
|
|
actualKeys.push(k);
|
|
actualKeys.push(k);
|
|
actualValues.push(v);
|
|
actualValues.push(v);
|
|
}
|
|
}
|
|
@@ -350,18 +355,24 @@ class TestPhp extends Test
|
|
|
|
|
|
private class ClosureDummy {
|
|
private class ClosureDummy {
|
|
static public function testStatic() {}
|
|
static public function testStatic() {}
|
|
|
|
+
|
|
public function new() {}
|
|
public function new() {}
|
|
|
|
+
|
|
public function test() {}
|
|
public function test() {}
|
|
}
|
|
}
|
|
|
|
|
|
private class DummyForRef {
|
|
private class DummyForRef {
|
|
public var field:Int = 0;
|
|
public var field:Int = 0;
|
|
|
|
+
|
|
public function new() {}
|
|
public function new() {}
|
|
- public function getThis() return this;
|
|
|
|
|
|
+
|
|
|
|
+ public function getThis()
|
|
|
|
+ return this;
|
|
}
|
|
}
|
|
|
|
|
|
class Class2146 {
|
|
class Class2146 {
|
|
var array:Array<Class2146>;
|
|
var array:Array<Class2146>;
|
|
|
|
+
|
|
function new() {
|
|
function new() {
|
|
array = new Array<Class2146>();
|
|
array = new Array<Class2146>();
|
|
}
|
|
}
|
|
@@ -373,7 +384,7 @@ class Class2146 {
|
|
a.array.push(b);
|
|
a.array.push(b);
|
|
b.array.push(a);
|
|
b.array.push(a);
|
|
c.array.push(a);
|
|
c.array.push(a);
|
|
- return Lambda.has(c.array,b);
|
|
|
|
|
|
+ return Lambda.has(c.array, b);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -382,13 +393,14 @@ enum Annotation {
|
|
Const(i:String);
|
|
Const(i:String);
|
|
}
|
|
}
|
|
|
|
|
|
-private typedef Func = ()->Void;
|
|
|
|
|
|
+private typedef Func = () -> Void;
|
|
|
|
|
|
private abstract FunctionCaller(Func->Void) to Func->Void {
|
|
private abstract FunctionCaller(Func->Void) to Func->Void {
|
|
- public function new(f:Func->Void) this = f;
|
|
|
|
|
|
+ public function new(f:Func->Void)
|
|
|
|
+ this = f;
|
|
}
|
|
}
|
|
|
|
|
|
-private abstract FunctionCallerWrapper( FunctionCaller ) from FunctionCaller to FunctionCaller {
|
|
|
|
|
|
+private abstract FunctionCallerWrapper(FunctionCaller) from FunctionCaller to FunctionCaller {
|
|
public inline function handle(callback:Func):Void
|
|
public inline function handle(callback:Func):Void
|
|
- return (this:Func->Void)(callback);
|
|
|
|
-}
|
|
|
|
|
|
+ return (this : Func->Void)(callback);
|
|
|
|
+}
|