diff --git a/tests/wip/php/funcTest.php b/tests/wip/php/funcTest.php index 5ae0187..68010a3 100644 --- a/tests/wip/php/funcTest.php +++ b/tests/wip/php/funcTest.php @@ -1,36 +1,418 @@ "; self::assertFalse(func::verifix_simple($func)); + $func = "->"; self::assertFalse(func::verifix_simple($func, false)); + + $func = "tsimple"; self::assertTrue(func::verifix_simple($func)); + $func = "tsimple"; self::assertTrue(func::verifix_simple($func, false)); + + $func = 'nur\sery\wip\php\impl\ntsimple'; self::assertTrue(func::verifix_simple($func)); + $func = 'nur\sery\wip\php\impl\ntsimple'; self::assertTrue(func::verifix_simple($func, false)); + + $func = 'tmissing'; self::assertFalse(func::verifix_simple($func)); + $func = 'tmissing'; self::assertTrue(func::verifix_simple($func, false)); + + $func = "::tstatic"; self::assertFalse(func::verifix_simple($func)); + $func = "::tstatic"; self::assertFalse(func::verifix_simple($func, false)); + + $func = "->tmethod"; self::assertFalse(func::verifix_simple($func)); + $func = "->tmethod"; self::assertFalse(func::verifix_simple($func, false)); + + $func = "::tmissing"; self::assertFalse(func::verifix_simple($func)); + $func = "::tmissing"; self::assertFalse(func::verifix_simple($func, false)); + + $func = "->tmissing"; self::assertFalse(func::verifix_simple($func)); + $func = "->tmissing"; self::assertFalse(func::verifix_simple($func, false)); + + $func = MyClass::class."::tstatic"; self::assertFalse(func::verifix_simple($func)); + $func = MyClass::class."::tstatic"; self::assertFalse(func::verifix_simple($func, false)); + + $func = MyClass::class."->tmethod"; self::assertFalse(func::verifix_simple($func)); + $func = MyClass::class."->tmethod"; self::assertFalse(func::verifix_simple($func, false)); + + $func = MyClass::class."::tmissing"; self::assertFalse(func::verifix_simple($func)); + $func = MyClass::class."::tmissing"; self::assertFalse(func::verifix_simple($func, false)); + + $func = MyClass::class."->tmissing"; self::assertFalse(func::verifix_simple($func)); + $func = MyClass::class."->tmissing"; self::assertFalse(func::verifix_simple($func, false)); + + # tableaux avec un seul scalaire + $func = []; self::assertFalse(func::verifix_simple($func)); + $func = []; self::assertFalse(func::verifix_simple($func, false)); + + $func = [null]; self::assertFalse(func::verifix_simple($func)); + $func = [null]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [false]; self::assertFalse(func::verifix_simple($func)); + $func = [false]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [""]; self::assertFalse(func::verifix_simple($func)); + $func = [""]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["::"]; self::assertFalse(func::verifix_simple($func)); + $func = ["::"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["->"]; self::assertFalse(func::verifix_simple($func)); + $func = ["->"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["tsimple"]; self::assertFalse(func::verifix_simple($func)); + $func = ["tsimple"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ['nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_simple($func)); + $func = ['nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["::tstatic"]; self::assertFalse(func::verifix_simple($func)); + $func = ["::tstatic"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["->tmethod"]; self::assertFalse(func::verifix_simple($func)); + $func = ["->tmethod"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["::tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = ["::tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["->tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = ["->tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [MyClass::class."::tstatic"]; self::assertFalse(func::verifix_simple($func)); + $func = [MyClass::class."::tstatic"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [MyClass::class."->tmethod"]; self::assertFalse(func::verifix_simple($func)); + $func = [MyClass::class."->tmethod"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [MyClass::class."::tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = [MyClass::class."::tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [MyClass::class."->tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = [MyClass::class."->tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + # tableaux avec deux scalaires + $func = [null, "tsimple"]; self::assertFalse(func::verifix_simple($func)); + $func = [null, "tsimple"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [null, 'nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_simple($func)); + $func = [null, 'nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_simple($func, false)); + + $func = [null, "tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = [null, "tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [null, "::tstatic"]; self::assertFalse(func::verifix_simple($func)); + $func = [null, "::tstatic"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [null, "->tmethod"]; self::assertFalse(func::verifix_simple($func)); + $func = [null, "->tmethod"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [null, "::tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = [null, "::tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [null, "->tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = [null, "->tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [false, "tsimple"]; self::assertTrue(func::verifix_simple($func)); + $func = [false, "tsimple"]; self::assertTrue(func::verifix_simple($func, false)); + + $func = [false, 'nur\sery\wip\php\impl\ntsimple']; self::assertTrue(func::verifix_simple($func)); + $func = [false, 'nur\sery\wip\php\impl\ntsimple']; self::assertTrue(func::verifix_simple($func, false)); + + $func = [false, "tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = [false, "tmissing"]; self::assertTrue(func::verifix_simple($func, false)); + + $func = [false, "::tstatic"]; self::assertFalse(func::verifix_simple($func)); + $func = [false, "::tstatic"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [false, "->tmethod"]; self::assertFalse(func::verifix_simple($func)); + $func = [false, "->tmethod"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [false, "::tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = [false, "::tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [false, "->tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = [false, "->tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["", "tsimple"]; self::assertFalse(func::verifix_simple($func)); + $func = ["", "tsimple"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["", 'nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_simple($func)); + $func = ["", 'nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["", "tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = ["", "tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["", "::tstatic"]; self::assertFalse(func::verifix_simple($func)); + $func = ["", "::tstatic"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["", "->tmethod"]; self::assertFalse(func::verifix_simple($func)); + $func = ["", "->tmethod"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["", "::tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = ["", "::tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = ["", "->tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = ["", "->tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [MyClass::class, "tstatic"]; self::assertFalse(func::verifix_simple($func)); + $func = [MyClass::class, "tstatic"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [MyClass::class, "::tstatic"]; self::assertFalse(func::verifix_simple($func)); + $func = [MyClass::class, "::tstatic"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [MyClass::class, "tmethod"]; self::assertFalse(func::verifix_simple($func)); + $func = [MyClass::class, "tmethod"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [MyClass::class, "->tmethod"]; self::assertFalse(func::verifix_simple($func)); + $func = [MyClass::class, "->tmethod"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [MyClass::class, "tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = [MyClass::class, "tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [MyClass::class, "::tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = [MyClass::class, "::tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + + $func = [MyClass::class, "->tmissing"]; self::assertFalse(func::verifix_simple($func)); + $func = [MyClass::class, "->tmissing"]; self::assertFalse(func::verifix_simple($func, false)); + } + + function testSimpleResults() { + $func = "tsimple"; self::assertTrue(func::verifix_simple($func)); + self::assertSame([false, "tsimple"], $func); + $func = "tsimple"; self::assertTrue(func::verifix_simple($func, false)); + self::assertSame([false, "tsimple"], $func); + + $func = 'nur\sery\wip\php\impl\ntsimple'; self::assertTrue(func::verifix_simple($func)); + self::assertSame([false, 'nur\sery\wip\php\impl\ntsimple'], $func); + $func = 'nur\sery\wip\php\impl\ntsimple'; self::assertTrue(func::verifix_simple($func, false)); + self::assertSame([false, 'nur\sery\wip\php\impl\ntsimple'], $func); + + $func = 'tmissing'; self::assertTrue(func::verifix_simple($func, false)); + self::assertSame([false, "tmissing"], $func); + + $func = [false, "tsimple"]; self::assertTrue(func::verifix_simple($func)); + self::assertSame([false, "tsimple"], $func); + $func = [false, "tsimple"]; self::assertTrue(func::verifix_simple($func, false)); + self::assertSame([false, "tsimple"], $func); + + $func = [false, 'nur\sery\wip\php\impl\ntsimple']; self::assertTrue(func::verifix_simple($func)); + self::assertSame([false, 'nur\sery\wip\php\impl\ntsimple'], $func); + $func = [false, 'nur\sery\wip\php\impl\ntsimple']; self::assertTrue(func::verifix_simple($func, false)); + self::assertSame([false, 'nur\sery\wip\php\impl\ntsimple'], $func); + + $func = [false, "tmissing"]; self::assertTrue(func::verifix_simple($func, false)); + self::assertSame([false, "tmissing"], $func); + } + + function testStatic() { + # scalaires + $func = null; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = null; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = false; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = false; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = ""; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = ""; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = "::"; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = "::"; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = "->"; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = "->"; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = "tsimple"; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = "tsimple"; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = 'nur\sery\wip\php\impl\ntsimple'; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = 'nur\sery\wip\php\impl\ntsimple'; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = 'tmissing'; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = 'tmissing'; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = "::tstatic"; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = "::tstatic"; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = "->tmethod"; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = "->tmethod"; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = "::tmissing"; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = "::tmissing"; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = "->tmissing"; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = "->tmissing"; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = MyClass::class."::tstatic"; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = MyClass::class."::tstatic"; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = MyClass::class."->tmethod"; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = MyClass::class."->tmethod"; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = MyClass::class."::tmissing"; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = MyClass::class."::tmissing"; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = MyClass::class."->tmissing"; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = MyClass::class."->tmissing"; self::assertFalse(func::verifix_static($func, false, $bound)); + + # tableaux avec un seul scalaire + $func = []; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = []; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = [null]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [null]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = [false]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [false]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = [""]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [""]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = ["::"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = ["::"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = ["->"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = ["->"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = ["tsimple"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = ["tsimple"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = ['nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = ['nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = ["::tstatic"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = ["::tstatic"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = ["->tmethod"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = ["->tmethod"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = ["::tmissing"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = ["::tmissing"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = ["->tmissing"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = ["->tmissing"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = [MyClass::class."::tstatic"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = [MyClass::class."::tstatic"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [MyClass::class."->tmethod"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [MyClass::class."->tmethod"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = [MyClass::class."::tmissing"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [MyClass::class."::tmissing"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [MyClass::class."->tmissing"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [MyClass::class."->tmissing"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + # tableaux avec deux scalaires + $func = [null, "tsimple"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = [null, "tsimple"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [null, 'nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [null, 'nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = [null, "tmissing"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = [null, "tmissing"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [null, "::tstatic"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = [null, "::tstatic"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [null, "->tmethod"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [null, "->tmethod"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = [null, "::tmissing"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = [null, "::tmissing"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [null, "->tmissing"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [null, "->tmissing"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = [false, "tsimple"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = [false, "tsimple"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [false, 'nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [false, 'nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = [false, "tmissing"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = [false, "tmissing"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [false, "::tstatic"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = [false, "::tstatic"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [false, "->tmethod"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [false, "->tmethod"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = [false, "::tmissing"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = [false, "::tmissing"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [false, "->tmissing"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [false, "->tmissing"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = ["", "tsimple"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = ["", "tsimple"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = ["", 'nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = ["", 'nur\sery\wip\php\impl\ntsimple']; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = ["", "tmissing"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = ["", "tmissing"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = ["", "::tstatic"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = ["", "::tstatic"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = ["", "->tmethod"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = ["", "->tmethod"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = ["", "::tmissing"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = ["", "::tmissing"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = ["", "->tmissing"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = ["", "->tmissing"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = [MyClass::class, "tstatic"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = [MyClass::class, "tstatic"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [MyClass::class, "::tstatic"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = [MyClass::class, "::tstatic"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [MyClass::class, "tmethod"]; self::assertTrue(func::verifix_static($func, true, $bound)); + $func = [MyClass::class, "tmethod"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [MyClass::class, "->tmethod"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [MyClass::class, "->tmethod"]; self::assertFalse(func::verifix_static($func, false, $bound)); + + $func = [MyClass::class, "tmissing"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [MyClass::class, "tmissing"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [MyClass::class, "::tmissing"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [MyClass::class, "::tmissing"]; self::assertTrue(func::verifix_static($func, false, $bound)); + + $func = [MyClass::class, "->tmissing"]; self::assertFalse(func::verifix_static($func, true, $bound)); + $func = [MyClass::class, "->tmissing"]; self::assertFalse(func::verifix_static($func, false, $bound)); + } + + function testStaticResults() { - $func = 'tltf_zero'; self::assertTrue(func::verifix_simple($func)); - self::assertSame([false, "tltf_zero"], $func); - $func = 'tltf_zero'; self::assertTrue(func::verifix_simple($func, false)); - self::assertSame([false, "tltf_zero"], $func); - - $func = 'nur\sery\wip\php\impl\nptf_zero'; self::assertTrue(func::verifix_simple($func)); - self::assertSame([false, 'nur\sery\wip\php\impl\nptf_zero'], $func); - $func = 'nur\sery\wip\php\impl\nptf_zero'; self::assertTrue(func::verifix_simple($func, false)); - self::assertSame([false, 'nur\sery\wip\php\impl\nptf_zero'], $func); - - $func = 'inexistant_function_xxx'; self::assertFalse(func::verifix_simple($func)); - $func = 'inexistant_function_xxx'; self::assertTrue(func::verifix_simple($func, false)); - self::assertSame([false, "inexistant_function_xxx"], $func); } } } - diff --git a/tests/wip/php/impl/MyClass.php b/tests/wip/php/impl/MyClass.php new file mode 100644 index 0000000..a97e26b --- /dev/null +++ b/tests/wip/php/impl/MyClass.php @@ -0,0 +1,12 @@ +") !== false) return false; if ($strict) { @@ -52,30 +53,55 @@ class func { return true; } - private static function parse_class(string $cf, ?string &$c, ?string &$f): bool { - if (strpos($cf, "->") !== false) return false; - if ($cf === "::") return false; - $pos = strpos($cf, "::"); - if ($pos == 0) return false; # inclus $pos === false - $c = substr($cf, 0, $pos); - $f = cv::vn(substr($cf, $pos + 2)); + private static function is_invalid(?string $m): bool { + return $m === null || $m === "" || $m === "::" || $m === "->"; + } + + private static function is_nfunction(?string $m): bool { + return strpos($m, "\\") !== false; + } + + private static function parse_static(?string &$m): bool { + $pos = strpos($m, "::"); + if ($pos === false) return false; + $m = substr($m, $pos + 2); return true; } - private static function parse_static(string $cf, ?string &$c, ?string &$f, ?bool &$bound): bool { - if (strpos($cf, "->") !== false) return false; - if ($cf === "::") return false; - $pos = strpos($cf, "::"); + private static function parse_method(?string &$m): bool { + $pos = strpos($m, "->"); if ($pos === false) return false; - if ($pos == strlen($cf) - 2) return false; + $m = substr($m, $pos + 2); + return true; + } + + private static function parse_class_m(?string $cm, ?string &$c, ?string &$m): bool { + if (self::is_invalid($cm) || self::parse_method($cm)) return false; + $pos = strpos($cm, "::"); + if ($pos === false) return false; + if ($pos === 0) return false; + $tmpc = substr($cm, 0, $pos); + $cm = substr($cm, $pos + 2); + if (self::is_nfunction($cm)) return false; + [$c, $m] = [$tmpc, cv::vn($cm)]; + return true; + } + + private static function parse_c_method(?string $cm, ?string &$c, ?string &$m, ?bool &$bound): bool { + if (self::is_invalid($cm) || self::parse_method($cm)) return false; + $pos = strpos($cm, "::"); + if ($pos === false) return false; + if ($pos == strlen($cm) - 2) return false; if ($pos > 0) { - $c = substr($cf, 0, $pos); + $tmpc = substr($cm, 0, $pos); $bound = true; } else { - $c = null; + $tmpc = null; $bound = false; } - $f = substr($cf, $pos + 2); + $cm = substr($cm, $pos + 2); + if (self::is_nfunction($cm)) return false; + [$c, $m] = [$tmpc, cv::vn($cm)]; return true; } @@ -98,35 +124,49 @@ class func { */ static function verifix_static(&$func, bool $strict=true, ?bool &$bound=null): bool { if (is_string($func)) { - if (!self::parse_static($func, $c, $f, $bound)) return false; + if (!self::parse_c_method($func, $c, $f, $bound)) return false; $func = [$c, $f]; } elseif (is_array($func)) { if (!array_key_exists(0, $func)) return false; $c = $func[0]; - if (self::parse_class($c, $c, $f)) { + if (self::parse_class_m($c, $c, $f)) { + $func[0] = $c; if ($f !== null) { - # ["class::method"] + # ["class::method"] --> ["class", "method"] array_splice($func, 1, 0, [$f]); } $bound = true; + } elseif (self::parse_c_method($c, $c, $f, $bound)) { + # ["::method"] --> [null, "method"] + array_splice($func, 0, 0, [null]); + $func[1] = $f; } else { - $bound = false; + if (self::is_invalid($c)) $c = null; + $func[0] = $c; + $bound = is_string($c); } # if (!array_key_exists(1, $func)) return false; $f = $func[1]; if (!is_string($f)) return false; - if (!self::parse_static($f, $rc, $f, $rbound)) return false; - if ($rc !== null && $c === null) { - $c = $rc; - $bound = $rbound; + if (self::parse_c_method($f, $rc, $f, $rbound)) { + if ($rc !== null && $c === null) { + $c = $rc; + $bound = $rbound; + } + } elseif (self::is_invalid($f)) { + return false; + } elseif (self::is_nfunction($f)) { + return false; + } elseif (self::parse_method($f)) { + return false; + } elseif (self::parse_static($f)) { } - $func[0] = $c; $func[1] = $f; } else { return false; } - if ($strict && !method_exists($c, $f)) return false; + if ($strict && $bound && !method_exists($c, $f)) return false; return true; }