NumberTest.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Measure
  17. * @subpackage UnitTests
  18. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. * @version $Id$
  21. */
  22. /**
  23. * Zend_Measure_Number
  24. */
  25. require_once 'Zend/Measure/Number.php';
  26. /**
  27. * @category Zend
  28. * @package Zend_Measure
  29. * @subpackage UnitTests
  30. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  31. * @license http://framework.zend.com/license/new-bsd New BSD License
  32. * @group Zend_Measure
  33. */
  34. class Zend_Measure_NumberTest extends PHPUnit_Framework_TestCase
  35. {
  36. /**
  37. * test for Number initialisation
  38. * expected instance
  39. */
  40. public function testNumberInit()
  41. {
  42. $value = new Zend_Measure_Number('100',Zend_Measure_Number::STANDARD,'de');
  43. $this->assertTrue($value instanceof Zend_Measure_Number,'Zend_Measure_Number Object not returned');
  44. $value = new Zend_Measure_Number('100','de');
  45. $this->assertTrue($value instanceof Zend_Measure_Number,'Zend_Measure_Number Object not returned');
  46. $value = new Zend_Measure_Number('100',Zend_Measure_Number::STANDARD);
  47. $this->assertEquals(100, $value->getValue(),'Zend_Measure_Number value expected');
  48. $value = new Zend_Measure_Number('100',Zend_Measure_Number::STANDARD,'de');
  49. $this->assertEquals(100, $value->getValue(), 'Zend_Measure_Number value expected to be a positive integer');
  50. $value = new Zend_Measure_Number('-100',Zend_Measure_Number::STANDARD,'de');
  51. $this->assertEquals(100, $value->getValue(), 'Zend_Measure_Number value expected to be a negative integer');
  52. $value = new Zend_Measure_Number('-100,200',Zend_Measure_Number::STANDARD,'de');
  53. $this->assertEquals(100, $value->getValue(), 'Zend_Measure_Number value expected to be a decimal value');
  54. $value = new Zend_Measure_Number('-100.100,200',Zend_Measure_Number::STANDARD,'de');
  55. $this->assertEquals(100100, $value->getValue(),'Zend_Measure_Number Object not returned');
  56. $value = new Zend_Measure_Number('-100.100,200',Zend_Measure_Number::STANDARD,'de');
  57. $this->assertEquals(100100, $value->getValue(),'Zend_Measure_Number Object not returned');
  58. try {
  59. $value = new Zend_Measure_Number('100','Number::UNKNOWN','de');
  60. $this->fail('Exception expected because of unknown type');
  61. } catch (Zend_Measure_Exception $e) {
  62. // success
  63. }
  64. try {
  65. $value = new Zend_Measure_Number('novalue',Zend_Measure_Number::STANDARD,'de');
  66. $this->fail('Exception expected because of empty value');
  67. } catch (Zend_Measure_Exception $e) {
  68. // success
  69. }
  70. try {
  71. $value = new Zend_Measure_Number('100',Zend_Measure_Number::STANDARD,'nolocale');
  72. $this->fail('Exception expected because of unknown locale');
  73. } catch (Zend_Measure_Exception $e) {
  74. // success
  75. }
  76. }
  77. /**
  78. * test for equality
  79. * expected true
  80. */
  81. public function testNumberEquality()
  82. {
  83. $value = new Zend_Measure_Number('-100.100,200',Zend_Measure_Number::STANDARD,'de');
  84. $newvalue = new Zend_Measure_Number('-100.100,200',Zend_Measure_Number::STANDARD,'de');
  85. $this->assertTrue($value->equals($newvalue),'Zend_Measure_Number Object should be equal');
  86. $value = new Zend_Measure_Number('-100.100,200',Zend_Measure_Number::STANDARD,'de');
  87. $newvalue = new Zend_Measure_Number('-100,200',Zend_Measure_Number::STANDARD,'de');
  88. $this->assertFalse($value->equals($newvalue),'Zend_Measure_Number Object should be not equal');
  89. }
  90. /**
  91. * test for setValue
  92. * expected integer
  93. */
  94. public function testNumberSetValue()
  95. {
  96. $value = new Zend_Measure_Number('100',Zend_Measure_Number::STANDARD,'de');
  97. $value->setValue('200',Zend_Measure_Number::STANDARD,'de');
  98. $this->assertEquals(200, $value->getValue(), 'Zend_Measure_Number value expected to be a positive integer');
  99. $value->setValue('-200',Zend_Measure_Number::STANDARD,'de');
  100. $this->assertEquals(200, $value->getValue(), 'Zend_Measure_Number value expected to be a negative integer');
  101. $value->setValue('-200,200',Zend_Measure_Number::STANDARD,'de');
  102. $this->assertEquals(200, $value->getValue(), 'Zend_Measure_Number value expected to be a decimal value');
  103. $value->setValue('-200.200,200',Zend_Measure_Number::STANDARD,'de');
  104. $this->assertEquals(200200, $value->getValue(),'Zend_Measure_Number Object not returned');
  105. $value->setValue('-200.200,200',Zend_Measure_Number::STANDARD,'de');
  106. $this->assertEquals(200200, $value->getValue(),'Zend_Measure_Number Object not returned');
  107. try {
  108. $value = new Zend_Measure_Number('100',Zend_Measure_Number::STANDARD,'de');
  109. $value->setValue('-200.200,200','Number::UNKNOWN','de');
  110. $this->fail('Exception expected because of unknown type');
  111. } catch (Zend_Measure_Exception $e) {
  112. // success
  113. }
  114. try {
  115. $value = new Zend_Measure_Number('100',Zend_Measure_Number::STANDARD,'de');
  116. $value->setValue('novalue',Zend_Measure_Number::STANDARD,'de');
  117. $this->fail('Exception expected because of empty value');
  118. } catch (Zend_Measure_Exception $e) {
  119. // success
  120. }
  121. try {
  122. $value = new Zend_Measure_Number('100',Zend_Measure_Number::STANDARD,'de');
  123. $value->setValue('200',Zend_Measure_Number::STANDARD,'nolocale');
  124. $this->fail('Exception expected because of unknown locale');
  125. } catch (Zend_Measure_Exception $e) {
  126. // success
  127. }
  128. $value->setValue('200', Zend_Measure_Number::STANDARD);
  129. $this->assertEquals(200, $value->getValue(), 'Zend_Measure_Number value expected to be a positive integer');
  130. }
  131. /**
  132. * test setting type
  133. * expected new type
  134. */
  135. public function testNumberSetType()
  136. {
  137. $value = new Zend_Measure_Number('-100',Zend_Measure_Number::STANDARD,'de');
  138. $value->setType(Zend_Measure_Number::BINARY);
  139. $this->assertEquals(Zend_Measure_Number::BINARY, $value->getType(), 'Zend_Measure_Number type expected');
  140. $value->setType(Zend_Measure_Number::ROMAN);
  141. $this->assertEquals(Zend_Measure_Number::ROMAN, $value->getType(), 'Zend_Measure_Number type expected');
  142. $value = new Zend_Measure_Number('1001020',Zend_Measure_Number::BINARY,'de');
  143. $value->setType(Zend_Measure_Number::HEXADECIMAL);
  144. $this->assertEquals(Zend_Measure_Number::HEXADECIMAL, $value->getType(), 'Zend_Measure_Number type expected');
  145. $value = new Zend_Measure_Number('MCXVII',Zend_Measure_Number::ROMAN,'de');
  146. $value->setType(Zend_Measure_Number::HEXADECIMAL);
  147. $this->assertEquals(Zend_Measure_Number::HEXADECIMAL, $value->getType(), 'Zend_Measure_Number type expected');
  148. $value = new Zend_Measure_Number('102122',Zend_Measure_Number::TERNARY,'de');
  149. $value->setType(Zend_Measure_Number::OCTAL);
  150. $this->assertEquals(Zend_Measure_Number::OCTAL, $value->getType(), 'Zend_Measure_Number type expected');
  151. $value = new Zend_Measure_Number('1032402',Zend_Measure_Number::QUATERNARY,'de');
  152. $value->setType(Zend_Measure_Number::QUINARY);
  153. $this->assertEquals(Zend_Measure_Number::QUINARY, $value->getType(), 'Zend_Measure_Number type expected');
  154. $value = new Zend_Measure_Number('1052402',Zend_Measure_Number::QUINARY,'de');
  155. $value->setType(Zend_Measure_Number::QUATERNARY);
  156. $this->assertEquals(Zend_Measure_Number::QUATERNARY, $value->getType(), 'Zend_Measure_Number type expected');
  157. $value = new Zend_Measure_Number('1632402',Zend_Measure_Number::SENARY,'de');
  158. $value->setType(Zend_Measure_Number::SEPTENARY);
  159. $this->assertEquals(Zend_Measure_Number::SEPTENARY, $value->getType(), 'Zend_Measure_Number type expected');
  160. $value = new Zend_Measure_Number('1632702', Zend_Measure_Number::SEPTENARY, 'de');
  161. $value->setType(Zend_Measure_Number::SENARY);
  162. $this->assertEquals(Zend_Measure_Number::SENARY, $value->getType(), 'Zend_Measure_Number type expected');
  163. $value = new Zend_Measure_Number('1832402',Zend_Measure_Number::NONARY,'de');
  164. $value->setType(Zend_Measure_Number::SEPTENARY);
  165. $this->assertEquals(Zend_Measure_Number::SEPTENARY, $value->getType(), 'Zend_Measure_Number type expected');
  166. $value = new Zend_Measure_Number('1632402',Zend_Measure_Number::DUODECIMAL,'de');
  167. $value->setType(Zend_Measure_Number::SEPTENARY);
  168. $this->assertEquals(Zend_Measure_Number::SEPTENARY, $value->getType(), 'Zend_Measure_Number type expected');
  169. $value = new Zend_Measure_Number('1234ACE',Zend_Measure_Number::HEXADECIMAL,'de');
  170. $value->setType(Zend_Measure_Number::TERNARY);
  171. $this->assertEquals(Zend_Measure_Number::TERNARY, $value->getType(), 'Zend_Measure_Number type expected');
  172. $value = new Zend_Measure_Number('1234075',Zend_Measure_Number::OCTAL,'de');
  173. $value->setType(Zend_Measure_Number::TERNARY);
  174. $this->assertEquals(Zend_Measure_Number::TERNARY, $value->getType(), 'Zend_Measure_Number type expected');
  175. try {
  176. $value = new Zend_Measure_Number('-100',Zend_Measure_Number::STANDARD,'de');
  177. $value->setType('Number::UNKNOWN');
  178. $this->fail('Exception expected because of unknown type');
  179. } catch (Zend_Measure_Exception $e) {
  180. // success
  181. }
  182. }
  183. /**
  184. * test toString
  185. * expected string
  186. */
  187. public function testNumberToString()
  188. {
  189. $value = new Zend_Measure_Number('-100',Zend_Measure_Number::STANDARD,'de');
  190. $this->assertEquals('100 ⑽', $value->toString(), 'Value 100 ⑽ expected');
  191. }
  192. /**
  193. * test __toString
  194. * expected string
  195. */
  196. public function testNumber_ToString()
  197. {
  198. $value = new Zend_Measure_Number('-100',Zend_Measure_Number::STANDARD,'de');
  199. $this->assertEquals('100 ⑽', $value->__toString(), 'Value 100 ⑽ expected');
  200. }
  201. /**
  202. * test getConversionList
  203. * expected array
  204. */
  205. public function testNumberConversionList()
  206. {
  207. $value = new Zend_Measure_Number('-100',Zend_Measure_Number::STANDARD,'de');
  208. $unit = $value->getConversionList();
  209. $this->assertTrue(is_array($unit), 'Array expected');
  210. }
  211. /**
  212. * test convertTo
  213. */
  214. public function testConvertTo()
  215. {
  216. $value = new Zend_Measure_Number('III',Zend_Measure_Number::ROMAN, 'en');
  217. $this->assertEquals('3 ⑽', $value->convertTo(Zend_Measure_Number::DECIMAL));
  218. $value = new Zend_Measure_Number('XXV',Zend_Measure_Number::ROMAN, 'en');
  219. $this->assertEquals('25 ⑽', $value->convertTo(Zend_Measure_Number::DECIMAL));
  220. $value = new Zend_Measure_Number('_X',Zend_Measure_Number::ROMAN, 'en');
  221. $this->assertEquals('10,000 ⑽', $value->convertTo(Zend_Measure_Number::DECIMAL));
  222. }
  223. /**
  224. * @dataProvider providerConvertingDecimalToRoman
  225. * @group GH-536
  226. */
  227. public function testConvertingDecimalToRoman($decimal, $roman)
  228. {
  229. $number = new Zend_Measure_Number(
  230. $decimal,
  231. Zend_Measure_Number::DECIMAL,
  232. null
  233. );
  234. $this->assertEquals(
  235. $roman,
  236. $number->convertTo(Zend_Measure_Number::ROMAN)
  237. );
  238. }
  239. /**
  240. * Data provider for testConvertingDecimalToRoman
  241. * @group GH-536
  242. * @return array
  243. */
  244. public function providerConvertingDecimalToRoman()
  245. {
  246. return array(
  247. array(10, 'X'),
  248. array(11, 'XI'),
  249. array(12, 'XII'),
  250. array(13, 'XIII'),
  251. array(14, 'XIV'),
  252. array(15, 'XV'),
  253. array(16, 'XVI'),
  254. array(17, 'XVII'),
  255. array(18, 'XVIII'),
  256. array(19, 'XIX'),
  257. array(20, 'XX'),
  258. );
  259. }
  260. }