test(core): 添加字符串比较和类检查函数的测试用例

- 添加 strcmp、strncmp、strcasecmp、strncasecmp 字符串比较函数测试
- 添加 class_exists、interface_exists、trait_exists、enum_exists 类存在性检查函数测试
- 添加 method_exists、property_exists 方法和属性存在性检查函数测试
- 添加 is_a、is_subclass_of 类型检查函数测试
- 添加 defined 常量定义检查函数测试
- 添加 get_parent_class 获取父类函数测试
pull/1/head
韩天峰 3 months ago
parent 315220eac6
commit 4a38508411
  1. 41
      tests/std/core/001_strcmp.phpt
  2. 42
      tests/std/core/002_class_exists.phpt
  3. 47
      tests/std/core/003_method_exists.phpt
  4. 39
      tests/std/core/004_is_a.phpt
  5. 23
      tests/std/core/005_defined.phpt
  6. 27
      tests/std/core/006_get_parent_class.phpt

@ -0,0 +1,41 @@
--TEST--
strcmp() / strncmp() / strcasecmp() / strncasecmp() functions
--FILE--
<?php
echo "strcmp:\n";
echo strcmp("abc", "abc") === 0 ? "ok-equal\n" : "fail\n";
echo strcmp("abc", "abd") < 0 ? "ok-less\n" : "fail\n";
echo strcmp("abd", "abc") > 0 ? "ok-greater\n" : "fail\n";
echo strcmp("", "") === 0 ? "ok-empty\n" : "fail\n";
echo "strncmp:\n";
echo strncmp("abcdef", "abcxyz", 3) === 0 ? "ok-equal3\n" : "fail\n";
echo strncmp("abcdef", "abcxyz", 6) < 0 ? "ok-less6\n" : "fail\n";
echo strncmp("abc", "abc", 5) === 0 ? "ok-overflow\n" : "fail\n";
echo "strcasecmp:\n";
echo strcasecmp("ABC", "abc") === 0 ? "ok-equal\n" : "fail\n";
echo strcasecmp("ABC", "abd") < 0 ? "ok-less\n" : "fail\n";
echo "strncasecmp:\n";
echo strncasecmp("ABCDEF", "abcxyz", 3) === 0 ? "ok-equal3\n" : "fail\n";
echo strncasecmp("ABCDEF", "abcxyz", 6) < 0 ? "ok-less6\n" : "fail\n";
?>
--EXPECT--
strcmp:
ok-equal
ok-less
ok-greater
ok-empty
strncmp:
ok-equal3
ok-less6
ok-overflow
strcasecmp:
ok-equal
ok-less
strncasecmp:
ok-equal3
ok-less6

@ -0,0 +1,42 @@
--TEST--
class_exists() / interface_exists() / trait_exists() / enum_exists() functions
--FILE--
<?php
class MyClass {}
interface MyInterface {}
trait MyTrait {}
enum MyEnum { case A; }
echo "class_exists:\n";
echo class_exists("MyClass") ? "ok-true\n" : "fail\n";
echo class_exists("NonExistentClass") ? "fail\n" : "ok-false\n";
echo "interface_exists:\n";
echo interface_exists("MyInterface") ? "ok-true\n" : "fail\n";
echo interface_exists("NonExistentInterface") ? "fail\n" : "ok-false\n";
echo "trait_exists:\n";
echo trait_exists("MyTrait") ? "ok-true\n" : "fail\n";
echo trait_exists("NonExistentTrait") ? "fail\n" : "ok-false\n";
echo "enum_exists:\n";
echo enum_exists("MyEnum") ? "ok-true\n" : "fail\n";
echo enum_exists("NonExistentEnum") ? "fail\n" : "ok-false\n";
echo "done\n";
?>
--EXPECT--
class_exists:
ok-true
ok-false
interface_exists:
ok-true
ok-false
trait_exists:
ok-true
ok-false
enum_exists:
ok-true
ok-false
done

