/tests/database/mysql/result.php

https://github.com/cbandy/real-database · PHP · 697 lines · 415 code · 88 blank · 194 comment · 1 complexity · 6077b4c9deec77bdb0b41e90f7ff695d MD5 · raw file

  1. <?php
  2. require_once dirname(__FILE__).'/testcase'.EXT;
  3. require_once 'PHPUnit/Extensions/Database/DataSet/CsvDataSet.php';
  4. /**
  5. * @package RealDatabase
  6. * @subpackage MySQL
  7. * @author Chris Bandy
  8. *
  9. * @group database
  10. * @group database.mysql
  11. */
  12. class Database_MySQL_Result_Test extends Database_MySQL_TestCase
  13. {
  14. protected $_table = 'kohana_test_table';
  15. protected function getDataSet()
  16. {
  17. $dataset = new PHPUnit_Extensions_Database_DataSet_CsvDataSet;
  18. $dataset->addTable(
  19. Database::factory()->table_prefix().$this->_table,
  20. dirname(dirname(__FILE__)).'/datasets/values.csv'
  21. );
  22. return $dataset;
  23. }
  24. public function provider_fetch()
  25. {
  26. $entire = Database::factory()->select()->from($this->_table);
  27. return array(
  28. // data set #0
  29. array($entire, FALSE, 0, array('id' => 1, 'value' => 50)),
  30. array($entire, FALSE, 1, array('id' => 2, 'value' => 55)),
  31. array($entire, FALSE, 2, array('id' => 3, 'value' => 60)),
  32. array($entire, FALSE, 6, array('id' => 7, 'value' => 65)),
  33. // data set #4
  34. array($entire, TRUE, 0, (object) array('id' => 1, 'value' => 50)),
  35. array($entire, TRUE, 1, (object) array('id' => 2, 'value' => 55)),
  36. array($entire, TRUE, 2, (object) array('id' => 3, 'value' => 60)),
  37. array($entire, TRUE, 6, (object) array('id' => 7, 'value' => 65)),
  38. );
  39. }
  40. /**
  41. * @covers Database_MySQL_Result::__construct
  42. * @covers Database_MySQL_Result::fetch
  43. *
  44. * @dataProvider provider_fetch
  45. *
  46. * @param SQL_Expression $query
  47. * @param string|boolean $as_object
  48. * @param integer $position
  49. * @param array $expected
  50. */
  51. public function test_fetch($query, $as_object, $position, $expected)
  52. {
  53. $result = Database::factory()->execute_query($query, $as_object);
  54. $this->assertEquals($expected, $result->fetch($position));
  55. $this->assertSame(0, $result->key(), 'Do not move pointer');
  56. }
  57. public function provider_fetch_object_arguments()
  58. {
  59. $entire = Database::factory()->select()->from($this->_table);
  60. return array(
  61. // data set #0
  62. array($entire, 0, array()),
  63. array($entire, 2, array()),
  64. // data set #2
  65. array($entire, 1, array(1)),
  66. array($entire, 3, array(1)),
  67. // data set #4
  68. array($entire, 4, array('a', 'b')),
  69. array($entire, 5, array('a', 'b')),
  70. );
  71. }
  72. /**
  73. * @covers Database_MySQL_Result::__construct
  74. * @covers Database_MySQL_Result::fetch
  75. *
  76. * @dataProvider provider_fetch_object_arguments
  77. *
  78. * @todo This test would be better using a mocked constructor
  79. *
  80. * @param SQL_Expression $query
  81. * @param integer $position
  82. * @param array $arguments
  83. */
  84. public function test_fetch_object_arguments($query, $position, $arguments)
  85. {
  86. $result = Database::factory()
  87. ->execute_query(
  88. $query, 'Database_MySQL_Result_Test_Constructor', $arguments
  89. )
  90. ->fetch($position);
  91. $this->assertSame($arguments, $result->arguments());
  92. }
  93. /**
  94. * @covers Database_MySQL_Result::__construct
  95. * @covers Database_MySQL_Result::fetch
  96. */
  97. public function test_fetch_object_arguments_no_constructor()
  98. {
  99. $db = Database::factory();
  100. // No errors about missing constructor
  101. $db->execute_query(
  102. $db->select()->from($this->_table), 'stdClass', array()
  103. )
  104. ->fetch(0);
  105. }
  106. public function provider_fetch_after_seek()
  107. {
  108. $entire = Database::factory()->select()->from($this->_table);
  109. return array(
  110. // data set #0
  111. array($entire, FALSE, 0, 0, array('id' => 1, 'value' => 50)),
  112. array($entire, FALSE, 1, 0, array('id' => 1, 'value' => 50)),
  113. array($entire, FALSE, 2, 0, array('id' => 1, 'value' => 50)),
  114. // data set #3
  115. array($entire, FALSE, 0, 1, array('id' => 2, 'value' => 55)),
  116. array($entire, FALSE, 1, 1, array('id' => 2, 'value' => 55)),
  117. array($entire, FALSE, 2, 1, array('id' => 2, 'value' => 55)),
  118. // data set #6
  119. array($entire, FALSE, 0, 6, array('id' => 7, 'value' => 65)),
  120. array($entire, FALSE, 1, 6, array('id' => 7, 'value' => 65)),
  121. array($entire, FALSE, 2, 6, array('id' => 7, 'value' => 65)),
  122. // data set #9
  123. array($entire, TRUE, 0, 0, (object) array('id' => 1, 'value' => 50)),
  124. array($entire, TRUE, 1, 0, (object) array('id' => 1, 'value' => 50)),
  125. array($entire, TRUE, 2, 0, (object) array('id' => 1, 'value' => 50)),
  126. // data set #12
  127. array($entire, TRUE, 0, 1, (object) array('id' => 2, 'value' => 55)),
  128. array($entire, TRUE, 1, 1, (object) array('id' => 2, 'value' => 55)),
  129. array($entire, TRUE, 2, 1, (object) array('id' => 2, 'value' => 55)),
  130. // data set #15
  131. array($entire, TRUE, 0, 6, (object) array('id' => 7, 'value' => 65)),
  132. array($entire, TRUE, 1, 6, (object) array('id' => 7, 'value' => 65)),
  133. array($entire, TRUE, 2, 6, (object) array('id' => 7, 'value' => 65)),
  134. );
  135. }
  136. /**
  137. * @covers Database_MySQL_Result::fetch
  138. *
  139. * @dataProvider provider_fetch_after_seek
  140. *
  141. * @param SQL_Expression $query
  142. * @param string|boolean $as_object
  143. * @param integer $seek
  144. * @param integer $position
  145. * @param array $expected
  146. */
  147. public function test_fetch_after_seek($query, $as_object, $seek, $position, $expected)
  148. {
  149. $result = Database::factory()->execute_query($query, $as_object)->seek($seek);
  150. $this->assertEquals($expected, $result->fetch($position));
  151. $this->assertSame($seek, $result->key(), 'Do not move pointer');
  152. }
  153. public function provider_fetch_invalid()
  154. {
  155. $entire = Database::factory()->select()->from($this->_table);
  156. return array(
  157. array($entire, -5),
  158. array($entire, -1),
  159. array($entire, 7),
  160. array($entire, 8),
  161. array($entire, 10),
  162. );
  163. }
  164. /**
  165. * @covers Database_MySQL_Result::fetch
  166. *
  167. * @dataProvider provider_fetch_invalid
  168. *
  169. * @param SQL_Expression $query
  170. * @param integer $position
  171. */
  172. public function test_fetch_invalid($query, $position)
  173. {
  174. $result = Database::factory()->execute_query($query);
  175. if (error_reporting() & E_WARNING)
  176. {
  177. $this->setExpectedException(
  178. 'ErrorException', 'invalid', E_WARNING
  179. );
  180. $result->fetch($position);
  181. }
  182. else
  183. {
  184. $this->assertFalse($result->fetch($position));
  185. }
  186. }
  187. public function provider_current()
  188. {
  189. $entire = Database::factory()->select()->from($this->_table);
  190. return array(
  191. array($entire, FALSE, array('id' => 1, 'value' => 50)),
  192. array($entire, TRUE, (object) array('id' => 1, 'value' => 50)),
  193. );
  194. }
  195. /**
  196. * @covers Database_MySQL_Result::current
  197. *
  198. * @dataProvider provider_current
  199. *
  200. * @param SQL_Expression $query
  201. * @param string|boolean $as_object
  202. * @param array $expected
  203. */
  204. public function test_current($query, $as_object, $expected)
  205. {
  206. $result = Database::factory()->execute_query($query, $as_object);
  207. $this->assertEquals($expected, $result->current());
  208. $this->assertEquals($expected, $result->current(), 'Do not move pointer');
  209. }
  210. public function provider_current_after_seek()
  211. {
  212. $entire = Database::factory()->select()->from($this->_table);
  213. return array(
  214. // data set #0
  215. array($entire, FALSE, 0, array('id' => 1, 'value' => 50)),
  216. array($entire, FALSE, 1, array('id' => 2, 'value' => 55)),
  217. array($entire, FALSE, 2, array('id' => 3, 'value' => 60)),
  218. array($entire, FALSE, 6, array('id' => 7, 'value' => 65)),
  219. // data set #4
  220. array($entire, TRUE, 0, (object) array('id' => 1, 'value' => 50)),
  221. array($entire, TRUE, 1, (object) array('id' => 2, 'value' => 55)),
  222. array($entire, TRUE, 2, (object) array('id' => 3, 'value' => 60)),
  223. array($entire, TRUE, 6, (object) array('id' => 7, 'value' => 65)),
  224. );
  225. }
  226. /**
  227. * @covers Database_MySQL_Result::current
  228. *
  229. * @dataProvider provider_current_after_seek
  230. *
  231. * @param SQL_Expression $query
  232. * @param string|boolean $as_object
  233. * @param integer $position
  234. * @param array $expected
  235. */
  236. public function test_current_after_seek($query, $as_object, $position, $expected)
  237. {
  238. $result = Database::factory()->execute_query($query, $as_object)->seek($position);
  239. $this->assertEquals($expected, $result->current());
  240. $this->assertEquals($expected, $result->current(), 'Do not move pointer');
  241. }
  242. public function provider_get()
  243. {
  244. $entire = Database::factory()->select()->from($this->_table);
  245. return array(
  246. // data set #0
  247. array($entire, FALSE, NULL, NULL, 1),
  248. array($entire, FALSE, 'id', NULL, 1),
  249. array($entire, FALSE, 'value', NULL, 50),
  250. array($entire, FALSE, NULL, 'asdf', 1),
  251. array($entire, FALSE, 'id', 'asdf', 1),
  252. array($entire, FALSE, 'value', 'asdf', 50),
  253. // data set #7
  254. array($entire, TRUE, NULL, NULL, 1),
  255. array($entire, TRUE, 'id', NULL, 1),
  256. array($entire, TRUE, 'value', NULL, 50),
  257. array($entire, TRUE, NULL, 'asdf', 1),
  258. array($entire, TRUE, 'id', 'asdf', 1),
  259. array($entire, TRUE, 'value', 'asdf', 50),
  260. );
  261. }
  262. /**
  263. * @covers Database_MySQL_Result::get
  264. *
  265. * @dataProvider provider_get
  266. *
  267. * @param SQL_Expression $query
  268. * @param string|boolean $as_object
  269. * @param string $name First argument to method
  270. * @param mixed $default Second argument to method
  271. * @param array $expected
  272. */
  273. public function test_get($query, $as_object, $name, $default, $expected)
  274. {
  275. $result = Database::factory()->execute_query($query, $as_object);
  276. $this->assertEquals($expected, $result->get($name, $default));
  277. $this->assertEquals($expected, $result->get($name, $default), 'Do not move pointer');
  278. }
  279. public function provider_get_after_seek()
  280. {
  281. $entire = Database::factory()->select()->from($this->_table);
  282. return array(
  283. // data set #0
  284. array($entire, FALSE, 0, NULL, NULL, 1),
  285. array($entire, FALSE, 1, NULL, NULL, 2),
  286. array($entire, FALSE, 2, NULL, NULL, 3),
  287. array($entire, FALSE, 6, NULL, NULL, 7),
  288. // data set #4
  289. array($entire, FALSE, 0, NULL, 'asdf', 1),
  290. array($entire, FALSE, 1, NULL, 'asdf', 2),
  291. array($entire, FALSE, 2, NULL, 'asdf', 3),
  292. array($entire, FALSE, 6, NULL, 'asdf', 7),
  293. );
  294. }
  295. /**
  296. * @covers Database_MySQL_Result::get
  297. *
  298. * @dataProvider provider_get_after_seek
  299. *
  300. * @param SQL_Expression $query
  301. * @param string|boolean $as_object
  302. * @param integer $position
  303. * @param string $name First argument to method
  304. * @param mixed $default Second argument to method
  305. * @param array $expected
  306. */
  307. public function test_get_after_seek($query, $as_object, $position, $name, $default, $expected)
  308. {
  309. $result = Database::factory()->execute_query($query, $as_object)->seek($position);
  310. $this->assertEquals($expected, $result->get($name, $default));
  311. $this->assertEquals($expected, $result->get($name, $default), 'Do not move pointer');
  312. }
  313. public function provider_get_invalid()
  314. {
  315. $empty = Database::factory()
  316. ->select()
  317. ->from($this->_table)
  318. ->where('value', '>', 1000);
  319. return array(
  320. // data set #0
  321. array($empty, FALSE, NULL, NULL),
  322. array($empty, FALSE, NULL, 'asdf'),
  323. array($empty, FALSE, 'value', NULL),
  324. array($empty, FALSE, 'value', 'asdf'),
  325. // data set #4
  326. array($empty, TRUE, NULL, NULL),
  327. array($empty, TRUE, NULL, 'asdf'),
  328. array($empty, TRUE, 'value', NULL),
  329. array($empty, TRUE, 'value', 'asdf'),
  330. );
  331. }
  332. /**
  333. * @covers Database_MySQL_Result::get
  334. *
  335. * @dataProvider provider_get_invalid
  336. *
  337. * @param SQL_Expression $query SQL that returns no rows
  338. * @param string|boolean $as_object
  339. * @param string $name First argument to method
  340. * @param mixed $default Second argument to method
  341. */
  342. public function test_get_invalid($query, $as_object, $name, $default)
  343. {
  344. $result = Database::factory()->execute_query($query, $as_object);
  345. $this->assertSame($default, $result->get($name, $default));
  346. $this->assertSame($default, $result->get($name, $default), 'Do not move pointer');
  347. }
  348. public function provider_get_null()
  349. {
  350. $null = 'SELECT NULL AS value';
  351. return array(
  352. // data set #0
  353. array($null, FALSE, NULL, NULL),
  354. array($null, FALSE, NULL, 'asdf'),
  355. array($null, FALSE, 'value', NULL),
  356. array($null, FALSE, 'value', 'asdf'),
  357. // data set #4
  358. array($null, TRUE, NULL, NULL),
  359. array($null, TRUE, NULL, 'asdf'),
  360. array($null, TRUE, 'value', NULL),
  361. array($null, TRUE, 'value', 'asdf'),
  362. );
  363. }
  364. /**
  365. * @covers Database_MySQL_Result::get
  366. *
  367. * @dataProvider provider_get_null
  368. *
  369. * @param SQL_Expression $query SQL that returns a NULL value
  370. * @param string|boolean $as_object
  371. * @param string $name First argument to method
  372. * @param mixed $default Second argument to method
  373. */
  374. public function test_get_null($query, $as_object, $name, $default)
  375. {
  376. $result = Database::factory()->execute_query($query, $as_object);
  377. $this->assertSame($default, $result->get($name, $default));
  378. $this->assertSame($default, $result->get($name, $default), 'Do not move pointer');
  379. }
  380. public function provider_offset_get()
  381. {
  382. $entire = Database::factory()->select()->from($this->_table);
  383. return array(
  384. array($entire, FALSE, 0, array('id' => 1, 'value' => 50)),
  385. array($entire, FALSE, 3, array('id' => 4, 'value' => 60)),
  386. array($entire, TRUE, 0, (object) array('id' => 1, 'value' => 50)),
  387. array($entire, TRUE, 3, (object) array('id' => 4, 'value' => 60)),
  388. );
  389. }
  390. /**
  391. * @covers Database_MySQL_Result::fetch
  392. * @covers Database_MySQL_Result::offsetGet
  393. *
  394. * @dataProvider provider_offset_get
  395. *
  396. * @param SQL_Expression $query
  397. * @param string|boolean $as_object
  398. * @param integer $offset
  399. * @param array $expected
  400. */
  401. public function test_offset_get($query, $as_object, $offset, $expected)
  402. {
  403. $result = Database::factory()->execute_query($query, $as_object);
  404. $this->assertEquals($expected, $result->offsetGet($offset));
  405. }
  406. public function provider_offset_get_after_seek()
  407. {
  408. $entire = Database::factory()->select()->from($this->_table);
  409. return array(
  410. // data set #0
  411. array($entire, FALSE, 0, 0, array('id' => 1, 'value' => 50)),
  412. array($entire, FALSE, 1, 0, array('id' => 1, 'value' => 50)),
  413. array($entire, FALSE, 2, 0, array('id' => 1, 'value' => 50)),
  414. // data set #3
  415. array($entire, FALSE, 0, 1, array('id' => 2, 'value' => 55)),
  416. array($entire, FALSE, 1, 1, array('id' => 2, 'value' => 55)),
  417. array($entire, FALSE, 2, 1, array('id' => 2, 'value' => 55)),
  418. // data set #6
  419. array($entire, FALSE, 0, 6, array('id' => 7, 'value' => 65)),
  420. array($entire, FALSE, 1, 6, array('id' => 7, 'value' => 65)),
  421. array($entire, FALSE, 2, 6, array('id' => 7, 'value' => 65)),
  422. // data set #9
  423. array($entire, TRUE, 0, 0, (object) array('id' => 1, 'value' => 50)),
  424. array($entire, TRUE, 1, 0, (object) array('id' => 1, 'value' => 50)),
  425. array($entire, TRUE, 2, 0, (object) array('id' => 1, 'value' => 50)),
  426. // data set #12
  427. array($entire, TRUE, 0, 1, (object) array('id' => 2, 'value' => 55)),
  428. array($entire, TRUE, 1, 1, (object) array('id' => 2, 'value' => 55)),
  429. array($entire, TRUE, 2, 1, (object) array('id' => 2, 'value' => 55)),
  430. // data set #15
  431. array($entire, TRUE, 0, 6, (object) array('id' => 7, 'value' => 65)),
  432. array($entire, TRUE, 1, 6, (object) array('id' => 7, 'value' => 65)),
  433. array($entire, TRUE, 2, 6, (object) array('id' => 7, 'value' => 65)),
  434. );
  435. }
  436. /**
  437. * @covers Database_MySQL_Result::fetch
  438. * @covers Database_MySQL_Result::offsetGet
  439. *
  440. * @dataProvider provider_offset_get_after_seek
  441. *
  442. * @param SQL_Expression $query
  443. * @param string|boolean $as_object
  444. * @param integer $position
  445. * @param integer $offset
  446. * @param array $expected
  447. */
  448. public function test_offset_get_after_seek($query, $as_object, $position, $offset, $expected)
  449. {
  450. $result = Database::factory()->execute_query($query, $as_object)->seek($position);
  451. $this->assertEquals($expected, $result->offsetGet($offset));
  452. $this->assertSame($position, $result->key(), 'Do not move pointer');
  453. }
  454. /**
  455. * @covers Database_MySQL_Result::offsetGet
  456. *
  457. * @dataProvider provider_fetch_invalid
  458. *
  459. * @param SQL_Expression $query
  460. * @param integer $offset
  461. */
  462. public function test_offset_get_invalid($query, $offset)
  463. {
  464. $result = Database::factory()->execute_query($query);
  465. $this->assertNull($result->offsetGet($offset));
  466. }
  467. public function provider_as_array()
  468. {
  469. $result = array();
  470. $empty = Database::factory()
  471. ->select()
  472. ->from($this->_table)
  473. ->where('value', '>', 1000);
  474. // data set #0
  475. $result[] = array($empty, FALSE, NULL, NULL, array());
  476. $result[] = array($empty, FALSE, NULL, 'id', array());
  477. $result[] = array($empty, FALSE, NULL, 'value', array());
  478. $result[] = array($empty, FALSE, 'id', 'value', array());
  479. $result[] = array($empty, FALSE, 'value', 'id', array());
  480. $result[] = array($empty, FALSE, 'id', NULL, array());
  481. $result[] = array($empty, FALSE, 'value', NULL, array());
  482. // data set #7
  483. $result[] = array($empty, TRUE, NULL, NULL, array());
  484. $result[] = array($empty, TRUE, NULL, 'id', array());
  485. $result[] = array($empty, TRUE, NULL, 'value', array());
  486. $result[] = array($empty, TRUE, 'id', 'value', array());
  487. $result[] = array($empty, TRUE, 'value', 'id', array());
  488. $result[] = array($empty, TRUE, 'id', NULL, array());
  489. $result[] = array($empty, TRUE, 'value', NULL, array());
  490. $entire = Database::factory()->select()->from($this->_table);
  491. // data set #14
  492. $result[] = array($entire, FALSE, NULL, NULL, array(
  493. array('id' => 1, 'value' => 50),
  494. array('id' => 2, 'value' => 55),
  495. array('id' => 3, 'value' => 60),
  496. array('id' => 4, 'value' => 60),
  497. array('id' => 5, 'value' => 65),
  498. array('id' => 6, 'value' => 65),
  499. array('id' => 7, 'value' => 65),
  500. ));
  501. $result[] = array($entire, FALSE, NULL, 'id', array(1, 2, 3, 4, 5, 6, 7));
  502. $result[] = array($entire, FALSE, NULL, 'value', array(50, 55, 60, 60, 65, 65, 65));
  503. $result[] = array($entire, FALSE, 'id', 'value', array(
  504. 1 => 50,
  505. 2 => 55,
  506. 3 => 60,
  507. 4 => 60,
  508. 5 => 65,
  509. 6 => 65,
  510. 7 => 65,
  511. ));
  512. $result[] = array($entire, FALSE, 'value', 'id', array(
  513. 50 => 1,
  514. 55 => 2,
  515. 60 => 4,
  516. 65 => 7,
  517. ));
  518. $result[] = array($entire, FALSE, 'id', NULL, array(
  519. 1 => array('id' => 1, 'value' => 50),
  520. 2 => array('id' => 2, 'value' => 55),
  521. 3 => array('id' => 3, 'value' => 60),
  522. 4 => array('id' => 4, 'value' => 60),
  523. 5 => array('id' => 5, 'value' => 65),
  524. 6 => array('id' => 6, 'value' => 65),
  525. 7 => array('id' => 7, 'value' => 65),
  526. ));
  527. $result[] = array($entire, FALSE, 'value', NULL, array(
  528. 50 => array('id' => 1, 'value' => 50),
  529. 55 => array('id' => 2, 'value' => 55),
  530. 60 => array('id' => 4, 'value' => 60),
  531. 65 => array('id' => 7, 'value' => 65),
  532. ));
  533. // data set #21
  534. $result[] = array($entire, TRUE, NULL, NULL, array(
  535. (object) array('id' => 1, 'value' => 50),
  536. (object) array('id' => 2, 'value' => 55),
  537. (object) array('id' => 3, 'value' => 60),
  538. (object) array('id' => 4, 'value' => 60),
  539. (object) array('id' => 5, 'value' => 65),
  540. (object) array('id' => 6, 'value' => 65),
  541. (object) array('id' => 7, 'value' => 65),
  542. ));
  543. $result[] = array($entire, TRUE, NULL, 'id', array(1, 2, 3, 4, 5, 6, 7));
  544. $result[] = array($entire, TRUE, NULL, 'value', array(50, 55, 60, 60, 65, 65, 65));
  545. $result[] = array($entire, TRUE, 'id', 'value', array(
  546. 1 => 50,
  547. 2 => 55,
  548. 3 => 60,
  549. 4 => 60,
  550. 5 => 65,
  551. 6 => 65,
  552. 7 => 65,
  553. ));
  554. $result[] = array($entire, TRUE, 'value', 'id', array(
  555. 50 => 1,
  556. 55 => 2,
  557. 60 => 4,
  558. 65 => 7,
  559. ));
  560. $result[] = array($entire, TRUE, 'id', NULL, array(
  561. 1 => (object) array('id' => 1, 'value' => 50),
  562. 2 => (object) array('id' => 2, 'value' => 55),
  563. 3 => (object) array('id' => 3, 'value' => 60),
  564. 4 => (object) array('id' => 4, 'value' => 60),
  565. 5 => (object) array('id' => 5, 'value' => 65),
  566. 6 => (object) array('id' => 6, 'value' => 65),
  567. 7 => (object) array('id' => 7, 'value' => 65),
  568. ));
  569. $result[] = array($entire, TRUE, 'value', NULL, array(
  570. 50 => (object) array('id' => 1, 'value' => 50),
  571. 55 => (object) array('id' => 2, 'value' => 55),
  572. 60 => (object) array('id' => 4, 'value' => 60),
  573. 65 => (object) array('id' => 7, 'value' => 65),
  574. ));
  575. return $result;
  576. }
  577. /**
  578. * @covers Database_MySQL_Result::as_array
  579. *
  580. * @dataProvider provider_as_array
  581. *
  582. * @param SQL_Expression $query
  583. * @param string|boolean $as_object
  584. * @param string $key First argument to method
  585. * @param string $value Second argument to method
  586. * @param array $expected
  587. */
  588. public function test_as_array($query, $as_object, $key, $value, $expected)
  589. {
  590. $result = Database::factory()->execute_query($query, $as_object);
  591. $this->assertEquals($expected, $result->as_array($key, $value));
  592. }
  593. }
  594. /**
  595. * Class to expose the arguments passed to a constructor. Remove if/when
  596. * constructors can be mocked.
  597. */
  598. class Database_MySQL_Result_Test_Constructor
  599. {
  600. protected $_arguments;
  601. public function __construct()
  602. {
  603. $this->_arguments = func_get_args();
  604. }
  605. public function arguments()
  606. {
  607. return $this->_arguments;
  608. }
  609. }