isValidNumber.cpp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  1. #include "isValidNumber.h"
  2. #include "Resources/validyMacros.h"
  3. #include "../../Source/JSONValidator.h"
  4. /*
  5. *
  6. * !!! ATTENTION !!!
  7. *
  8. * libjson currently has three number parsing methods, they are being merged
  9. * behind the scenes, but all three interfaces must be consistent, so every set
  10. * of numbers need to be tested in all three spots
  11. *
  12. * JSONValidator/isValidNumber *this file*
  13. * NumberToString/isNumeric
  14. * * Soon to come actual parser *
  15. */
  16. /**
  17. * Tests regular positive numbers in various forms
  18. */
  19. void testJSONValidator__isValidNumber::testPositive(void){
  20. #ifdef JSON_VALIDATE
  21. assertValid("123,\"next\"", isValidNumber, ',');
  22. assertValid("12.3,\"next\"", isValidNumber, ',');
  23. assertValid("0.123,\"next\"", isValidNumber, ',');
  24. assertValid("0,\"next\"", isValidNumber, ',');
  25. assertValid("0.,\"next\"", isValidNumber, ',');
  26. assertValid("1.,\"next\"", isValidNumber, ',');
  27. assertValid("1,\"next\"", isValidNumber, ',');
  28. assertValid("0.0,\"next\"", isValidNumber, ',');
  29. assertValid("1.0,\"next\"", isValidNumber, ',');
  30. assertValid("1.01,\"next\"", isValidNumber, ',');
  31. //signed positives are legal when not in strict mode, this is tested below
  32. #endif
  33. }
  34. /**
  35. * Tests regular negative numbers in various forms
  36. */
  37. void testJSONValidator__isValidNumber::testNegative(void){
  38. #ifdef JSON_VALIDATE
  39. assertValid("-123,\"next\"", isValidNumber, ',');
  40. assertValid("-12.3,\"next\"", isValidNumber, ',');
  41. assertValid("-0.123,\"next\"", isValidNumber, ',');
  42. assertValid("-0,\"next\"", isValidNumber, ',');
  43. assertValid("-0.,\"next\"", isValidNumber, ',');
  44. assertValid("-1,\"next\"", isValidNumber, ',');
  45. assertValid("-1.,\"next\"", isValidNumber, ',');
  46. assertValid("-0.0,\"next\"", isValidNumber, ',');
  47. assertValid("-1.0,\"next\"", isValidNumber, ',');
  48. assertValid("-1.01,\"next\"", isValidNumber, ',');
  49. #endif
  50. }
  51. /**
  52. * Tests positive numbers with regular scientific notation
  53. */
  54. void testJSONValidator__isValidNumber::testPositive_ScientificNotation(void){
  55. #ifdef JSON_VALIDATE
  56. assertValid("0e123,\"next\"", isValidNumber, ','); //TODO is 0e... a valid scientific number? its always zero
  57. assertNotValid("0e12.3,\"next\"", isValidNumber, ',');
  58. assertValid("1.e123,\"next\"", isValidNumber, ',');
  59. assertNotValid("1.e12.3,\"next\"", isValidNumber, ',');
  60. assertValid("1.0e123,\"next\"", isValidNumber, ',');
  61. assertNotValid("1.0e12.3,\"next\"", isValidNumber, ',');
  62. assertValid("0e2,\"next\"", isValidNumber, ',');
  63. assertValid("1e2,\"next\"", isValidNumber, ',');
  64. assertValid("0.e2,\"next\"", isValidNumber, ',');
  65. assertValid("1.e2,\"next\"", isValidNumber, ',');
  66. assertValid("0.0e2,\"next\"", isValidNumber, ',');
  67. assertValid("1.0e2,\"next\"", isValidNumber, ',');
  68. #endif
  69. }
  70. /**
  71. * Tests negative numbers with regular scientifc notation
  72. */
  73. void testJSONValidator__isValidNumber::testNegative_ScientificNotation(void){
  74. #ifdef JSON_VALIDATE
  75. assertValid("-0e123,\"next\"", isValidNumber, ',');
  76. assertNotValid("-0e12.3,\"next\"", isValidNumber, ',');
  77. assertValid("-1.e123,\"next\"", isValidNumber, ',');
  78. assertNotValid("-1.e12.3,\"next\"", isValidNumber, ',');
  79. assertValid("-1.0e123,\"next\"", isValidNumber, ',');
  80. assertNotValid("-1.0e12.3,\"next\"", isValidNumber, ',');
  81. assertValid("-0e2,\"next\"", isValidNumber, ',');
  82. assertValid("-1e2,\"next\"", isValidNumber, ',');
  83. assertValid("-0.e2,\"next\"", isValidNumber, ',');
  84. assertValid("-1.e2,\"next\"", isValidNumber, ',');
  85. assertValid("-0.0e2,\"next\"", isValidNumber, ',');
  86. assertValid("-1.0e2,\"next\"", isValidNumber, ',');
  87. #endif
  88. }
  89. /**
  90. * Tests positive numbers with scientific notiation that has a sign in it
  91. */
  92. void testJSONValidator__isValidNumber::testPositive_SignedScientificNotation(void){
  93. #ifdef JSON_VALIDATE
  94. assertValid("0e-123,\"next\"", isValidNumber, ',');
  95. assertValid("0e+123,\"next\"", isValidNumber, ',');
  96. assertNotValid("0e-12.3,\"next\"", isValidNumber, ',');
  97. assertNotValid("0e+12.3,\"next\"", isValidNumber, ',');
  98. assertValid("1.e-123,\"next\"", isValidNumber, ',');
  99. assertValid("1.e+123,\"next\"", isValidNumber, ',');
  100. assertNotValid("1.e-12.3,\"next\"", isValidNumber, ',');
  101. assertNotValid("1.e+12.3,\"next\"", isValidNumber, ',');
  102. assertValid("1.0e-123,\"next\"", isValidNumber, ',');
  103. assertValid("1.0e+123,\"next\"", isValidNumber, ',');
  104. assertNotValid("1.0e-12.3,\"next\"", isValidNumber, ',');
  105. assertNotValid("1.0e+12.3,\"next\"", isValidNumber, ',');
  106. assertValid("0e2,\"next\"", isValidNumber, ',');
  107. assertValid("1e2,\"next\"", isValidNumber, ',');
  108. assertValid("0.e2,\"next\"", isValidNumber, ',');
  109. assertValid("1.e2,\"next\"", isValidNumber, ',');
  110. assertValid("0.0e2,\"next\"", isValidNumber, ',');
  111. assertValid("1.0e2,\"next\"", isValidNumber, ',');
  112. #endif
  113. }
  114. /**
  115. * Tests negative numbers with scientific notiation that has a sign in it
  116. */
  117. void testJSONValidator__isValidNumber::testNegative_SignedScientificNotation(void){
  118. #ifdef JSON_VALIDATE
  119. assertValid("-0e-123,\"next\"", isValidNumber, ',');
  120. assertValid("-0e+123,\"next\"", isValidNumber, ',');
  121. assertNotValid("-0e-12.3,\"next\"", isValidNumber, ',');
  122. assertNotValid("-0e+12.3,\"next\"", isValidNumber, ',');
  123. assertValid("-0.e-123,\"next\"", isValidNumber, ',');
  124. assertValid("-0.e+123,\"next\"", isValidNumber, ',');
  125. assertValid("-1.e-123,\"next\"", isValidNumber, ',');
  126. assertValid("-1.e+123,\"next\"", isValidNumber, ',');
  127. assertNotValid("-1.e-12.3,\"next\"", isValidNumber, ',');
  128. assertNotValid("-1.e+12.3,\"next\"", isValidNumber, ',');
  129. assertValid("-0.0e-123,\"next\"", isValidNumber, ',');
  130. assertValid("-0.0e+123,\"next\"", isValidNumber, ',');
  131. assertValid("-1.0e-123,\"next\"", isValidNumber, ',');
  132. assertValid("-1.0e+123,\"next\"", isValidNumber, ',');
  133. assertNotValid("-1.0e-12.3,\"next\"", isValidNumber, ',');
  134. assertNotValid("-1.0e+12.3,\"next\"", isValidNumber, ',');
  135. assertValid("-0e-2,\"next\"", isValidNumber, ',');
  136. assertValid("-1e-2,\"next\"", isValidNumber, ',');
  137. assertValid("-0.e-2,\"next\"", isValidNumber, ',');
  138. assertValid("-1.e-2,\"next\"", isValidNumber, ',');
  139. assertValid("-0.0e-2,\"next\"", isValidNumber, ',');
  140. assertValid("-1.0e-2,\"next\"", isValidNumber, ',');
  141. assertValid("-0e+2,\"next\"", isValidNumber, ',');
  142. assertValid("-1e+2,\"next\"", isValidNumber, ',');
  143. assertValid("-0.e+2,\"next\"", isValidNumber, ',');
  144. assertValid("-1.e+2,\"next\"", isValidNumber, ',');
  145. assertValid("-0.0e+2,\"next\"", isValidNumber, ',');
  146. assertValid("-1.0e+2,\"next\"", isValidNumber, ',');
  147. #endif
  148. }
  149. /**
  150. * Tests that in strict mode, libjson isn't relaxed about what is and isn't
  151. * a valid number. libjson by default accepts a few extra common notations.
  152. */
  153. void testJSONValidator__isValidNumber::testStrict(void){
  154. #ifdef JSON_VALIDATE
  155. #ifdef JSON_STRICT
  156. assertNotValid("00,\"next\"", isValidNumber, ',');
  157. assertNotValid("00.01,\"next\"", isValidNumber, ',');
  158. assertNotValid(".01,\"next\"", isValidNumber, ','); //no leading 0 as required by the standard
  159. assertNotValid("-.01,\"next\"", isValidNumber, ','); //no leading 0 as required by the standard
  160. assertNotValid("+123,\"next\"", isValidNumber, ','); //no leading +
  161. assertNotValid("+12.3,\"next\"", isValidNumber, ',');
  162. assertNotValid("+0.123,\"next\"", isValidNumber, ',');
  163. assertNotValid("+0e123,\"next\"", isValidNumber, ',');
  164. assertNotValid("+0e-123,\"next\"", isValidNumber, ',');
  165. assertNotValid("+0e+123,\"next\"", isValidNumber, ',');
  166. assertNotValid("+1.e123,\"next\"", isValidNumber, ',');
  167. assertNotValid("+1.e-123,\"next\"", isValidNumber, ',');
  168. assertNotValid("+1.e+123,\"next\"", isValidNumber, ',');
  169. assertNotValid("+1.0e123,\"next\"", isValidNumber, ',');
  170. assertNotValid("+1.0e-123,\"next\"", isValidNumber, ',');
  171. assertNotValid("+1.0e+123,\"next\"", isValidNumber, ',');
  172. assertNotValid("+0e12.3,\"next\"", isValidNumber, ',');
  173. assertNotValid("+0e-12.3,\"next\"", isValidNumber, ',');
  174. assertNotValid("+0e+12.3,\"next\"", isValidNumber, ',');
  175. assertNotValid("+1.e12.3,\"next\"", isValidNumber, ',');
  176. assertNotValid("+1.e-12.3,\"next\"", isValidNumber, ',');
  177. assertNotValid("+1.e+12.3,\"next\"", isValidNumber, ',');
  178. assertNotValid("+1.0e12.3,\"next\"", isValidNumber, ',');
  179. assertNotValid("+1.0e-12.3,\"next\"", isValidNumber, ',');
  180. assertNotValid("+1.0e+12.3,\"next\"", isValidNumber, ',');
  181. assertNotValid("0x12FF,\"next\"", isValidNumber, ',');
  182. assertValid("0128,\"next\"", isValidNumber, ','); //legal because in STRICT mode, this is not octal, leading zero is ignored
  183. assertNotValid("0xABCD,\"next\"", isValidNumber, ',');
  184. assertNotValid("0124,\"next\"", isValidNumber, ',');
  185. assertNotValid("+1,\"next\"", isValidNumber, ',');
  186. assertNotValid("+1.,\"next\"", isValidNumber, ',');
  187. assertNotValid("+0.0,\"next\"", isValidNumber, ',');
  188. assertNotValid("+1.0,\"next\"", isValidNumber, ',');
  189. assertNotValid("+0e2,\"next\"", isValidNumber, ',');
  190. assertNotValid("+1e2,\"next\"", isValidNumber, ',');
  191. assertNotValid("+0.e2,\"next\"", isValidNumber, ',');
  192. assertNotValid("+1.e2,\"next\"", isValidNumber, ',');
  193. assertNotValid("+0.0e2,\"next\"", isValidNumber, ',');
  194. assertNotValid("+1.0e2,\"next\"", isValidNumber, ',');
  195. assertNotValid("+0e-2,\"next\"", isValidNumber, ',');
  196. assertNotValid("+1e-2,\"next\"", isValidNumber, ',');
  197. assertNotValid("+0.e-2,\"next\"", isValidNumber, ',');
  198. assertNotValid("+1.e-2,\"next\"", isValidNumber, ',');
  199. assertNotValid("+0e+2,\"next\"", isValidNumber, ',');
  200. assertNotValid("+1e+2,\"next\"", isValidNumber, ',');
  201. assertNotValid("+0.e+2,\"next\"", isValidNumber, ',');
  202. assertNotValid("+1.e+2,\"next\"", isValidNumber, ',');
  203. assertNotValid("+0.0e+2,\"next\"", isValidNumber, ',');
  204. assertNotValid("+1.0e+2,\"next\"", isValidNumber, ',');
  205. assertNotValid("1e-0123,\"next\"", isValidNumber, ','); //not valid because of negative and leading zero
  206. #endif
  207. #endif
  208. }
  209. /**
  210. * Tests that the extra common notations that libjson supports all
  211. * test out as valid
  212. */
  213. void testJSONValidator__isValidNumber::testNotStrict(void){
  214. #ifdef JSON_VALIDATE
  215. #ifndef JSON_STRICT
  216. assertValid("00,\"next\"", isValidNumber, ',');
  217. assertValid("00.01,\"next\"", isValidNumber, ',');
  218. assertValid(".01,\"next\"", isValidNumber, ',');
  219. assertValid("-.01,\"next\"", isValidNumber, ',');
  220. assertValid("+123,\"next\"", isValidNumber, ',');
  221. assertValid("+12.3,\"next\"", isValidNumber, ',');
  222. assertValid("+0.123,\"next\"", isValidNumber, ',');
  223. assertValid("+0,\"next\"", isValidNumber, ',');
  224. assertValid("+0.,\"next\"", isValidNumber, ',');
  225. assertValid("+0e123,\"next\"", isValidNumber, ',');
  226. assertValid("+0e-123,\"next\"", isValidNumber, ',');
  227. assertValid("+0e+123,\"next\"", isValidNumber, ',');
  228. assertValid("+1.e123,\"next\"", isValidNumber, ',');
  229. assertValid("+1.e-123,\"next\"", isValidNumber, ',');
  230. assertValid("+1.e+123,\"next\"", isValidNumber, ',');
  231. assertValid("+1.0e123,\"next\"", isValidNumber, ',');
  232. assertValid("+1.0e-123,\"next\"", isValidNumber, ',');
  233. assertValid("+1.0e+123,\"next\"", isValidNumber, ',');
  234. assertValid("+0e12.3,\"next\"", isValidNumber, ',');
  235. assertValid("+0e-12.3,\"next\"", isValidNumber, ',');
  236. assertValid("+0e+12.3,\"next\"", isValidNumber, ',');
  237. assertValid("+1.e12.3,\"next\"", isValidNumber, ',');
  238. assertValid("+1.e-12.3,\"next\"", isValidNumber, ',');
  239. assertValid("+1.e+12.3,\"next\"", isValidNumber, ',');
  240. assertValid("+1.0e12.3,\"next\"", isValidNumber, ',');
  241. assertValid("+1.0e-12.3,\"next\"", isValidNumber, ',');
  242. assertValid("+1.0e+12.3,\"next\"", isValidNumber, ',');
  243. assertValid("0x12FF,\"next\"", isValidNumber, ',');
  244. #ifdef JSON_OCTAL
  245. assertNotValid("0128,\"next\"", isValidNumber, ','); //because of the 8
  246. assertValid("0123,\"next\"", isValidNumber, ',');
  247. assertNotValid("-0128,\"next\"", isValidNumber, ',');
  248. assertValid("-0123,\"next\"", isValidNumber, ',');
  249. #else
  250. assertValid("0128,\"next\"", isValidNumber, ','); //because of the 8
  251. assertValid("0123,\"next\"", isValidNumber, ',');
  252. assertValid("-0128,\"next\"", isValidNumber, ',');
  253. assertValid("-0123,\"next\"", isValidNumber, ',');
  254. #endif
  255. assertValid("0xABCD,\"next\"", isValidNumber, ',');
  256. assertValid("0124,\"next\"", isValidNumber, ',');
  257. assertValid("+1,\"next\"", isValidNumber, ',');
  258. assertValid("+1.,\"next\"", isValidNumber, ',');
  259. assertValid("+0.0,\"next\"", isValidNumber, ',');
  260. assertValid("+1.0,\"next\"", isValidNumber, ',');
  261. assertValid("+0e2,\"next\"", isValidNumber, ',');
  262. assertValid("+1e2,\"next\"", isValidNumber, ',');
  263. assertValid("+0.e2,\"next\"", isValidNumber, ',');
  264. assertValid("+1.e2,\"next\"", isValidNumber, ',');
  265. assertValid("+0.0e2,\"next\"", isValidNumber, ',');
  266. assertValid("+1.0e2,\"next\"", isValidNumber, ',');
  267. assertValid("+0e-2,\"next\"", isValidNumber, ',');
  268. assertValid("+1e-2,\"next\"", isValidNumber, ',');
  269. assertValid("+0.e-2,\"next\"", isValidNumber, ',');
  270. assertValid("+1.e-2,\"next\"", isValidNumber, ',');
  271. assertValid("+0e+2,\"next\"", isValidNumber, ',');
  272. assertValid("+1e+2,\"next\"", isValidNumber, ',');
  273. assertValid("+0.e+2,\"next\"", isValidNumber, ',');
  274. assertValid("+1.e+2,\"next\"", isValidNumber, ',');
  275. assertValid("+0.0e+2,\"next\"", isValidNumber, ',');
  276. assertValid("+1.0e+2,\"next\"", isValidNumber, ',');
  277. assertValid("1e-0123,\"next\"", isValidNumber, ',');
  278. #endif
  279. #endif
  280. }
  281. /**
  282. * This tests values that aren't numbers at all, to make sure they are
  283. * flagged as not valid
  284. */
  285. void testJSONValidator__isValidNumber::testNotNumbers(void){
  286. #ifdef JSON_VALIDATE
  287. assertNotValid("-.,\"next\"", isValidNumber, ',');
  288. assertNotValid("-e,\"next\"", isValidNumber, ',');
  289. assertNotValid("0xABCDv,\"next\"", isValidNumber, ',');
  290. assertNotValid("001234,\"next\"", isValidNumber, ',');
  291. assertNotValid("09124,\"next\"", isValidNumber, ',');
  292. assertNotValid("0no,\"next\"", isValidNumber, ',');
  293. assertNotValid("no,\"next\"", isValidNumber, ',');
  294. assertNotValid("n1234,\"next\"", isValidNumber, ',');
  295. assertNotValid("12no,\"next\"", isValidNumber, ',');
  296. assertNotValid("0en5,\"next\"", isValidNumber, ',');
  297. #endif
  298. }
  299. /**
  300. * This test checks that for all above mentioned valids,
  301. * if the string cuts off suddenly, it recovers
  302. */
  303. void testJSONValidator__isValidNumber::testSuddenEnd(void){
  304. #ifdef JSON_VALIDATE
  305. assertNotValid("", isValidNumber, ',');
  306. //--- void testJSONValidator__isValidNumber::testPositive(void){
  307. assertNotValid("123", isValidNumber, ',');
  308. assertNotValid("12.3", isValidNumber, ',');
  309. assertNotValid("0.123", isValidNumber, ',');
  310. assertNotValid("0", isValidNumber, ',');
  311. assertNotValid("0.", isValidNumber, ',');
  312. assertNotValid("1.", isValidNumber, ',');
  313. assertNotValid("1", isValidNumber, ',');
  314. assertNotValid("0.0", isValidNumber, ',');
  315. assertNotValid("1.0", isValidNumber, ',');
  316. assertNotValid("1.01", isValidNumber, ',');
  317. assertNotValid("0123", isValidNumber, ',');
  318. //--- void testJSONValidator__isValidNumber::testNegative(void){
  319. assertNotValid("-123", isValidNumber, ',');
  320. assertNotValid("-12.3", isValidNumber, ',');
  321. assertNotValid("-0.123", isValidNumber, ',');
  322. assertNotValid("-0", isValidNumber, ',');
  323. assertNotValid("-0.", isValidNumber, ',');
  324. assertNotValid("-1", isValidNumber, ',');
  325. assertNotValid("-1.", isValidNumber, ',');
  326. assertNotValid("-0.0", isValidNumber, ',');
  327. assertNotValid("-1.0", isValidNumber, ',');
  328. assertNotValid("-1.01", isValidNumber, ',');
  329. assertNotValid("-0123", isValidNumber, ',');
  330. //--- void testJSONValidator__isValidNumber::testPositive_ScientificNotation(void){
  331. assertNotValid("0e", isValidNumber, ',');
  332. assertNotValid("0E", isValidNumber, ',');
  333. assertNotValid("0e123", isValidNumber, ',');
  334. assertNotValid("0e12.3", isValidNumber, ',');
  335. assertNotValid("1.e123", isValidNumber, ',');
  336. assertNotValid("1.e12.3", isValidNumber, ',');
  337. assertNotValid("1.0e123", isValidNumber, ',');
  338. assertNotValid("1.0e12.3", isValidNumber, ',');
  339. assertNotValid("0e2", isValidNumber, ',');
  340. assertNotValid("1e2", isValidNumber, ',');
  341. assertNotValid("0.e2", isValidNumber, ',');
  342. assertNotValid("1.e2", isValidNumber, ',');
  343. assertNotValid("0.0e2", isValidNumber, ',');
  344. assertNotValid("1.0e2", isValidNumber, ',');
  345. //--- void testJSONValidator__isValidNumber::testNegative_ScientificNotation(void){
  346. assertNotValid("-0e123", isValidNumber, ',');
  347. assertNotValid("-0e12.3", isValidNumber, ',');
  348. assertNotValid("-1.e123", isValidNumber, ',');
  349. assertNotValid("-1.e12.3", isValidNumber, ',');
  350. assertNotValid("-1.0e123", isValidNumber, ',');
  351. assertNotValid("-1.0e12.3", isValidNumber, ',');
  352. assertNotValid("-0e2", isValidNumber, ',');
  353. assertNotValid("-1e2", isValidNumber, ',');
  354. assertNotValid("-0.e2", isValidNumber, ',');
  355. assertNotValid("-1.e2", isValidNumber, ',');
  356. assertNotValid("-0.0e2", isValidNumber, ',');
  357. assertNotValid("-1.0e2", isValidNumber, ',');
  358. //--- void testJSONValidator__isValidNumber::testPositive_SignedScientificNotation(void){
  359. assertNotValid("0e-123", isValidNumber, ',');
  360. assertNotValid("0e+123", isValidNumber, ',');
  361. assertNotValid("0e-12.3", isValidNumber, ',');
  362. assertNotValid("0e+12.3", isValidNumber, ',');
  363. assertNotValid("1.e-123", isValidNumber, ',');
  364. assertNotValid("1.e+123", isValidNumber, ',');
  365. assertNotValid("1.e-12.3", isValidNumber, ',');
  366. assertNotValid("1.e+12.3", isValidNumber, ',');
  367. assertNotValid("1.0e-123", isValidNumber, ',');
  368. assertNotValid("1.0e+123", isValidNumber, ',');
  369. assertNotValid("1.0e-12.3", isValidNumber, ',');
  370. assertNotValid("1.0e+12.3", isValidNumber, ',');
  371. assertNotValid("0e2", isValidNumber, ',');
  372. assertNotValid("1e2", isValidNumber, ',');
  373. assertNotValid("0.e2", isValidNumber, ',');
  374. assertNotValid("1.e2", isValidNumber, ',');
  375. assertNotValid("0.0e2", isValidNumber, ',');
  376. assertNotValid("1.0e2", isValidNumber, ',');
  377. //--- void testJSONValidator__isValidNumber::testNegative_SignedScientificNotation(void){
  378. assertNotValid("-0e-123", isValidNumber, ',');
  379. assertNotValid("-0e+123", isValidNumber, ',');
  380. assertNotValid("-0e-12.3", isValidNumber, ',');
  381. assertNotValid("-0e+12.3", isValidNumber, ',');
  382. assertNotValid("-0.e-123", isValidNumber, ',');
  383. assertNotValid("-0.e+123", isValidNumber, ',');
  384. assertNotValid("-1.e-123", isValidNumber, ',');
  385. assertNotValid("-1.e+123", isValidNumber, ',');
  386. assertNotValid("-1.e-12.3", isValidNumber, ',');
  387. assertNotValid("-1.e+12.3", isValidNumber, ',');
  388. assertNotValid("-0.0e-123", isValidNumber, ',');
  389. assertNotValid("-0.0e+123", isValidNumber, ',');
  390. assertNotValid("-1.0e-123", isValidNumber, ',');
  391. assertNotValid("-1.0e+123", isValidNumber, ',');
  392. assertNotValid("-1.0e-12.3", isValidNumber, ',');
  393. assertNotValid("-1.0e+12.3", isValidNumber, ',');
  394. assertNotValid("-0e-2", isValidNumber, ',');
  395. assertNotValid("-1e-2", isValidNumber, ',');
  396. assertNotValid("-0.e-2", isValidNumber, ',');
  397. assertNotValid("-1.e-2", isValidNumber, ',');
  398. assertNotValid("-0.0e-2", isValidNumber, ',');
  399. assertNotValid("-1.0e-2", isValidNumber, ',');
  400. assertNotValid("-0e+2", isValidNumber, ',');
  401. assertNotValid("-1e+2", isValidNumber, ',');
  402. assertNotValid("-0.e+2", isValidNumber, ',');
  403. assertNotValid("-1.e+2", isValidNumber, ',');
  404. assertNotValid("-0.0e+2", isValidNumber, ',');
  405. assertNotValid("-1.0e+2", isValidNumber, ',');
  406. //strict stuff
  407. assertNotValid(".01", isValidNumber, ','); //no leading 0 as required by the standard
  408. assertNotValid("-.01", isValidNumber, ','); //no leading 0 as required by the standard
  409. assertNotValid("+123", isValidNumber, ','); //no leading +
  410. assertNotValid("+12.3", isValidNumber, ',');
  411. assertNotValid("+0.123", isValidNumber, ',');
  412. assertNotValid("+0e123", isValidNumber, ',');
  413. assertNotValid("+0e-123", isValidNumber, ',');
  414. assertNotValid("+0e+123", isValidNumber, ',');
  415. assertNotValid("+1.e123", isValidNumber, ',');
  416. assertNotValid("+1.e-123", isValidNumber, ',');
  417. assertNotValid("+1.e+123", isValidNumber, ',');
  418. assertNotValid("+1.0e123", isValidNumber, ',');
  419. assertNotValid("+1.0e-123", isValidNumber, ',');
  420. assertNotValid("+1.0e+123", isValidNumber, ',');
  421. assertNotValid("+0e12.3", isValidNumber, ',');
  422. assertNotValid("+0e-12.3", isValidNumber, ',');
  423. assertNotValid("+0e+12.3", isValidNumber, ',');
  424. assertNotValid("+1.e12.3", isValidNumber, ',');
  425. assertNotValid("+1.e-12.3", isValidNumber, ',');
  426. assertNotValid("+1.e+12.3", isValidNumber, ',');
  427. assertNotValid("+1.0e12.3", isValidNumber, ',');
  428. assertNotValid("+1.0e-12.3", isValidNumber, ',');
  429. assertNotValid("+1.0e+12.3", isValidNumber, ',');
  430. assertNotValid("0x12FF", isValidNumber, ',');
  431. assertNotValid("0128", isValidNumber, ','); //legal because in STRICT mode, this is not octal, leading zero is ignored
  432. assertNotValid("0xABCD", isValidNumber, ',');
  433. assertNotValid("0124", isValidNumber, ',');
  434. assertNotValid("+1", isValidNumber, ',');
  435. assertNotValid("+1.", isValidNumber, ',');
  436. assertNotValid("+0.0", isValidNumber, ',');
  437. assertNotValid("+1.0", isValidNumber, ',');
  438. assertNotValid("+0e2", isValidNumber, ',');
  439. assertNotValid("+1e2", isValidNumber, ',');
  440. assertNotValid("+0.e2", isValidNumber, ',');
  441. assertNotValid("+1.e2", isValidNumber, ',');
  442. assertNotValid("+0.0e2", isValidNumber, ',');
  443. assertNotValid("+1.0e2", isValidNumber, ',');
  444. assertNotValid("+0e-2", isValidNumber, ',');
  445. assertNotValid("+1e-2", isValidNumber, ',');
  446. assertNotValid("+0.e-2", isValidNumber, ',');
  447. assertNotValid("+1.e-2", isValidNumber, ',');
  448. assertNotValid("+0e+2", isValidNumber, ',');
  449. assertNotValid("+1e+2", isValidNumber, ',');
  450. assertNotValid("+0.e+2", isValidNumber, ',');
  451. assertNotValid("+1.e+2", isValidNumber, ',');
  452. assertNotValid("+0.0e+2", isValidNumber, ',');
  453. assertNotValid("+1.0e+2", isValidNumber, ',');
  454. assertNotValid("0128", isValidNumber, ','); //because of the 8
  455. //--- void testJSONValidator__isValidNumber::testNotNumbers(void){
  456. assertNotValid("0xABCDv", isValidNumber, ',');
  457. assertNotValid("001234", isValidNumber, ',');
  458. assertNotValid("09124", isValidNumber, ',');
  459. assertNotValid("0no", isValidNumber, ',');
  460. assertNotValid("no", isValidNumber, ',');
  461. assertNotValid("n1234", isValidNumber, ',');
  462. assertNotValid("12no", isValidNumber, ',');
  463. assertNotValid("0en5", isValidNumber, ',');
  464. #endif
  465. }