PageRenderTime 46ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/projects/jruby-1.7.3/test/externals/ruby1.9/strscan/test_stringscanner.rb

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Ruby | 693 lines | 596 code | 88 blank | 9 comment | 0 complexity | 6ca3cfb8b964d48b93a551229b75b6a1 MD5 | raw file
  1. #
  2. # test/strscan/test_stringscanner.rb
  3. #
  4. require 'strscan'
  5. require 'test/unit'
  6. class TestStringScanner < Test::Unit::TestCase
  7. def test_s_new
  8. s = StringScanner.new('test string')
  9. assert_instance_of StringScanner, s
  10. assert_equal false, s.eos?
  11. assert_equal false, s.tainted?
  12. str = 'test string'
  13. str.taint
  14. s = StringScanner.new(str, false)
  15. assert_instance_of StringScanner, s
  16. assert_equal false, s.eos?
  17. assert_same str, s.string
  18. assert_equal true, s.string.tainted?
  19. str = 'test string'
  20. str.taint
  21. s = StringScanner.new(str)
  22. assert_equal true, s.string.tainted?
  23. end
  24. UNINIT_ERROR = ArgumentError
  25. def test_s_allocate
  26. s = StringScanner.allocate
  27. assert_equal '#<StringScanner (uninitialized)>', s.inspect.sub(/StringScanner_C/, 'StringScanner')
  28. assert_raise(UNINIT_ERROR) { s.eos? }
  29. assert_raise(UNINIT_ERROR) { s.scan(/a/) }
  30. s.string = 'test'
  31. assert_equal '#<StringScanner 0/4 @ "test">', s.inspect.sub(/StringScanner_C/, 'StringScanner')
  32. assert_nothing_raised(UNINIT_ERROR) { s.eos? }
  33. assert_equal false, s.eos?
  34. end
  35. def test_s_mustc
  36. assert_nothing_raised(NotImplementedError) {
  37. StringScanner.must_C_version
  38. }
  39. end
  40. def test_dup
  41. s = StringScanner.new('test string')
  42. d = s.dup
  43. assert_equal s.inspect, d.inspect
  44. assert_equal s.string, d.string
  45. assert_equal s.pos, d.pos
  46. assert_equal s.matched?, d.matched?
  47. assert_equal s.eos?, d.eos?
  48. s = StringScanner.new('test string')
  49. s.scan(/test/)
  50. d = s.dup
  51. assert_equal s.inspect, d.inspect
  52. assert_equal s.string, d.string
  53. assert_equal s.pos, d.pos
  54. assert_equal s.matched?, d.matched?
  55. assert_equal s.eos?, d.eos?
  56. s = StringScanner.new('test string')
  57. s.scan(/test/)
  58. s.scan(/NOT MATCH/)
  59. d = s.dup
  60. assert_equal s.inspect, d.inspect
  61. assert_equal s.string, d.string
  62. assert_equal s.pos, d.pos
  63. assert_equal s.matched?, d.matched?
  64. assert_equal s.eos?, d.eos?
  65. s = StringScanner.new('test string')
  66. s.terminate
  67. d = s.dup
  68. assert_equal s.inspect, d.inspect
  69. assert_equal s.string, d.string
  70. assert_equal s.pos, d.pos
  71. assert_equal s.matched?, d.matched?
  72. assert_equal s.eos?, d.eos?
  73. end
  74. def test_const_Version
  75. assert_instance_of String, StringScanner::Version
  76. assert_equal true, StringScanner::Version.frozen?
  77. end
  78. def test_const_Id
  79. assert_instance_of String, StringScanner::Id
  80. assert_equal true, StringScanner::Id.frozen?
  81. end
  82. def test_inspect
  83. str = 'test string'
  84. str.taint
  85. s = StringScanner.new(str, false)
  86. assert_instance_of String, s.inspect
  87. assert_equal s.inspect, s.inspect
  88. assert_equal '#<StringScanner 0/11 @ "test ...">', s.inspect.sub(/StringScanner_C/, 'StringScanner')
  89. s.get_byte
  90. assert_equal '#<StringScanner 1/11 "t" @ "est s...">', s.inspect.sub(/StringScanner_C/, 'StringScanner')
  91. assert_equal true, s.inspect.tainted?
  92. s = StringScanner.new("\n")
  93. assert_equal '#<StringScanner 0/1 @ "\n">', s.inspect
  94. end
  95. def test_eos?
  96. s = StringScanner.new('test string')
  97. assert_equal false, s.eos?
  98. assert_equal false, s.eos?
  99. s.scan(/\w+/)
  100. assert_equal false, s.eos?
  101. assert_equal false, s.eos?
  102. s.scan(/\s+/)
  103. s.scan(/\w+/)
  104. assert_equal true, s.eos?
  105. assert_equal true, s.eos?
  106. s.scan(/\w+/)
  107. assert_equal true, s.eos?
  108. s = StringScanner.new('test')
  109. s.scan(/te/)
  110. s.string.replace ''
  111. assert_equal true, s.eos?
  112. end
  113. def test_bol?
  114. s = StringScanner.new("a\nbbb\n\ncccc\nddd\r\neee")
  115. assert_equal true, s.bol?
  116. assert_equal true, s.bol?
  117. s.scan(/a/)
  118. assert_equal false, s.bol?
  119. assert_equal false, s.bol?
  120. s.scan(/\n/)
  121. assert_equal true, s.bol?
  122. s.scan(/b/)
  123. assert_equal false, s.bol?
  124. s.scan(/b/)
  125. assert_equal false, s.bol?
  126. s.scan(/b/)
  127. assert_equal false, s.bol?
  128. s.scan(/\n/)
  129. assert_equal true, s.bol?
  130. s.unscan
  131. assert_equal false, s.bol?
  132. s.scan(/\n/)
  133. s.scan(/\n/)
  134. assert_equal true, s.bol?
  135. s.scan(/c+\n/)
  136. assert_equal true, s.bol?
  137. s.scan(/d+\r\n/)
  138. assert_equal true, s.bol?
  139. s.scan(/e+/)
  140. assert_equal false, s.bol?
  141. end
  142. def test_string
  143. s = StringScanner.new('test')
  144. assert_equal 'test', s.string
  145. s.string = 'a'
  146. assert_equal 'a', s.string
  147. s.scan(/a/)
  148. s.string = 'b'
  149. assert_equal 0, s.pos
  150. end
  151. def test_string_set_is_equal
  152. name = 'tenderlove'
  153. s = StringScanner.new(name)
  154. assert_equal name.object_id, s.string.object_id
  155. s.string = name
  156. assert_equal name.object_id, s.string.object_id
  157. end
  158. def test_string_append
  159. s = StringScanner.new('tender')
  160. s << 'love'
  161. assert_equal 'tenderlove', s.string
  162. s.string = 'tender'
  163. s << 'love'
  164. assert_equal 'tenderlove', s.string
  165. end
  166. def test_pos
  167. s = StringScanner.new('test string')
  168. assert_equal 0, s.pos
  169. s.get_byte
  170. assert_equal 1, s.pos
  171. s.get_byte
  172. assert_equal 2, s.pos
  173. s.terminate
  174. assert_equal 11, s.pos
  175. end
  176. def test_concat
  177. s = StringScanner.new('a')
  178. s.scan(/a/)
  179. s.concat 'b'
  180. assert_equal false, s.eos?
  181. assert_equal 'b', s.scan(/b/)
  182. assert_equal true, s.eos?
  183. s.concat 'c'
  184. assert_equal false, s.eos?
  185. assert_equal 'c', s.scan(/c/)
  186. assert_equal true, s.eos?
  187. end
  188. def test_scan
  189. s = StringScanner.new('stra strb strc', true)
  190. tmp = s.scan(/\w+/)
  191. assert_equal 'stra', tmp
  192. assert_equal false, tmp.tainted?
  193. tmp = s.scan(/\s+/)
  194. assert_equal ' ', tmp
  195. assert_equal false, tmp.tainted?
  196. assert_equal 'strb', s.scan(/\w+/)
  197. assert_equal ' ', s.scan(/\s+/)
  198. tmp = s.scan(/\w+/)
  199. assert_equal 'strc', tmp
  200. assert_equal false, tmp.tainted?
  201. assert_nil s.scan(/\w+/)
  202. assert_nil s.scan(/\w+/)
  203. str = 'stra strb strc'
  204. str.taint
  205. s = StringScanner.new(str, false)
  206. tmp = s.scan(/\w+/)
  207. assert_equal 'stra', tmp
  208. assert_equal true, tmp.tainted?
  209. tmp = s.scan(/\s+/)
  210. assert_equal ' ', tmp
  211. assert_equal true, tmp.tainted?
  212. assert_equal 'strb', s.scan(/\w+/)
  213. assert_equal ' ', s.scan(/\s+/)
  214. tmp = s.scan(/\w+/)
  215. assert_equal 'strc', tmp
  216. assert_equal true, tmp.tainted?
  217. assert_nil s.scan(/\w+/)
  218. assert_nil s.scan(/\w+/)
  219. s = StringScanner.new('test')
  220. s.scan(/te/)
  221. # This assumes #string does not duplicate string,
  222. # but it is implementation specific issue.
  223. # DO NOT RELY ON THIS FEATURE.
  224. s.string.replace ''
  225. # unspecified: assert_equal 2, s.pos
  226. assert_equal nil, s.scan(/test/)
  227. # [ruby-bugs:4361]
  228. s = StringScanner.new("")
  229. assert_equal "", s.scan(//)
  230. assert_equal "", s.scan(//)
  231. end
  232. def test_skip
  233. s = StringScanner.new('stra strb strc', true)
  234. assert_equal 4, s.skip(/\w+/)
  235. assert_equal 1, s.skip(/\s+/)
  236. assert_equal 4, s.skip(/\w+/)
  237. assert_equal 1, s.skip(/\s+/)
  238. assert_equal 4, s.skip(/\w+/)
  239. assert_nil s.skip(/\w+/)
  240. assert_nil s.skip(/\s+/)
  241. assert_equal true, s.eos?
  242. s = StringScanner.new('test')
  243. s.scan(/te/)
  244. s.string.replace ''
  245. assert_equal nil, s.skip(/./)
  246. # [ruby-bugs:4361]
  247. s = StringScanner.new("")
  248. assert_equal 0, s.skip(//)
  249. assert_equal 0, s.skip(//)
  250. end
  251. def test_getch
  252. s = StringScanner.new('abcde')
  253. assert_equal 'a', s.getch
  254. assert_equal 'b', s.getch
  255. assert_equal 'c', s.getch
  256. assert_equal 'd', s.getch
  257. assert_equal 'e', s.getch
  258. assert_nil s.getch
  259. str = 'abc'
  260. str.taint
  261. s = StringScanner.new(str)
  262. assert_equal true, s.getch.tainted?
  263. assert_equal true, s.getch.tainted?
  264. assert_equal true, s.getch.tainted?
  265. assert_nil s.getch
  266. s = StringScanner.new("\244\242".force_encoding("euc-jp"))
  267. assert_equal "\244\242".force_encoding("euc-jp"), s.getch
  268. assert_nil s.getch
  269. s = StringScanner.new('test')
  270. s.scan(/te/)
  271. s.string.replace ''
  272. assert_equal nil, s.getch
  273. end
  274. def test_get_byte
  275. s = StringScanner.new('abcde')
  276. assert_equal 'a', s.get_byte
  277. assert_equal 'b', s.get_byte
  278. assert_equal 'c', s.get_byte
  279. assert_equal 'd', s.get_byte
  280. assert_equal 'e', s.get_byte
  281. assert_nil s.get_byte
  282. assert_nil s.get_byte
  283. str = 'abc'
  284. str.taint
  285. s = StringScanner.new(str)
  286. assert_equal true, s.get_byte.tainted?
  287. assert_equal true, s.get_byte.tainted?
  288. assert_equal true, s.get_byte.tainted?
  289. assert_nil s.get_byte
  290. s = StringScanner.new("\244\242".force_encoding("euc-jp"))
  291. assert_equal "\244".force_encoding("euc-jp"), s.get_byte
  292. assert_equal "\242".force_encoding("euc-jp"), s.get_byte
  293. assert_nil s.get_byte
  294. s = StringScanner.new('test')
  295. s.scan(/te/)
  296. s.string.replace ''
  297. assert_equal nil, s.get_byte
  298. end
  299. def test_matched
  300. s = StringScanner.new('stra strb strc')
  301. s.scan(/\w+/)
  302. assert_equal 'stra', s.matched
  303. assert_equal false, s.matched.tainted?
  304. s.scan(/\s+/)
  305. assert_equal ' ', s.matched
  306. s.scan(/\w+/)
  307. assert_equal 'strb', s.matched
  308. s.scan(/\s+/)
  309. assert_equal ' ', s.matched
  310. s.scan(/\w+/)
  311. assert_equal 'strc', s.matched
  312. s.scan(/\w+/)
  313. assert_nil s.matched
  314. s.getch
  315. assert_nil s.matched
  316. s = StringScanner.new('stra strb strc')
  317. s.getch
  318. assert_equal 's', s.matched
  319. assert_equal false, s.matched.tainted?
  320. s.get_byte
  321. assert_equal 't', s.matched
  322. assert_equal 't', s.matched
  323. assert_equal false, s.matched.tainted?
  324. str = 'test'
  325. str.taint
  326. s = StringScanner.new(str)
  327. s.scan(/\w+/)
  328. assert_equal true, s.matched.tainted?
  329. assert_equal true, s.matched.tainted?
  330. end
  331. def test_AREF
  332. s = StringScanner.new('stra strb strc')
  333. s.scan(/\w+/)
  334. assert_nil s[-2]
  335. assert_equal 'stra', s[-1]
  336. assert_equal 'stra', s[0]
  337. assert_nil s[1]
  338. assert_equal false, s[-1].tainted?
  339. assert_equal false, s[0].tainted?
  340. s.skip(/\s+/)
  341. assert_nil s[-2]
  342. assert_equal ' ', s[-1]
  343. assert_equal ' ', s[0]
  344. assert_nil s[1]
  345. s.scan(/(s)t(r)b/)
  346. assert_nil s[-100]
  347. assert_nil s[-4]
  348. assert_equal 'strb', s[-3]
  349. assert_equal 's', s[-2]
  350. assert_equal 'r', s[-1]
  351. assert_equal 'strb', s[0]
  352. assert_equal 's', s[1]
  353. assert_equal 'r', s[2]
  354. assert_nil s[3]
  355. assert_nil s[100]
  356. s.scan(/\s+/)
  357. s.getch
  358. assert_nil s[-2]
  359. assert_equal 's', s[-1]
  360. assert_equal 's', s[0]
  361. assert_nil s[1]
  362. s.get_byte
  363. assert_nil s[-2]
  364. assert_equal 't', s[-1]
  365. assert_equal 't', s[0]
  366. assert_nil s[1]
  367. s.scan(/.*/)
  368. s.scan(/./)
  369. assert_nil s[0]
  370. assert_nil s[0]
  371. s = StringScanner.new("\244\242".force_encoding("euc-jp"))
  372. s.getch
  373. assert_equal "\244\242".force_encoding("euc-jp"), s[0]
  374. str = 'test'
  375. str.taint
  376. s = StringScanner.new(str)
  377. s.scan(/(t)(e)(s)(t)/)
  378. assert_equal true, s[0].tainted?
  379. assert_equal true, s[1].tainted?
  380. assert_equal true, s[2].tainted?
  381. assert_equal true, s[3].tainted?
  382. assert_equal true, s[4].tainted?
  383. end
  384. def test_pre_match
  385. s = StringScanner.new('a b c d e')
  386. s.scan(/\w/)
  387. assert_equal '', s.pre_match
  388. assert_equal false, s.pre_match.tainted?
  389. s.skip(/\s/)
  390. assert_equal 'a', s.pre_match
  391. assert_equal false, s.pre_match.tainted?
  392. s.scan(/\w/)
  393. assert_equal 'a ', s.pre_match
  394. s.scan_until(/c/)
  395. assert_equal 'a b ', s.pre_match
  396. s.getch
  397. assert_equal 'a b c', s.pre_match
  398. s.get_byte
  399. assert_equal 'a b c ', s.pre_match
  400. s.get_byte
  401. assert_equal 'a b c d', s.pre_match
  402. s.scan(/never match/)
  403. assert_nil s.pre_match
  404. str = 'test string'
  405. str.taint
  406. s = StringScanner.new(str)
  407. s.scan(/\w+/)
  408. assert_equal true, s.pre_match.tainted?
  409. s.scan(/\s+/)
  410. assert_equal true, s.pre_match.tainted?
  411. s.scan(/\w+/)
  412. assert_equal true, s.pre_match.tainted?
  413. end
  414. def test_post_match
  415. s = StringScanner.new('a b c d e')
  416. s.scan(/\w/)
  417. assert_equal ' b c d e', s.post_match
  418. s.skip(/\s/)
  419. assert_equal 'b c d e', s.post_match
  420. s.scan(/\w/)
  421. assert_equal ' c d e', s.post_match
  422. s.scan_until(/c/)
  423. assert_equal ' d e', s.post_match
  424. s.getch
  425. assert_equal 'd e', s.post_match
  426. s.get_byte
  427. assert_equal ' e', s.post_match
  428. s.get_byte
  429. assert_equal 'e', s.post_match
  430. s.scan(/never match/)
  431. assert_nil s.post_match
  432. s.scan(/./)
  433. assert_equal '', s.post_match
  434. s.scan(/./)
  435. assert_nil s.post_match
  436. str = 'test string'
  437. str.taint
  438. s = StringScanner.new(str)
  439. s.scan(/\w+/)
  440. assert_equal true, s.post_match.tainted?
  441. s.scan(/\s+/)
  442. assert_equal true, s.post_match.tainted?
  443. s.scan(/\w+/)
  444. assert_equal true, s.post_match.tainted?
  445. end
  446. def test_terminate
  447. s = StringScanner.new('ssss')
  448. s.getch
  449. s.terminate
  450. assert_equal true, s.eos?
  451. s.terminate
  452. assert_equal true, s.eos?
  453. end
  454. def test_reset
  455. s = StringScanner.new('ssss')
  456. s.getch
  457. s.reset
  458. assert_equal 0, s.pos
  459. s.scan(/\w+/)
  460. s.reset
  461. assert_equal 0, s.pos
  462. s.reset
  463. assert_equal 0, s.pos
  464. end
  465. def test_matched_size
  466. s = StringScanner.new('test string')
  467. assert_nil s.matched_size
  468. s.scan(/test/)
  469. assert_equal 4, s.matched_size
  470. assert_equal 4, s.matched_size
  471. s.scan(//)
  472. assert_equal 0, s.matched_size
  473. s.scan(/x/)
  474. assert_nil s.matched_size
  475. assert_nil s.matched_size
  476. s.terminate
  477. assert_nil s.matched_size
  478. s = StringScanner.new('test string')
  479. assert_nil s.matched_size
  480. s.scan(/test/)
  481. assert_equal 4, s.matched_size
  482. s.terminate
  483. assert_nil s.matched_size
  484. end
  485. def test_encoding
  486. ss = StringScanner.new("\xA1\xA2".force_encoding("euc-jp"))
  487. assert_equal(Encoding::EUC_JP, ss.scan(/./e).encoding)
  488. end
  489. def test_generic_regexp
  490. ss = StringScanner.new("\xA1\xA2".force_encoding("euc-jp"))
  491. t = ss.scan(/./)
  492. assert_equal("\xa1\xa2".force_encoding("euc-jp"), t)
  493. end
  494. def test_set_pos
  495. s = StringScanner.new("test string")
  496. s.pos = 7
  497. assert_equal("ring", s.rest)
  498. end
  499. def test_match_p
  500. s = StringScanner.new("test string")
  501. assert_equal(4, s.match?(/\w+/))
  502. assert_equal(4, s.match?(/\w+/))
  503. assert_equal(nil, s.match?(/\s+/))
  504. end
  505. def test_check
  506. s = StringScanner.new("Foo Bar Baz")
  507. assert_equal("Foo", s.check(/Foo/))
  508. assert_equal(0, s.pos)
  509. assert_equal("Foo", s.matched)
  510. assert_equal(nil, s.check(/Bar/))
  511. assert_equal(nil, s.matched)
  512. end
  513. def test_scan_full
  514. s = StringScanner.new("Foo Bar Baz")
  515. assert_equal(4, s.scan_full(/Foo /, false, false))
  516. assert_equal(0, s.pos)
  517. assert_equal(nil, s.scan_full(/Baz/, false, false))
  518. assert_equal("Foo ", s.scan_full(/Foo /, false, true))
  519. assert_equal(0, s.pos)
  520. assert_equal(nil, s.scan_full(/Baz/, false, false))
  521. assert_equal(4, s.scan_full(/Foo /, true, false))
  522. assert_equal(4, s.pos)
  523. assert_equal(nil, s.scan_full(/Baz /, false, false))
  524. assert_equal("Bar ", s.scan_full(/Bar /, true, true))
  525. assert_equal(8, s.pos)
  526. assert_equal(nil, s.scan_full(/az/, false, false))
  527. end
  528. def test_exist_p
  529. s = StringScanner.new("test string")
  530. assert_equal(3, s.exist?(/s/))
  531. assert_equal(0, s.pos)
  532. s.scan(/test/)
  533. assert_equal(2, s.exist?(/s/))
  534. assert_equal(4, s.pos)
  535. assert_equal(nil, s.exist?(/e/))
  536. end
  537. def test_skip_until
  538. s = StringScanner.new("Foo Bar Baz")
  539. assert_equal(3, s.skip_until(/Foo/))
  540. assert_equal(3, s.pos)
  541. assert_equal(4, s.skip_until(/Bar/))
  542. assert_equal(7, s.pos)
  543. assert_equal(nil, s.skip_until(/Qux/))
  544. end
  545. def test_check_until
  546. s = StringScanner.new("Foo Bar Baz")
  547. assert_equal("Foo", s.check_until(/Foo/))
  548. assert_equal(0, s.pos)
  549. assert_equal("Foo Bar", s.check_until(/Bar/))
  550. assert_equal(0, s.pos)
  551. assert_equal(nil, s.check_until(/Qux/))
  552. end
  553. def test_search_full
  554. s = StringScanner.new("Foo Bar Baz")
  555. assert_equal(8, s.search_full(/Bar /, false, false))
  556. assert_equal(0, s.pos)
  557. assert_equal("Foo Bar ", s.search_full(/Bar /, false, true))
  558. assert_equal(0, s.pos)
  559. assert_equal(8, s.search_full(/Bar /, true, false))
  560. assert_equal(8, s.pos)
  561. assert_equal("Baz", s.search_full(/az/, true, true))
  562. assert_equal(11, s.pos)
  563. end
  564. def test_peek
  565. s = StringScanner.new("test string")
  566. assert_equal("test st", s.peek(7))
  567. assert_equal("test st", s.peek(7))
  568. s.scan(/test/)
  569. assert_equal(" stri", s.peek(5))
  570. assert_equal(" string", s.peek(10))
  571. s.scan(/ string/)
  572. assert_equal("", s.peek(10))
  573. end
  574. def test_unscan
  575. s = StringScanner.new('test string')
  576. assert_equal("test", s.scan(/\w+/))
  577. s.unscan
  578. assert_equal("te", s.scan(/../))
  579. assert_equal(nil, s.scan(/\d/))
  580. assert_raise(ScanError) { s.unscan }
  581. end
  582. def test_rest
  583. s = StringScanner.new('test string')
  584. assert_equal("test string", s.rest)
  585. s.scan(/test/)
  586. assert_equal(" string", s.rest)
  587. s.scan(/ string/)
  588. assert_equal("", s.rest)
  589. s.scan(/ string/)
  590. end
  591. def test_rest_size
  592. s = StringScanner.new('test string')
  593. assert_equal(11, s.rest_size)
  594. s.scan(/test/)
  595. assert_equal(7, s.rest_size)
  596. s.scan(/ string/)
  597. assert_equal(0, s.rest_size)
  598. s.scan(/ string/)
  599. end
  600. def test_inspect2
  601. s = StringScanner.new('test string test')
  602. s.scan(/test strin/)
  603. assert_equal('#<StringScanner 10/16 "...strin" @ "g tes...">', s.inspect)
  604. end
  605. end