@ -0,0 +1,47 @@
--TEST--
method_exists() / property_exists() functions
--FILE--
<?php
class TestClass {
public int $pubProp = 0;
private string $privProp = "secret";
public function pubMethod(): string { return "public"; }
private function privMethod(): string { return "private"; }
}
$obj = new TestClass();
echo "method_exists:\n";
echo method_exists($obj, "pubMethod") ? "ok-obj-pub\n" : "fail\n";
echo method_exists($obj, "privMethod") ? "ok-obj-priv\n" : "fail\n";
echo method_exists($obj, "noSuchMethod") ? "fail\n" : "ok-obj-none\n";
echo method_exists(TestClass::class, "pubMethod") ? "ok-cls-pub\n" : "fail\n";
echo method_exists(TestClass::class, "noSuchMethod") ? "fail\n" : "ok-cls-none\n";
echo "property_exists:\n";
echo property_exists($obj, "pubProp") ? "ok-obj-pub\n" : "fail\n";
echo property_exists($obj, "privProp") ? "ok-obj-priv\n" : "fail\n";
echo property_exists($obj, "noSuchProp") ? "fail\n" : "ok-obj-none\n";
echo property_exists(TestClass::class, "pubProp") ? "ok-cls-pub\n" : "fail\n";
echo property_exists(TestClass::class, "privProp") ? "ok-cls-priv\n" : "fail\n";
echo property_exists(TestClass::class, "noSuchProp") ? "fail\n" : "ok-cls-none\n";
echo "done\n";
?>
--EXPECT--
method_exists:
ok-obj-pub
ok-obj-priv
ok-obj-none
ok-cls-pub
ok-cls-none
property_exists:
ok-obj-pub
ok-obj-priv
ok-obj-none
ok-cls-pub
ok-cls-priv
ok-cls-none
done

@ -0,0 +1,39 @@
--TEST--
is_a() / is_subclass_of() functions
--FILE--
<?php
class Base {}
class Child extends Base {}
interface IFace {}
class Impl implements IFace {}
$child = new Child();
$impl = new Impl();
echo "is_a:\n";
echo is_a($child, "Child") ? "ok-obj-class\n" : "fail\n";
echo is_a($child, "Base") ? "ok-obj-parent\n" : "fail\n";
echo is_a($child, "NoSuchClass") ? "fail\n" : "ok-obj-none\n";
echo "is_subclass_of:\n";
echo is_subclass_of($child, "Base") ? "ok-obj-parent\n" : "fail\n";
echo is_subclass_of($child, "Child") ? "fail\n" : "ok-obj-same\n";
echo is_subclass_of(Child::class, "Base") ? "ok-cls-parent\n" : "fail\n";
echo is_subclass_of(Child::class, "Child") ? "fail\n" : "ok-cls-same\n";
echo is_subclass_of($child, "NoSuchClass") ? "fail\n" : "ok-none\n";
echo "done\n";
?>
--EXPECT--
is_a:
ok-obj-class
ok-obj-parent
ok-obj-none
is_subclass_of:
ok-obj-parent
ok-obj-same
ok-cls-parent
ok-cls-same
ok-none
done

@ -0,0 +1,23 @@
--TEST--
defined() function
--FILE--
<?php
define("MY_CONST", 42);
define("MY_STRING_CONST", "hello");
echo "defined:\n";
echo defined("MY_CONST") ? "ok-defined\n" : "fail\n";
echo defined("MY_STRING_CONST") ? "ok-string-defined\n" : "fail\n";
echo defined("PHP_VERSION") ? "ok-php-version\n" : "fail\n";
echo defined("NON_EXISTENT") ? "fail\n" : "ok-undefined\n";
echo "done\n";
?>
--EXPECT--
defined:
ok-defined
ok-string-defined
ok-php-version
ok-undefined
done

@ -0,0 +1,27 @@
--TEST--
get_parent_class() function
--FILE--
<?php
class Base {}
class Child extends Base {}
class NoParent {}
$child = new Child();
$noParent = new NoParent();
echo "get_parent_class:\n";
echo get_parent_class($child) === "Base" ? "ok-obj\n" : "fail-obj\n";
echo get_parent_class(Child::class) === "Base" ? "ok-cls\n" : "fail-cls\n";
echo get_parent_class($noParent) === false ? "ok-obj-false\n" : "fail-obj-false\n";
echo get_parent_class(NoParent::class) === false ? "ok-cls-false\n" : "fail-cls-false\n";
echo "done\n";
?>
--EXPECT--
get_parent_class:
ok-obj
ok-cls
ok-obj-false
ok-cls-false
done
Loading…
Cancel
Save