PageRenderTime 25ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/DB/Type/Pgsql/Test/RowTest.php

https://github.com/nehxby/db_type
PHP | 228 lines | 205 code | 2 blank | 21 comment | 0 complexity | 4a05a783bda7d6b9e1ed45c353045ce6 MD5 | raw file
  1. <?php
  2. class DB_Type_Pgsql_Test_RowTest extends DB_Type_Test_Util_TypeTestCase
  3. {
  4. private function _getCommonTests()
  5. {
  6. return array(
  7. array(
  8. new DB_Type_Pgsql_Row(array(
  9. 'b' => new DB_Type_String(),
  10. 'a' => new DB_Type_String(),
  11. )),
  12. array('b'=>"1", 'a'=>"2"),
  13. '("1","2")',
  14. null,
  15. ),
  16. array(
  17. new DB_Type_Pgsql_Row(
  18. array(
  19. 'b' => new DB_Type_String(),
  20. 'a' => new DB_Type_String(),
  21. ),
  22. 'some_table'
  23. ),
  24. array('b'=>"1", 'a'=>"2"),
  25. '("1","2")',
  26. 'some_table',
  27. ),
  28. array(
  29. new DB_Type_Pgsql_Row(array(
  30. 'b' => new DB_Type_String(),
  31. 'a' => new DB_Type_String(),
  32. )),
  33. array('b'=>null, 'a'=>"zzz"),
  34. '(,"zzz")',
  35. null,
  36. ),
  37. array(
  38. new DB_Type_Pgsql_Row(array(
  39. 'a' => new DB_Type_String(),
  40. 'b' => new DB_Type_String(),
  41. 'c' => new DB_Type_Pgsql_Row(array(
  42. 'd' => new DB_Type_String(),
  43. 'e' => new DB_Type_String(),
  44. ))
  45. )),
  46. array('a'=>"1", 'b'=>"2", 'c'=>array('d'=>'d"d', 'e'=>"5")),
  47. '("1","2","(""d""""d"",""5"")")',
  48. null,
  49. ),
  50. array(
  51. new DB_Type_Pgsql_Row(array(
  52. 'a' => new DB_Type_String(),
  53. 'b' => new DB_Type_String(),
  54. 'c' => new DB_Type_Pgsql_Array(new DB_Type_String())
  55. )),
  56. array('a'=>"1", 'b'=>"2", 'c'=>array("x", "y")),
  57. '("1","2","{""x"",""y""}")',
  58. null,
  59. ),
  60. array(
  61. new DB_Type_Pgsql_Row(array(
  62. 'a' => new DB_Type_String(),
  63. 'c' => new DB_Type_Pgsql_Row(array(
  64. 'd' => new DB_Type_String(),
  65. ))
  66. )),
  67. array('a'=>"aaa", 'c'=>null),
  68. '("aaa",)',
  69. null,
  70. ),
  71. array(
  72. new DB_Type_Pgsql_Row(array(
  73. 'b' => new DB_Type_String(),
  74. 'a' => new DB_Type_String(),
  75. )),
  76. null,
  77. null,
  78. null,
  79. ),
  80. array(
  81. new DB_Type_Pgsql_Row(array()),
  82. "abcd",
  83. new DB_Type_Exception_Common(new DB_Type_Pgsql_Row(array()), "output", "row or null", "abcd"),
  84. null,
  85. ),
  86. /* array(
  87. new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())),
  88. array(),
  89. new DB_Type_Exception_Common(new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())), "output", "value for field 'a'", '<NO_SUCH_KEY>'),
  90. ),*/
  91. array(
  92. new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())),
  93. array("a" => "a\\b"),
  94. '("a\\\\b")',
  95. null,
  96. ),
  97. );
  98. }
  99. protected function _getPairsOutput()
  100. {
  101. return array_merge(
  102. $this->_getCommonTests(),
  103. array(
  104. 'a' => array(
  105. new DB_Type_Pgsql_Row(array(
  106. 'b' => new DB_Type_String(),
  107. 'a' => new DB_Type_Wrapper_EmptyToNull(new DB_Type_String()),
  108. )),
  109. array('b'=>null, 'a'=>""),
  110. '(,)',
  111. null
  112. ),
  113. 'b' => array(
  114. new DB_Type_Pgsql_Row( array(
  115. 'b' => new DB_Type_String(),
  116. 'a' => new DB_Type_Wrapper_EmptyToNull(new DB_Type_String()),
  117. )),
  118. (object) array('b'=> '1',
  119. 'a'=> 's'),
  120. '("1","s")',
  121. null
  122. ),
  123. 'c' => array(
  124. new DB_Type_Pgsql_Row(array(
  125. 'b' => new DB_Type_Int(),
  126. 'a' => new DB_Type_String(),
  127. )),
  128. array('b' => 'not_int', 'a' => ""),
  129. new DB_Type_Exception_Container(new DB_Type_Pgsql_Row(array()), 'output', 'b', 'DB_Type_Int::output() conversion error: given not_int, expected int32 value'),
  130. null
  131. ),
  132. )
  133. );
  134. }
  135. protected function _getPairsInput()
  136. {
  137. return array_merge(
  138. $this->_getCommonTests(),
  139. array(
  140. array(
  141. new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())),
  142. new DB_Type_Exception_Common(new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())), "input", "start of a row '('", 'xxx'),
  143. 'xxx',
  144. ),
  145. array(
  146. new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())),
  147. new DB_Type_Exception_Common(new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())), "input", "field 'a' value", '()', 1),
  148. '()',
  149. ),
  150. array(
  151. new DB_Type_Pgsql_Row(array()),
  152. array(),
  153. '()',
  154. ),
  155. array(
  156. new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())),
  157. new DB_Type_Exception_Common(new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())), "input", "end of the row: no more fields left", '("aa", "bb")', 7),
  158. '("aa", "bb")',
  159. ),
  160. array(
  161. new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())),
  162. array("a" => "aa"),
  163. '("aa")',
  164. ),
  165. array(
  166. new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())),
  167. array("a" => "aa"),
  168. '(aa)',
  169. ),
  170. array(
  171. new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())),
  172. new DB_Type_Exception_Common(new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())), "input", "balanced quoted or unquoted string", '("aa)', 1),
  173. '("aa)',
  174. ),
  175. array(
  176. new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())),
  177. new DB_Type_Exception_Common(new DB_Type_Pgsql_Row(array("a" => new DB_Type_String())), "input", "delimiter ',' or ')'", '(aa', 3),
  178. '(aa',
  179. ),
  180. array(
  181. new DB_Type_Pgsql_Row(array(
  182. 'b' => new DB_Type_String(),
  183. 'a' => new DB_Type_String(),
  184. )),
  185. array('b'=>'ффф', 'a'=>"2"),
  186. '(ффф,"2")',
  187. ),
  188. array(
  189. new DB_Type_Pgsql_Row(array(
  190. 'b' => new DB_Type_String(),
  191. 'a' => new DB_Type_String(),
  192. )),
  193. array('b'=>"aaaaa aa", 'a'=>"2"),
  194. '("aaaaa aa","2")',
  195. ),
  196. // tests for itemsInput
  197. array(
  198. new DB_Type_Pgsql_Row(array(
  199. 'b' => new DB_Type_Pgsql_Row(array(
  200. 'c' => new DB_Type_Int(),
  201. 'd' => new DB_Type_String()
  202. )),
  203. 'a' => new DB_Type_String(),
  204. )),
  205. array('b'=>array('c'=>'5','d'=>'ddd'), 'a'=>"2"),
  206. array('b'=>'("5","ddd")', 'a'=>'2'),
  207. ),
  208. /* Failed asserting in testInputOutputInput
  209. because output truncates `not_in_items` field.
  210. Usage example see in examples/itemsInput.php
  211. array(
  212. new DB_Type_Pgsql_Row(array(
  213. 'b' => new DB_Type_Pgsql_Row(array(
  214. 'c' => new DB_Type_Int(),
  215. 'd' => new DB_Type_String()
  216. )),
  217. 'a' => new DB_Type_String(),
  218. )),
  219. array('b'=>array('c'=>'5', 'd'=>'ddd'), 'a'=>"2", 'not_in_items'=>'g'),
  220. array('b'=>'("5","ddd")', 'a'=>'2', 'not_in_items'=>'g'),
  221. ),*/
  222. // tests for itemsInput
  223. )
  224. );
  225. }
  226. }