PageRenderTime 31ms CodeModel.GetById 1ms RepoModel.GetById 1ms app.codeStats 0ms

/projects/jruby-1.7.3/test/externals/ruby1.9/ruby/test_parse.rb

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Ruby | 828 lines | 757 code | 70 blank | 1 comment | 0 complexity | 7f08da0af89ac9d8d8c181e21251faa7 MD5 | raw file
  1. require 'test/unit'
  2. require 'stringio'
  3. class TestParse < Test::Unit::TestCase
  4. def setup
  5. @verbose = $VERBOSE
  6. $VERBOSE = nil
  7. end
  8. def teardown
  9. $VERBOSE = @verbose
  10. end
  11. def test_else_without_rescue
  12. x = eval <<-END
  13. begin
  14. else
  15. 42
  16. end
  17. END
  18. assert_equal(42, x)
  19. end
  20. def test_alias_backref
  21. assert_raise(SyntaxError) do
  22. eval <<-END
  23. alias $foo $1
  24. END
  25. end
  26. end
  27. def test_command_call
  28. t = Object.new
  29. def t.foo(x); x; end
  30. a = false
  31. b = c = d = true
  32. assert_nothing_raised do
  33. eval <<-END
  34. a &&= t.foo 42
  35. b &&= t.foo 42
  36. c &&= t.foo nil
  37. d &&= t.foo false
  38. END
  39. end
  40. assert_equal([false, 42, nil, false], [a, b, c, d])
  41. a = 3
  42. assert_nothing_raised { eval("a &= t.foo 5") }
  43. assert_equal(1, a)
  44. a = [nil, nil, true, true]
  45. assert_nothing_raised do
  46. eval <<-END
  47. a[0] ||= t.foo 42
  48. a[1] &&= t.foo 42
  49. a[2] ||= t.foo 42
  50. a[3] &&= t.foo 42
  51. END
  52. end
  53. assert_equal([42, nil, true, 42], a)
  54. o = Object.new
  55. class << o
  56. attr_accessor :foo, :bar, :Foo, :Bar, :baz, :qux
  57. end
  58. o.foo = o.Foo = o::baz = nil
  59. o.bar = o.Bar = o::qux = 1
  60. assert_nothing_raised do
  61. eval <<-END
  62. o.foo ||= t.foo 42
  63. o.bar &&= t.foo 42
  64. o.Foo ||= t.foo 42
  65. o.Bar &&= t.foo 42
  66. o::baz ||= t.foo 42
  67. o::qux &&= t.foo 42
  68. END
  69. end
  70. assert_equal([42, 42], [o.foo, o.bar])
  71. assert_equal([42, 42], [o.Foo, o.Bar])
  72. assert_equal([42, 42], [o::baz, o::qux])
  73. assert_raise(SyntaxError) do
  74. eval <<-END
  75. $1 ||= t.foo 42
  76. END
  77. end
  78. def t.bar(x); x + yield; end
  79. a = b = nil
  80. assert_nothing_raised do
  81. eval <<-END
  82. a = t.bar "foo" do
  83. "bar"
  84. end.gsub "ob", "OB"
  85. b = t.bar "foo" do
  86. "bar"
  87. end::gsub "ob", "OB"
  88. END
  89. end
  90. assert_equal("foOBar", a)
  91. assert_equal("foOBar", b)
  92. a = nil
  93. assert_nothing_raised do
  94. t.instance_eval <<-END
  95. a = bar "foo" do "bar" end
  96. END
  97. end
  98. assert_equal("foobar", a)
  99. a = nil
  100. assert_nothing_raised do
  101. eval <<-END
  102. a = t::bar "foo" do "bar" end
  103. END
  104. end
  105. assert_equal("foobar", a)
  106. def t.baz(*r)
  107. @baz = r + (block_given? ? [yield] : [])
  108. end
  109. assert_nothing_raised do
  110. t.instance_eval "baz (1), 2"
  111. end
  112. assert_equal([1, 2], t.instance_eval { @baz })
  113. end
  114. def test_mlhs_node
  115. c = Class.new
  116. class << c
  117. attr_accessor :foo, :bar, :Foo, :Bar
  118. FOO = BAR = nil
  119. end
  120. assert_nothing_raised do
  121. eval <<-END
  122. c::foo, c::bar = 1, 2
  123. c.Foo, c.Bar = 1, 2
  124. c::FOO, c::BAR = 1, 2
  125. END
  126. end
  127. assert_equal([1, 2], [c::foo, c::bar])
  128. assert_equal([1, 2], [c.Foo, c.Bar])
  129. assert_equal([1, 2], [c::FOO, c::BAR])
  130. end
  131. def test_dynamic_constant_assignment
  132. assert_raise(SyntaxError) do
  133. Object.new.instance_eval <<-END
  134. def foo
  135. self::FOO, self::BAR = 1, 2
  136. ::FOO, ::BAR = 1, 2
  137. end
  138. END
  139. end
  140. assert_raise(SyntaxError) do
  141. eval <<-END
  142. $1, $2 = 1, 2
  143. END
  144. end
  145. assert_raise(SyntaxError) do
  146. Object.new.instance_eval <<-END
  147. def foo
  148. ::FOO = 1
  149. end
  150. END
  151. end
  152. c = Class.new
  153. assert_raise(SyntaxError) do
  154. eval <<-END
  155. c::FOO &= 1
  156. ::FOO &= 1
  157. END
  158. end
  159. c = Class.new
  160. assert_raise(SyntaxError) do
  161. eval <<-END
  162. $1 &= 1
  163. END
  164. end
  165. end
  166. def test_class_module
  167. assert_raise(SyntaxError) do
  168. eval <<-END
  169. class foo; end
  170. END
  171. end
  172. assert_raise(SyntaxError) do
  173. eval <<-END
  174. def foo
  175. class Foo; end
  176. module Bar; end
  177. end
  178. END
  179. end
  180. assert_raise(SyntaxError) do
  181. eval <<-END
  182. class Foo Bar; end
  183. END
  184. end
  185. end
  186. def test_op_name
  187. o = Object.new
  188. def o.>(x); x; end
  189. def o./(x); x; end
  190. a = nil
  191. assert_nothing_raised do
  192. o.instance_eval <<-END
  193. undef >, /
  194. END
  195. end
  196. end
  197. def test_arg
  198. o = Object.new
  199. class << o
  200. attr_accessor :foo, :bar, :Foo, :Bar, :baz, :qux
  201. end
  202. o.foo = o.Foo = o::baz = nil
  203. o.bar = o.Bar = o::qux = 1
  204. assert_nothing_raised do
  205. eval <<-END
  206. o.foo ||= 42
  207. o.bar &&= 42
  208. o.Foo ||= 42
  209. o.Bar &&= 42
  210. o::baz ||= 42
  211. o::qux &&= 42
  212. END
  213. end
  214. assert_equal([42, 42], [o.foo, o.bar])
  215. assert_equal([42, 42], [o.Foo, o.Bar])
  216. assert_equal([42, 42], [o::baz, o::qux])
  217. a = nil
  218. assert_nothing_raised do
  219. eval <<-END
  220. a = -2.0 ** 2
  221. END
  222. end
  223. assert_equal(-4.0, a)
  224. end
  225. def test_block_variable
  226. o = Object.new
  227. def o.foo(*r); yield(*r); end
  228. a = nil
  229. assert_nothing_raised do
  230. eval <<-END
  231. o.foo 1 do|; a| a = 42 end
  232. END
  233. end
  234. assert_nil(a)
  235. end
  236. def test_bad_arg
  237. assert_raise(SyntaxError) do
  238. eval <<-END
  239. def foo(FOO); end
  240. END
  241. end
  242. assert_raise(SyntaxError) do
  243. eval <<-END
  244. def foo(@foo); end
  245. END
  246. end
  247. assert_raise(SyntaxError) do
  248. eval <<-END
  249. def foo($foo); end
  250. END
  251. end
  252. assert_raise(SyntaxError) do
  253. eval <<-END
  254. def foo(@@foo); end
  255. END
  256. end
  257. o = Object.new
  258. def o.foo(*r); yield(*r); end
  259. assert_raise(SyntaxError) do
  260. eval <<-END
  261. o.foo 1 {|; @a| @a = 42 }
  262. END
  263. end
  264. end
  265. def test_do_lambda
  266. a = b = nil
  267. assert_nothing_raised do
  268. eval <<-END
  269. a = -> do
  270. b = 42
  271. end
  272. END
  273. end
  274. a.call
  275. assert_equal(42, b)
  276. end
  277. def test_block_call_colon2
  278. o = Object.new
  279. def o.foo(x); x + yield; end
  280. a = b = nil
  281. assert_nothing_raised do
  282. o.instance_eval <<-END
  283. a = foo 1 do 42 end.to_s
  284. b = foo 1 do 42 end::to_s
  285. END
  286. end
  287. assert_equal("43", a)
  288. assert_equal("43", b)
  289. end
  290. def test_call_method
  291. a = b = nil
  292. assert_nothing_raised do
  293. eval <<-END
  294. a = proc {|x| x + "bar" }.("foo")
  295. b = proc {|x| x + "bar" }::("foo")
  296. END
  297. end
  298. assert_equal("foobar", a)
  299. assert_equal("foobar", b)
  300. end
  301. def test_xstring
  302. assert_raise(Errno::ENOENT) do
  303. eval("``")
  304. end
  305. end
  306. def test_words
  307. assert_equal([], %W( ))
  308. end
  309. def test_dstr
  310. @@foo = 1
  311. assert_equal("foo 1 bar", "foo #@@foo bar")
  312. "1" =~ /(.)/
  313. assert_equal("foo 1 bar", "foo #$1 bar")
  314. end
  315. def test_dsym
  316. assert_nothing_raised { eval(':""') }
  317. end
  318. def test_arg2
  319. o = Object.new
  320. assert_nothing_raised do
  321. eval <<-END
  322. def o.foo(a=42,*r,z,&b); b.call(r.inject(a*1000+z*100, :+)); end
  323. END
  324. end
  325. assert_equal(-1405, o.foo(1,2,3,4) {|x| -x })
  326. assert_equal(-1302, o.foo(1,2,3) {|x| -x })
  327. assert_equal(-1200, o.foo(1,2) {|x| -x })
  328. assert_equal(-42100, o.foo(1) {|x| -x })
  329. assert_raise(ArgumentError) { o.foo() }
  330. assert_nothing_raised do
  331. eval <<-END
  332. def o.foo(a=42,z,&b); b.call(a*1000+z*100); end
  333. END
  334. end
  335. assert_equal(-1200, o.foo(1,2) {|x| -x } )
  336. assert_equal(-42100, o.foo(1) {|x| -x } )
  337. assert_raise(ArgumentError) { o.foo() }
  338. assert_nothing_raised do
  339. eval <<-END
  340. def o.foo(*r,z,&b); b.call(r.inject(z*100, :+)); end
  341. END
  342. end
  343. assert_equal(-303, o.foo(1,2,3) {|x| -x } )
  344. assert_equal(-201, o.foo(1,2) {|x| -x } )
  345. assert_equal(-100, o.foo(1) {|x| -x } )
  346. assert_raise(ArgumentError) { o.foo() }
  347. end
  348. def test_duplicate_argument
  349. assert_raise(SyntaxError) do
  350. eval <<-END
  351. 1.times {|&b?| }
  352. END
  353. end
  354. assert_raise(SyntaxError) do
  355. eval <<-END
  356. 1.times {|a, a|}
  357. END
  358. end
  359. assert_raise(SyntaxError) do
  360. eval <<-END
  361. def foo(a, a); end
  362. END
  363. end
  364. end
  365. def test_define_singleton_error
  366. assert_raise(SyntaxError) do
  367. eval <<-END
  368. def ("foo").foo; end
  369. END
  370. end
  371. end
  372. def test_backquote
  373. t = Object.new
  374. assert_nothing_raised do
  375. eval <<-END
  376. def t.`(x); "foo" + x + "bar"; end
  377. END
  378. end
  379. a = b = nil
  380. assert_nothing_raised do
  381. eval <<-END
  382. a = t.` "zzz"
  383. 1.times {|;z| t.` ("zzz") }
  384. END
  385. t.instance_eval <<-END
  386. b = `zzz`
  387. END
  388. end
  389. assert_equal("foozzzbar", a)
  390. assert_equal("foozzzbar", b)
  391. end
  392. def test_carrige_return
  393. assert_equal(2, eval("1 +\r\n1"))
  394. end
  395. def test_string
  396. assert_raise(SyntaxError) do
  397. eval '"\xg1"'
  398. end
  399. assert_raise(SyntaxError) do
  400. eval '"\u{1234"'
  401. end
  402. assert_raise(SyntaxError) do
  403. eval '"\M1"'
  404. end
  405. assert_raise(SyntaxError) do
  406. eval '"\C1"'
  407. end
  408. assert_equal("\x81", eval('"\C-\M-a"'))
  409. assert_equal("\177", eval('"\c?"'))
  410. end
  411. def test_question
  412. assert_raise(SyntaxError) { eval('?') }
  413. assert_raise(SyntaxError) { eval('? ') }
  414. assert_raise(SyntaxError) { eval("?\n") }
  415. assert_raise(SyntaxError) { eval("?\t") }
  416. assert_raise(SyntaxError) { eval("?\v") }
  417. assert_raise(SyntaxError) { eval("?\r") }
  418. assert_raise(SyntaxError) { eval("?\f") }
  419. assert_equal("\u{1234}", eval("?\u{1234}"))
  420. assert_equal("\u{1234}", eval('?\u{1234}'))
  421. end
  422. def test_percent
  423. assert_equal(:foo, eval('%s(foo)'))
  424. assert_raise(SyntaxError) { eval('%s') }
  425. assert_raise(SyntaxError) { eval('%ss') }
  426. assert_raise(SyntaxError) { eval('%z()') }
  427. end
  428. def test_symbol
  429. bug = '[ruby-dev:41447]'
  430. sym = "foo\0bar".to_sym
  431. assert_nothing_raised(SyntaxError, bug) do
  432. assert_equal(sym, eval(":'foo\0bar'"))
  433. end
  434. assert_nothing_raised(SyntaxError, bug) do
  435. assert_equal(sym, eval(':"foo\u0000bar"'))
  436. end
  437. assert_nothing_raised(SyntaxError, bug) do
  438. assert_equal(sym, eval(':"foo\u{0}bar"'))
  439. end
  440. assert_raise(SyntaxError) do
  441. eval ':"foo\u{}bar"'
  442. end
  443. end
  444. def test_parse_string
  445. assert_raise(SyntaxError) do
  446. eval <<-END
  447. /
  448. END
  449. end
  450. end
  451. def test_here_document
  452. x = nil
  453. assert_raise(SyntaxError) do
  454. eval %Q(
  455. <\<FOO
  456. )
  457. end
  458. assert_raise(SyntaxError) do
  459. eval %q(
  460. <<FOO
  461. #$
  462. FOO
  463. )
  464. end
  465. assert_raise(SyntaxError) do
  466. eval %Q(
  467. <\<\"
  468. )
  469. end
  470. assert_raise(SyntaxError) do
  471. eval %q(
  472. <<``
  473. )
  474. end
  475. assert_raise(SyntaxError) do
  476. eval %q(
  477. <<--
  478. )
  479. end
  480. assert_raise(SyntaxError) do
  481. eval %q(
  482. <<FOO
  483. #$
  484. foo
  485. FOO
  486. )
  487. end
  488. assert_nothing_raised do
  489. eval "x = <<""FOO\r\n1\r\nFOO"
  490. end
  491. assert_equal("1\n", x)
  492. end
  493. def test_magic_comment
  494. x = nil
  495. assert_nothing_raised do
  496. eval <<-END
  497. # coding = utf-8
  498. x = __ENCODING__
  499. END
  500. end
  501. assert_equal(Encoding.find("UTF-8"), x)
  502. assert_raise(ArgumentError) do
  503. eval <<-END
  504. # coding = foobarbazquxquux_dummy_enconding
  505. x = __ENCODING__
  506. END
  507. end
  508. end
  509. def test_utf8_bom
  510. x = nil
  511. assert_nothing_raised do
  512. eval "\xef\xbb\xbf x = __ENCODING__"
  513. end
  514. assert_equal(Encoding.find("UTF-8"), x)
  515. assert_raise(NameError) { eval "\xef" }
  516. end
  517. def test_dot_in_next_line
  518. x = nil
  519. assert_nothing_raised do
  520. eval <<-END
  521. x = 1
  522. .to_s
  523. END
  524. end
  525. assert_equal("1", x)
  526. end
  527. def test_pow_asgn
  528. x = 3
  529. assert_nothing_raised { eval("x **= 2") }
  530. assert_equal(9, x)
  531. end
  532. def test_embedded_rd
  533. assert_raise(SyntaxError) do
  534. eval <<-END
  535. =begin
  536. END
  537. end
  538. end
  539. def test_float
  540. assert_equal(1.0/0, eval("1e10000"))
  541. assert_raise(SyntaxError) { eval('1_E') }
  542. assert_raise(SyntaxError) { eval('1E1E1') }
  543. end
  544. def test_global_variable
  545. assert_equal(nil, eval('$-x'))
  546. assert_equal(nil, eval('alias $preserve_last_match $&'))
  547. assert_equal(nil, eval('alias $& $test_parse_foobarbazqux'))
  548. $test_parse_foobarbazqux = nil
  549. assert_equal(nil, $&)
  550. assert_equal(nil, eval('alias $& $preserve_last_match'))
  551. assert_raise(SyntaxError) { eval('$#') }
  552. end
  553. def test_invalid_instance_variable
  554. assert_raise(SyntaxError) { eval('@#') }
  555. end
  556. def test_invalid_class_variable
  557. assert_raise(SyntaxError) { eval('@@1') }
  558. end
  559. def test_invalid_char
  560. x = 1
  561. assert_equal(1, eval("\x01x"))
  562. assert_equal(nil, eval("\x04x"))
  563. end
  564. def test_literal_concat
  565. x = "baz"
  566. assert_equal("foobarbaz", eval('"foo" "bar#{x}"'))
  567. end
  568. def test_unassignable
  569. assert_raise(SyntaxError) do
  570. eval %q(self = 1)
  571. end
  572. assert_raise(SyntaxError) do
  573. eval %q(nil = 1)
  574. end
  575. assert_raise(SyntaxError) do
  576. eval %q(true = 1)
  577. end
  578. assert_raise(SyntaxError) do
  579. eval %q(false = 1)
  580. end
  581. assert_raise(SyntaxError) do
  582. eval %q(__FILE__ = 1)
  583. end
  584. assert_raise(SyntaxError) do
  585. eval %q(__LINE__ = 1)
  586. end
  587. assert_raise(SyntaxError) do
  588. eval %q(__ENCODING__ = 1)
  589. end
  590. assert_raise(SyntaxError) do
  591. eval <<-END
  592. def foo
  593. FOO = 1
  594. end
  595. END
  596. end
  597. end
  598. def test_block_dup
  599. assert_raise(SyntaxError) do
  600. eval <<-END
  601. foo(&proc{}) {}
  602. END
  603. end
  604. end
  605. def test_set_backref
  606. assert_raise(SyntaxError) do
  607. eval <<-END
  608. $& = 1
  609. END
  610. end
  611. end
  612. def test_arg_concat
  613. o = Object.new
  614. class << o; self; end.instance_eval do
  615. define_method(:[]=) {|*r, &b| b.call(r) }
  616. end
  617. r = nil
  618. assert_nothing_raised do
  619. eval <<-END
  620. o[&proc{|x| r = x }] = 1
  621. END
  622. end
  623. assert_equal([1], r)
  624. end
  625. def test_void_expr_stmts_value
  626. # This test checks if void contexts are warned correctly.
  627. # Thus, warnings MUST NOT be suppressed.
  628. $VERBOSE = true
  629. stderr = $stderr
  630. $stderr = StringIO.new("")
  631. x = 1
  632. assert_nil eval("x; nil")
  633. assert_nil eval("1+1; nil")
  634. assert_nil eval("TestParse; nil")
  635. assert_nil eval("::TestParse; nil")
  636. assert_nil eval("x..x; nil")
  637. assert_nil eval("x...x; nil")
  638. assert_nil eval("self; nil")
  639. assert_nil eval("nil; nil")
  640. assert_nil eval("true; nil")
  641. assert_nil eval("false; nil")
  642. assert_nil eval("defined?(1); nil")
  643. assert_raise(SyntaxError) do
  644. eval %q(1; next; 2)
  645. end
  646. o = Object.new
  647. assert_nothing_raised do
  648. eval <<-END
  649. x = def o.foo; end
  650. END
  651. end
  652. assert_equal($stderr.string.lines.to_a.size, 14)
  653. $stderr = stderr
  654. end
  655. def test_assign_in_conditional
  656. assert_raise(SyntaxError) do
  657. eval <<-END
  658. (x, y = 1, 2) ? 1 : 2
  659. END
  660. end
  661. assert_nothing_raised do
  662. eval <<-END
  663. if @x = true
  664. 1
  665. else
  666. 2
  667. end
  668. END
  669. end
  670. end
  671. def test_literal_in_conditional
  672. assert_nothing_raised do
  673. eval <<-END
  674. "foo" ? 1 : 2
  675. END
  676. end
  677. assert_nothing_raised do
  678. x = "bar"
  679. eval <<-END
  680. /foo#{x}baz/ ? 1 : 2
  681. END
  682. end
  683. assert_nothing_raised do
  684. eval <<-END
  685. (true..false) ? 1 : 2
  686. END
  687. end
  688. assert_nothing_raised do
  689. eval <<-END
  690. ("foo".."bar") ? 1 : 2
  691. END
  692. end
  693. assert_nothing_raised do
  694. x = "bar"
  695. eval <<-END
  696. :"foo#{"x"}baz" ? 1 : 2
  697. END
  698. end
  699. end
  700. def test_no_blockarg
  701. assert_raise(SyntaxError) do
  702. eval <<-END
  703. yield(&:+)
  704. END
  705. end
  706. end
  707. def test_intern
  708. assert_equal(':""', ''.intern.inspect)
  709. assert_equal(':$foo', '$foo'.intern.inspect)
  710. assert_equal(':"!foo"', '!foo'.intern.inspect)
  711. assert_equal(':"foo=="', "foo==".intern.inspect)
  712. end
  713. def test_all_symbols
  714. x = Symbol.all_symbols
  715. assert_kind_of(Array, x)
  716. assert(x.all? {|s| s.is_a?(Symbol) })
  717. end
  718. def test_is_class_id
  719. c = Class.new
  720. assert_raise(NameError) do
  721. c.instance_eval { remove_class_variable(:@var) }
  722. end
  723. end
  724. end