validateTest.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | ThinkPHP [ WE CAN DO IT JUST THINK ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8. // +----------------------------------------------------------------------
  9. // | Author: liu21st <liu21st@gmail.com>
  10. // +----------------------------------------------------------------------
  11. /**
  12. * Validate类测试
  13. */
  14. namespace tests\thinkphp\library\think;
  15. use think\File;
  16. use think\Validate;
  17. class validateTest extends \PHPUnit_Framework_TestCase
  18. {
  19. public function testCheck()
  20. {
  21. $rule = [
  22. 'name' => 'require|max:25',
  23. 'age' => 'number|between:1,120',
  24. 'email' => 'email',
  25. ];
  26. $msg = [
  27. 'name.require' => '名称必须',
  28. 'name.max' => '名称最多不能超过25个字符',
  29. 'age.number' => '年龄必须是数字',
  30. 'age.between' => '年龄只能在1-120之间',
  31. 'email' => '邮箱格式错误',
  32. ];
  33. $data = [
  34. 'name' => 'thinkphp',
  35. 'age' => 10,
  36. 'email' => 'thinkphp@qq.com',
  37. ];
  38. $validate = new Validate($rule, $msg);
  39. $result = $validate->check($data);
  40. $this->assertEquals(true, $result);
  41. }
  42. public function testRule()
  43. {
  44. $rule = [
  45. 'name' => 'require|method:get|alphaNum|max:25|expire:2016-1-1,2026-1-1',
  46. 'account' => 'requireIf:name,thinkphp|alphaDash|min:4|length:4,30',
  47. 'age' => 'number|between:1,120',
  48. 'email' => 'requireWith:name|email',
  49. 'host' => 'activeUrl|activeUrl:A',
  50. 'url' => 'url',
  51. 'ip' => 'ip|ip:ipv4',
  52. 'score' => 'float|gt:60|notBetween:90,100|notIn:70,80|lt:100|elt:100|egt:60',
  53. 'status' => 'integer|in:0,1,2',
  54. 'begin_time' => 'after:2016-3-18|beforeWith:end_time',
  55. 'end_time' => 'before:2016-10-01|afterWith:begin_time',
  56. 'info' => 'require|array|length:4|max:5|min:2',
  57. 'info.name' => 'require|length:8|alpha|same:thinkphp',
  58. 'value' => 'same:100|different:status',
  59. 'bool' => 'boolean',
  60. 'title' => 'chsAlpha',
  61. 'city' => 'chs',
  62. 'nickname' => 'chsDash',
  63. 'aliasname' => 'chsAlphaNum',
  64. 'file' => 'file|fileSize:20480',
  65. 'image' => 'image|fileMime:image/png|image:80,80,png',
  66. 'test' => 'test',
  67. ];
  68. $data = [
  69. 'name' => 'thinkphp',
  70. 'account' => 'liuchen',
  71. 'age' => 10,
  72. 'email' => 'thinkphp@qq.com',
  73. 'host' => 'thinkphp.cn',
  74. 'url' => 'http://thinkphp.cn/topic',
  75. 'ip' => '114.34.54.5',
  76. 'score' => '89.15',
  77. 'status' => 1,
  78. 'begin_time' => '2016-3-20',
  79. 'end_time' => '2016-5-1',
  80. 'info' => [1, 2, 3, 'name' => 'thinkphp'],
  81. 'zip' => '200000',
  82. 'date' => '16-3-8',
  83. 'ok' => 'yes',
  84. 'value' => 100,
  85. 'bool' => true,
  86. 'title' => '流年ThinkPHP',
  87. 'city' => '上海',
  88. 'nickname' => '流年ThinkPHP_2016',
  89. 'aliasname' => '流年Think2016',
  90. 'file' => new File(THINK_PATH . 'base.php'),
  91. 'image' => new File(THINK_PATH . 'logo.png'),
  92. 'test' => 'test',
  93. ];
  94. $validate = new Validate($rule);
  95. $validate->extend('test', function ($value) {return 'test' == $value ? true : false;});
  96. $validate->rule('zip', '/^\d{6}$/');
  97. $validate->rule([
  98. 'ok' => 'require|accepted',
  99. 'date' => 'date|dateFormat:y-m-d',
  100. ]);
  101. $result = $validate->batch()->check($data);
  102. $this->assertEquals(true, $result);
  103. }
  104. public function testMsg()
  105. {
  106. $validate = new Validate();
  107. $validate->message('name.require', '名称必须');
  108. $validate->message([
  109. 'name.require' => '名称必须',
  110. 'name.max' => '名称最多不能超过25个字符',
  111. 'age.number' => '年龄必须是数字',
  112. 'age.between' => '年龄只能在1-120之间',
  113. 'email' => '邮箱格式错误',
  114. ]);
  115. }
  116. public function testMake()
  117. {
  118. $rule = [
  119. 'name' => 'require|max:25',
  120. 'age' => 'number|between:1,120',
  121. 'email' => 'email',
  122. ];
  123. $msg = [
  124. 'name.require' => '名称必须',
  125. 'name.max' => '名称最多不能超过25个字符',
  126. 'age.number' => '年龄必须是数字',
  127. 'age.between' => '年龄只能在1-120之间',
  128. 'email' => '邮箱格式错误',
  129. ];
  130. $validate = Validate::make($rule, $msg);
  131. }
  132. public function testExtend()
  133. {
  134. $validate = new Validate(['name' => 'check:1']);
  135. $validate->extend('check', function ($value, $rule) {return $rule == $value ? true : false;});
  136. $validate->extend(['check' => function ($value, $rule) {return $rule == $value ? true : false;}]);
  137. $data = ['name' => 1];
  138. $result = $validate->check($data);
  139. $this->assertEquals(true, $result);
  140. }
  141. public function testScene()
  142. {
  143. $rule = [
  144. 'name' => 'require|max:25',
  145. 'age' => 'number|between:1,120',
  146. 'email' => 'email',
  147. ];
  148. $msg = [
  149. 'name.require' => '名称必须',
  150. 'name.max' => '名称最多不能超过25个字符',
  151. 'age.number' => '年龄必须是数字',
  152. 'age.between' => '年龄只能在1-120之间',
  153. 'email' => '邮箱格式错误',
  154. ];
  155. $data = [
  156. 'name' => 'thinkphp',
  157. 'age' => 10,
  158. 'email' => 'thinkphp@qq.com',
  159. ];
  160. $validate = new Validate($rule);
  161. $validate->scene(['edit' => ['name', 'age']]);
  162. $validate->scene('edit', ['name', 'age']);
  163. $validate->scene('edit');
  164. $result = $validate->check($data);
  165. $this->assertEquals(true, $result);
  166. }
  167. public function testSetTypeMsg()
  168. {
  169. $rule = [
  170. 'name|名称' => 'require|max:25',
  171. 'age' => 'number|between:1,120',
  172. 'email' => 'email',
  173. ['sex', 'in:1,2', '性别错误'],
  174. ];
  175. $data = [
  176. 'name' => '',
  177. 'age' => 10,
  178. 'email' => 'thinkphp@qq.com',
  179. 'sex' => '3',
  180. ];
  181. $validate = new Validate($rule);
  182. $validate->setTypeMsg('require', ':attribute必须');
  183. $validate->setTypeMsg(['require' => ':attribute必须']);
  184. $result = $validate->batch()->check($data);
  185. $this->assertFalse($result);
  186. $this->assertEquals(['name' => '名称必须', 'sex' => '性别错误'], $validate->getError());
  187. }
  188. }