PageRenderTime 56ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/Bundles/eBundles/Ruby.tmbundle/Support/vendor/rcodetools/test/test_doc.rb

https://bitbucket.org/missdeer/luapack
Ruby | 444 lines | 377 code | 58 blank | 9 comment | 6 complexity | e0d5b5fbff9d11b66f1ade2bfcff753e MD5 | raw file
Possible License(s): AGPL-3.0, LGPL-2.0, CC-BY-SA-3.0, ISC, LGPL-2.1, GPL-2.0
  1. $: << ".." << "../lib"
  2. require 'rcodetools/doc'
  3. require 'test/unit'
  4. class TestXMPDocFilter < Test::Unit::TestCase
  5. def doit(code, lineno, column=nil, options={})
  6. xmp = XMPDocFilter.new options
  7. xmp.doc(code, lineno, column)
  8. end
  9. def test_instance_method__Array
  10. assert_equal("Array#length", doit("[].length", 1))
  11. end
  12. def test_instance_method__Fixnum
  13. assert_equal("Fixnum#to_s", doit("1.to_s", 1))
  14. end
  15. def test_instance_method__Enumerable
  16. assert_equal("Enumerable#each_with_index", doit("[].each_with_index", 1))
  17. end
  18. def test_instance_method__String
  19. assert_equal("String#length", doit("'a'.length", 1))
  20. end
  21. def test_class_method__IO_popen
  22. assert_equal("IO.popen", doit("IO::popen", 1))
  23. assert_equal("IO.popen", doit("IO.popen", 1))
  24. end
  25. def test_class_method__File_popen
  26. assert_equal("IO.popen", doit("File::popen", 1))
  27. assert_equal("IO.popen", doit("File.popen", 1))
  28. assert_equal("IO.popen", doit(<<EOC,2))
  29. $hoge = File
  30. $hoge.popen
  31. EOC
  32. end
  33. # not File::Stat.methods(false).include? 'new'
  34. def test_class_method__File_Stat_new
  35. assert_equal("File::Stat.new", doit("File::Stat.new", 1))
  36. assert_equal("File::Stat.new", doit("File::Stat::new", 1))
  37. assert_equal("File::Stat.new", doit("::File::Stat.new", 1))
  38. assert_equal("File::Stat.new", doit("::File::Stat::new", 1))
  39. end
  40. # IO.methods(false).include? 'new'
  41. def test_class_method__IO_new
  42. assert_equal("IO.new", doit("IO.new", 1))
  43. assert_equal("IO.new", doit("IO::new", 1))
  44. assert_equal("IO.new", doit("::IO.new", 1))
  45. assert_equal("IO.new", doit("::IO::new", 1))
  46. end
  47. def test_constant__File
  48. assert_equal("File", doit("File", 1))
  49. assert_equal("File", doit("::File", 1))
  50. end
  51. def test_constant__File_Stat
  52. assert_equal("File::Stat", doit("File::Stat", 1))
  53. assert_equal("File::Stat", doit("::File::Stat", 1))
  54. end
  55. def test_instance_method__File_Stat
  56. assert_equal("File::Stat#atime", doit(<<EOC,2))
  57. stat = File::Stat.new "#{__FILE__}"
  58. stat.atime
  59. EOC
  60. assert_equal("File::Stat#atime", doit(<<EOC,2))
  61. stat = ::File::Stat.new "#{__FILE__}"
  62. stat.atime
  63. EOC
  64. end
  65. def test_instance_method__Hoge_File_Stat_1
  66. assert_equal("Hoge::File::Stat#atime", doit(<<EOC,11))
  67. module Hoge
  68. module File
  69. class Stat
  70. def initialize(file)
  71. end
  72. def atime
  73. end
  74. end
  75. end
  76. stat = File::Stat.new "#{__FILE__}"
  77. stat.atime
  78. end
  79. EOC
  80. end
  81. def test_instance_method__Hoge_File_Stat_2
  82. assert_equal("File::Stat#atime", doit(<<EOC,11))
  83. module Hoge
  84. module File
  85. class Stat
  86. def initialize(file)
  87. end
  88. def atime
  89. end
  90. end
  91. end
  92. stat = ::File::Stat.new "#{__FILE__}"
  93. stat.atime
  94. end
  95. EOC
  96. end
  97. def test_bare_word__Kernel
  98. assert_equal("Kernel#print", doit("print", 1))
  99. end
  100. def test_bare_word__Module
  101. assert_equal("Kernel#print", doit(<<EOC, 2))
  102. module Foo
  103. print
  104. end
  105. EOC
  106. end
  107. def test_bare_word__class
  108. assert_equal("Kernel#print", doit(<<EOC, 2))
  109. class Foo
  110. print
  111. end
  112. EOC
  113. end
  114. def test_bare_word__Module_attr
  115. assert_equal("Module#attr", doit(<<EOC, 2))
  116. module Foo
  117. attr
  118. end
  119. EOC
  120. end
  121. def test_bare_word__Class_superclass
  122. assert_equal("Class#superclass", doit(<<EOC, 2))
  123. class Foo
  124. superclass
  125. end
  126. EOC
  127. end
  128. def test_bare_word__Class_object_id
  129. assert_equal("Object#object_id", doit(<<EOC, 2))
  130. class Foo
  131. object_id
  132. end
  133. EOC
  134. end
  135. def test_bare_word__self
  136. assert_equal("Foo#foo", doit(<<EOC, 3))
  137. class Foo
  138. def initialize
  139. foo
  140. end
  141. attr :foo
  142. new
  143. end
  144. EOC
  145. end
  146. def test_column
  147. assert_equal("Array#length", doit("[].length + 10", 1, 9))
  148. assert_equal("Array#length", doit("[].length + 10", 1, 5))
  149. end
  150. def test_method_chain__String
  151. assert_equal("String#length", doit('"a".upcase.capitalize.length', 1))
  152. assert_equal("String#capitalize", doit('"a".upcase.capitalize.length', 1, 21))
  153. end
  154. def test_method_chain__Fixnum
  155. assert_equal("String#length", doit('1.to_s.upcase.length', 1))
  156. assert_equal("String#upcase", doit('1.to_s.upcase.length', 1, 13))
  157. end
  158. def test_multi_line__do
  159. assert_equal("Enumerable#each_with_index", doit(<<EOC, 1, 16))
  160. [].each_with_index do |x|
  161. end
  162. EOC
  163. assert_equal("Enumerable#each_with_index", doit(<<EOC, 1, 16))
  164. [].each_with_index()do |x|
  165. end
  166. EOC
  167. assert_equal("Enumerable#each_with_index", doit(<<EOC, 1, 16))
  168. [].each_with_index do |x,y| end
  169. EOC
  170. assert_equal("Enumerable#each_with_index", doit(<<EOC, 1, 16))
  171. [1].each_with_index do |x,y| [].each do end end
  172. EOC
  173. assert_equal("Enumerable#each_with_index", doit(<<EOC, 1, 16))
  174. [].each_with_index ; do-do
  175. EOC
  176. end
  177. def test_multi_line__braces
  178. assert_equal("Enumerable#each_with_index", doit(<<EOC, 1, 16))
  179. [].each_with_index { |x|
  180. }
  181. EOC
  182. assert_equal("Enumerable#each_with_index", doit(<<EOC, 1, 16))
  183. [].each_with_index(){ |x|
  184. }
  185. EOC
  186. assert_equal("Enumerable#each_with_index", doit(<<EOC, 1, 16))
  187. [].each_with_index {|x,y| }
  188. EOC
  189. assert_equal("Enumerable#each_with_index", doit(<<EOC, 1, 16))
  190. [1].each_with_index {|x,y| [].each { }}
  191. EOC
  192. assert_equal("Enumerable#each_with_index", doit(<<EOC, 1, 20))
  193. { [1].each_with_index {|x,y| [].each { }},1}
  194. EOC
  195. end
  196. def test_multi_line__brackets
  197. assert_equal("Enumerable#each_with_index", doit(<<EOC, 1, 20))
  198. [ [1].each_with_index {|x,y| [].each { }},
  199. 1]
  200. EOC
  201. end
  202. def test_multi_line__parentheses
  203. assert_equal("Enumerable#each_with_index", doit(<<EOC, 1, 23))
  204. foo( [1].each_with_index {|x,y| [].each { }},
  205. 1)
  206. EOC
  207. =begin FIXME
  208. assert_equal("Enumerable#each_with_index", doit(<<EOC, 2, 23))
  209. foo( 1,
  210. [1].each_with_index {|x,y| [].each { }})
  211. EOC
  212. =end
  213. end
  214. def test_multi_line__control_structures__if
  215. assert_equal("String#length", doit(<<EOC, 1))
  216. if "a".length
  217. end
  218. EOC
  219. assert_equal("String#length", doit(<<EOC, 1, 8))
  220. "a".length if true
  221. EOC
  222. assert_equal("String#length", doit(<<EOC, 1, 8))
  223. "a".length ; if true
  224. 1
  225. end
  226. EOC
  227. assert_equal("String#length", doit(<<EOC, 1, 8))
  228. "a".length ;if true
  229. 1
  230. end
  231. EOC
  232. end
  233. def test_multi_line__control_structures__if_in_string
  234. assert_equal("String#length", doit(<<EOC, 1))
  235. "if a".length
  236. EOC
  237. assert_equal("String#length", doit(<<EOC, 1))
  238. 'if a'.length
  239. EOC
  240. assert_equal("String#length", doit(<<EOC, 1))
  241. `if a`.length
  242. EOC
  243. end
  244. def test_multi_line__control_structures__other_keywords
  245. assert_equal("String#length", doit(<<EOC, 1))
  246. unless "a".length
  247. end
  248. EOC
  249. assert_equal("String#length", doit(<<EOC, 1))
  250. while "a".length
  251. end
  252. EOC
  253. assert_equal("String#length", doit(<<EOC, 1))
  254. until "a".length
  255. end
  256. EOC
  257. assert_equal("String#split", doit(<<EOC, 1))
  258. for a in "a".split
  259. end
  260. EOC
  261. end
  262. def test_operator
  263. # +@ -@ is not supported
  264. %w[ | ^ & <=> == === =~ > >= < <= << >>
  265. + - * / % ** ~
  266. ].each do |op|
  267. ancestors_re = Fixnum.ancestors.map{|x|x.to_s}.join('|')
  268. assert_match(/^#{ancestors_re}##{Regexp.quote(op)}$/, doit("1 #{op} 2",1,2))
  269. end
  270. end
  271. def test_aref_aset__Array
  272. assert_equal("Array#[]", doit("[0][ 0 ]",1,4))
  273. assert_equal("Array#[]=", doit("[0][ 0 ]=10",1,4))
  274. assert_equal("Array#[]", doit("[0][0]",1,4))
  275. assert_equal("Array#[]=", doit("[0][0]=10",1,4))
  276. end
  277. def test_aref_aset__Object
  278. assert_equal("Array#[]", doit("Array.new(3)[ 0 ]",1,13))
  279. assert_equal("Array#[]=", doit("Array.new(3)[ 0 ]=10",1,13))
  280. assert_equal("Array#[]", doit("Array.new(3)[0]",1,13))
  281. assert_equal("Array#[]=", doit("Array.new(3)[0]=10",1,13))
  282. end
  283. def test_aref_aset__Fixnum
  284. assert_equal("Fixnum#[]", doit("0[ 0 ]",1,2))
  285. assert_equal("Fixnum#[]", doit("0[0]",1,2))
  286. end
  287. def test_aref_aset__String
  288. assert_equal("String#[]", doit("'a' + '[0]'[ 0 ]",1,12))
  289. assert_equal("String#[]", doit("'[0]'[ 0 ]",1,6))
  290. assert_equal("String#[]=", doit("'0'[ 0 ]=10",1,4))
  291. assert_equal("String#[]", doit("'[0]'[0]",1,6))
  292. assert_equal("String#[]=", doit("'0'[0]=10",1,4))
  293. end
  294. def test_phrase
  295. assert_equal("Array#uniq", doit('Array.new(3).uniq',1))
  296. assert_equal("Array#uniq", doit('Array.new(3).to_a.uniq',1))
  297. assert_equal("Array#uniq", doit('Array.new(3).map{|x| x.to_i}.uniq',1))
  298. assert_equal("Array#uniq", doit('[][0,(1+1)].uniq',1))
  299. end
  300. def test_percent__String
  301. assert_equal("String#length", doit('%!foo!.length',1))
  302. assert_equal("String#length", doit('%q!foo!.length',1))
  303. assert_equal("String#length", doit('%Q!foo!.length',1))
  304. assert_equal("String#length", doit('%x!foo!.length',1))
  305. assert_equal("String#length", doit('%{foo}.length',1))
  306. assert_equal("String#length", doit('%q{foo}.length',1))
  307. assert_equal("String#length", doit('%q!(!.length',1))
  308. assert_equal("String#length", doit('%Q!(!.length',1))
  309. assert_equal("String#length", doit('%x!(!.length',1))
  310. assert_equal("String#length", doit('%x{(}.length',1))
  311. assert_equal("String#length", doit('%{f(o)o}.length',1))
  312. assert_equal("String#length", doit('%{f{o}o}.length',1))
  313. assert_equal("String#length", doit('(%{f{o}o}+%!}x!).length',1))
  314. end
  315. def test_percent__Array
  316. assert_equal("Array#length", doit('%w!foo!.length',1))
  317. assert_equal("Array#length", doit('%W!foo!.length',1))
  318. assert_equal("Array#length", doit('%w{foo}.length',1))
  319. assert_equal("Array#length", doit('%W{foo}.length',1))
  320. assert_equal("Array#length", doit('%w!(!.length',1))
  321. assert_equal("Array#length", doit('%W!(!.length',1))
  322. assert_equal("Array#length", doit('%w{(}.length',1))
  323. assert_equal("Array#length", doit('%w{f(o)o}.length',1))
  324. assert_equal("Array#length", doit('%w{f{o}o}.length',1))
  325. assert_equal("Array#length", doit('(%W{f{o}o}+%w!}x!).length',1))
  326. end
  327. def test_percent__Regexp
  328. assert_equal("Regexp#kcode", doit('%r!foo!.kcode',1))
  329. assert_equal("Regexp#kcode", doit('%r{foo}.kcode',1))
  330. assert_equal("Regexp#kcode", doit('%r!(!.kcode',1))
  331. assert_equal("Regexp#kcode", doit('%r[(].kcode',1))
  332. assert_equal("Regexp#kcode", doit('%r<f(o)o>.kcode',1))
  333. end
  334. def test_percent__Symbol
  335. assert_equal("Symbol#id2name", doit('%s!foo!.id2name',1))
  336. assert_equal("Symbol#id2name", doit('%s{foo}.id2name',1))
  337. assert_equal("Symbol#id2name", doit('%s!(!.id2name',1))
  338. assert_equal("Symbol#id2name", doit('%s{(}.id2name',1))
  339. assert_equal("Symbol#id2name", doit('%s(f(o)o).id2name',1))
  340. end
  341. def test_bare_word__with_NoMethodError
  342. assert_equal("Module#module_function", doit(<<EOC, 3, nil, :ignore_NoMethodError=>true))
  343. module X
  344. xx # normally NoMethodError
  345. module_function
  346. end
  347. EOC
  348. end
  349. def test__syntax_error
  350. assert_raise(ProcessParticularLine::NewCodeError) do
  351. doit(<<EOC, 5, nil)
  352. end
  353. module X
  354. def x
  355. end
  356. module_function
  357. end
  358. EOC
  359. end
  360. end
  361. def test__runtime_error
  362. assert_raise(ProcessParticularLine::NewCodeError) do
  363. doit(<<EOC, 5, nil)
  364. __undefined_method__
  365. module X
  366. def x
  367. end
  368. module_function
  369. end
  370. EOC
  371. end
  372. end
  373. end
  374. class TestXMPRiFilter < Test::Unit::TestCase
  375. def doit(code, lineno, column=nil, options={})
  376. xmp = XMPRiFilter.new options
  377. xmp.doc(code, lineno, column)
  378. end
  379. def test_class_method__IO_popen
  380. assert_equal("ri 'IO::popen'", doit("IO::popen", 1))
  381. assert_equal("ri 'IO::popen'", doit("IO.popen", 1))
  382. end
  383. def test_instance_method__Array
  384. assert_equal("ri 'Array#length'", doit("[].length", 1))
  385. end
  386. end