PageRenderTime 53ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/Support/test/cases/as3/parsers/test_property_inspector.rb

http://github.com/simongregory/actionscript3-tmbundle
Ruby | 544 lines | 340 code | 169 blank | 35 comment | 0 complexity | 81829a2a2740edd95aadd9e21332c697 MD5 | raw file
  1. #!/usr/bin/env ruby18 -wKU
  2. # encoding: utf-8
  3. ################################################################################
  4. #
  5. # Copyright 2009-2010 Simon Gregory
  6. #
  7. # This program is free software: you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation, either version 3 of the License, or
  10. # (at your option) any later version.
  11. #
  12. # This program is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  19. #
  20. ################################################################################
  21. require "test/unit"
  22. require "as3/parsers/property_inspector"
  23. class TestPropertyInspector < Test::Unit::TestCase
  24. # ==========================================================================
  25. # = WARNING - LEAVE INDENTATION AS IT IS FOR LINE INDEXES TO WORK PROPERLY =
  26. # ==========================================================================
  27. # ========================
  28. # = property_chain Tests =
  29. # ========================
  30. def test_property
  31. ENV['TM_SCOPE'] = 'source.actionscript.3'
  32. ENV['TM_CURRENT_LINE'] = <<-EOF
  33. basicProperty.
  34. EOF
  35. ENV['TM_LINE_INDEX'] = '19'
  36. assert_equal 'basicProperty', PropertyInspector.property_chain
  37. ENV['TM_LINE_INDEX'] = '20'
  38. assert_equal 'basicProperty', PropertyInspector.property_chain
  39. ENV['TM_LINE_INDEX'] = '0'
  40. assert_equal nil, PropertyInspector.property_chain
  41. ENV['TM_LINE_INDEX'] = '5'
  42. assert_equal nil, PropertyInspector.property_chain
  43. ENV['TM_LINE_INDEX'] = '47'
  44. assert_equal nil, PropertyInspector.property_chain
  45. end
  46. def test_method
  47. ENV['TM_SCOPE'] = 'source.actionscript.3'
  48. ENV['TM_LINE_INDEX'] = '20'
  49. ENV['TM_CURRENT_LINE'] = <<-EOF
  50. simpleMethod()
  51. EOF
  52. assert_equal 'simpleMethod', PropertyInspector.property_chain
  53. end
  54. def test_method_with_basic_parameters
  55. ENV['TM_SCOPE'] = 'source.actionscript.3'
  56. ENV['TM_LINE_INDEX'] = '47'
  57. ENV['TM_CURRENT_LINE'] = <<-EOF
  58. parameterisedMethodCall( "hello", world )
  59. EOF
  60. assert_equal 'parameterisedMethodCall', PropertyInspector.property_chain
  61. end
  62. def test_method_with_nested_parameters
  63. ENV['TM_SCOPE'] = 'source.actionscript.3'
  64. ENV['TM_LINE_INDEX'] = '60'
  65. ENV['TM_CURRENT_LINE'] = <<-EOF
  66. paramaterisedMethodCall( ["hello" , 'world' ], foo() )
  67. EOF
  68. assert_equal 'paramaterisedMethodCall', PropertyInspector.property_chain
  69. end
  70. def test_property_chain
  71. ENV['TM_SCOPE'] = 'source.actionscript.3'
  72. ENV['TM_CURRENT_LINE'] = <<-EOF
  73. one.two().three.four( TypeCast(five) )
  74. EOF
  75. ENV['TM_LINE_INDEX'] = '26'
  76. assert_equal 'one.two.three.four', PropertyInspector.property_chain
  77. ENV['TM_LINE_INDEX'] = '44'
  78. assert_equal 'one.two.three.four', PropertyInspector.property_chain
  79. ENV['TM_LINE_INDEX'] = '42'
  80. assert_equal 'TypeCast', PropertyInspector.property_chain
  81. end
  82. def test_as_cast
  83. ENV['TM_SCOPE'] = 'source.actionscript.3'
  84. ENV['TM_LINE_INDEX'] = '24'
  85. ENV['TM_CURRENT_LINE'] = <<-EOF
  86. ( hello as World )
  87. EOF
  88. assert_equal 'World', PropertyInspector.property_chain
  89. end
  90. def test_with_nested_casting
  91. ENV['TM_SCOPE'] = 'source.actionscript.3'
  92. ENV['TM_LINE_INDEX'] = '35'
  93. ENV['TM_CURRENT_LINE'] = <<-EOF
  94. a.big.( hello as World ).here
  95. EOF
  96. assert_equal 'a.big.World.here', PropertyInspector.property_chain
  97. end
  98. def test_with_nested_comments
  99. ENV['TM_SCOPE'] = 'source.actionscript.3'
  100. ENV['TM_LINE_INDEX'] = '54'
  101. ENV['TM_CURRENT_LINE'] = <<-EOF
  102. doSomething( /* with some (annoying) content*/ )
  103. EOF
  104. assert_equal 'doSomething', PropertyInspector.property_chain
  105. end
  106. def test_new_constructor
  107. ENV['TM_SCOPE'] = 'source.actionscript.3'
  108. ENV['TM_CURRENT_LINE'] = <<-EOF
  109. var e:TypicalEvent = new TypicalEvent( TypicalEvent.SAY_HELLO );
  110. EOF
  111. ENV['TM_LINE_INDEX'] = '11'
  112. assert_equal 'e', PropertyInspector.property_chain
  113. ENV['TM_LINE_INDEX'] = '69'
  114. assert_equal 'TypicalEvent', PropertyInspector.property_chain
  115. ENV['TM_LINE_INDEX'] = '58'
  116. assert_equal 'TypicalEvent', PropertyInspector.property_chain
  117. ENV['TM_LINE_INDEX'] = '67'
  118. assert_equal 'TypicalEvent.SAY_HELLO', PropertyInspector.property_chain
  119. end
  120. def test_multliline_method
  121. ENV['TM_SCOPE'] = 'source.actionscript.3'
  122. ENV['TM_CURRENT_LINE'] = <<-EOF
  123. "foo" ).here
  124. EOF
  125. ENV['TM_LINE_INDEX'] = '18'
  126. assert_equal '.here', PropertyInspector.property_chain
  127. ENV['TM_LINE_INDEX'] = '13'
  128. assert_equal nil, PropertyInspector.property_chain
  129. ENV['TM_CURRENT_LINE'] = <<-EOF
  130. (navigationController as NavigationController).length).
  131. EOF
  132. ENV['TM_LINE_INDEX'] = '53'
  133. assert_equal "NavigationController", PropertyInspector.property_chain
  134. ENV['TM_LINE_INDEX'] = '61'
  135. assert_equal nil, PropertyInspector.property_chain
  136. end
  137. def test_blank
  138. ENV['TM_SCOPE'] = 'source.actionscript.3'
  139. ENV['TM_CURRENT_LINE'] = <<-EOF
  140. EOF
  141. ENV['TM_LINE_INDEX'] = '0'
  142. assert_equal "this", PropertyInspector.property_chain
  143. ENV['TM_LINE_INDEX'] = '20'
  144. assert_equal "this", PropertyInspector.property_chain
  145. ENV['TM_LINE_INDEX'] = '40'
  146. assert_equal "this", PropertyInspector.property_chain
  147. end
  148. def test_no_whitespace
  149. ENV['TM_SCOPE'] = 'source.actionscript.3'
  150. ENV['TM_CURRENT_LINE'] = <<-EOF
  151. _menu.removeEventListener(MenuEvent,handleMenuClosed);
  152. EOF
  153. ENV['TM_LINE_INDEX'] = '12'
  154. assert_equal "_menu", PropertyInspector.property_chain
  155. ENV['TM_LINE_INDEX'] = '31'
  156. assert_equal "_menu.removeEventListener", PropertyInspector.property_chain
  157. ENV['TM_LINE_INDEX'] = '41'
  158. assert_equal "MenuEvent", PropertyInspector.property_chain
  159. ENV['TM_LINE_INDEX'] = '42'
  160. assert_equal nil, PropertyInspector.property_chain
  161. ENV['TM_LINE_INDEX'] = '58'
  162. assert_equal "handleMenuClosed", PropertyInspector.property_chain
  163. ENV['TM_LINE_INDEX'] = '59'
  164. assert_equal "_menu.removeEventListener", PropertyInspector.property_chain
  165. ENV['TM_LINE_INDEX'] = '60'
  166. assert_equal nil, PropertyInspector.property_chain
  167. end
  168. def test_within_array
  169. ENV['TM_SCOPE'] = 'source.actionscript.3'
  170. ENV['TM_CURRENT_LINE'] = <<-EOF
  171. menuHeader.filters = [FilterCollection.];
  172. EOF
  173. ENV['TM_LINE_INDEX'] = '45'
  174. assert_equal "FilterCollection", PropertyInspector.property_chain
  175. end
  176. # ===================
  177. # = is_static tests =
  178. # ===================
  179. def test_static
  180. ENV['TM_SCOPE'] = 'source.actionscript.3'
  181. ENV['TM_CURRENT_LINE'] = <<-EOF
  182. Math. notStatic Math(). new Bottle().cider
  183. EOF
  184. ENV['TM_LINE_INDEX'] = '11'
  185. assert_equal true, PropertyInspector.is_static
  186. ENV['TM_LINE_INDEX'] = '10'
  187. assert_equal true, PropertyInspector.is_static
  188. ENV['TM_LINE_INDEX'] = '21'
  189. assert_equal false, PropertyInspector.is_static
  190. ENV['TM_LINE_INDEX'] = '24'
  191. assert_equal false, PropertyInspector.is_static
  192. ENV['TM_LINE_INDEX'] = '33'
  193. assert_equal false, PropertyInspector.is_static
  194. ENV['TM_LINE_INDEX'] = '31'
  195. assert_equal false, PropertyInspector.is_static
  196. ENV['TM_LINE_INDEX'] = '30'
  197. assert_equal true, PropertyInspector.is_static
  198. ENV['TM_LINE_INDEX'] = '46'
  199. assert_equal false, PropertyInspector.is_static
  200. ENV['TM_LINE_INDEX'] = '54'
  201. assert_equal false, PropertyInspector.is_static
  202. end
  203. # ====================
  204. # = insert_dot tests =
  205. # ====================
  206. def test_insert_dot
  207. ENV['TM_SCOPE'] = 'source.actionscript.3'
  208. ENV['TM_CURRENT_LINE'] = <<-EOF
  209. property. property
  210. EOF
  211. ENV['TM_LINE_INDEX'] = '6'
  212. assert_equal false, PropertyInspector.insert_dot
  213. ENV['TM_LINE_INDEX'] = '24'
  214. assert_equal true, PropertyInspector.insert_dot
  215. ENV['TM_LINE_INDEX'] = '15'
  216. assert_equal false, PropertyInspector.insert_dot
  217. ENV['TM_LINE_INDEX'] = '30'
  218. assert_equal false, PropertyInspector.insert_dot
  219. end
  220. # =================
  221. # = capture tests =
  222. # =================
  223. def test_captures
  224. ENV['TM_SCOPE'] = 'following.dot'
  225. ENV['TM_CURRENT_LINE'] = <<-EOF
  226. StaticExample.
  227. EOF
  228. ENV['TM_LINE_INDEX'] = '20'
  229. c = PropertyInspector.capture
  230. assert_equal 'StaticExample', c[:ref]
  231. assert_equal true, c[:is_static]
  232. assert_equal nil, c[:filter]
  233. assert_equal false, c[:insert_dot]
  234. ENV['TM_CURRENT_LINE'] = <<-EOF
  235. this.
  236. EOF
  237. ENV['TM_LINE_INDEX'] = '11'
  238. c = PropertyInspector.capture
  239. assert_equal 'this', c[:ref]
  240. assert_equal false, c[:is_static]
  241. assert_equal nil, c[:filter]
  242. assert_equal false, c[:insert_dot]
  243. ENV['TM_CURRENT_LINE'] = <<-EOF
  244. this.foo.
  245. EOF
  246. ENV['TM_LINE_INDEX'] = '15'
  247. c = PropertyInspector.capture
  248. assert_equal 'this.foo', c[:ref]
  249. assert_equal false, c[:is_static]
  250. assert_equal nil, c[:filter]
  251. assert_equal false, c[:insert_dot]
  252. ENV['TM_CURRENT_LINE'] = <<-EOF
  253. one.two.three.foo
  254. EOF
  255. ENV['TM_LINE_INDEX'] = '23'
  256. c = PropertyInspector.capture
  257. assert_equal 'one.two.three.foo', c[:ref]
  258. assert_equal false, c[:is_static]
  259. assert_equal nil, c[:filter]
  260. assert_equal true, c[:insert_dot]
  261. ENV['TM_CURRENT_LINE'] = <<-EOF
  262. one.(p as Two).three.
  263. EOF
  264. ENV['TM_LINE_INDEX'] = '27'
  265. c = PropertyInspector.capture
  266. assert_equal 'one.Two.three', c[:ref]
  267. assert_equal false, c[:is_static]
  268. assert_equal nil, c[:filter]
  269. assert_equal false, c[:insert_dot]
  270. ENV['TM_CURRENT_LINE'] = <<-EOF
  271. BigOne(one).two.foo.
  272. EOF
  273. ENV['TM_LINE_INDEX'] = '26'
  274. c = PropertyInspector.capture
  275. assert_equal 'BigOne.two.foo', c[:ref]
  276. assert_equal false, c[:is_static]
  277. assert_equal nil, c[:filter]
  278. assert_equal false, c[:insert_dot]
  279. end
  280. def test_captures_with_filter
  281. ENV['TM_SCOPE'] = 'source.actionscript.3'
  282. ENV['TM_CURRENT_LINE'] = <<-EOF
  283. StaticExample
  284. EOF
  285. ENV['TM_LINE_INDEX'] = '19'
  286. c = PropertyInspector.capture
  287. assert_equal 'StaticExample', c[:ref]
  288. assert_equal true, c[:is_static]
  289. assert_equal nil, c[:filter]
  290. assert_equal true, c[:insert_dot]
  291. ENV['TM_CURRENT_LINE'] = <<-EOF
  292. this
  293. EOF
  294. ENV['TM_LINE_INDEX'] = '10'
  295. c = PropertyInspector.capture
  296. assert_equal 'this', c[:ref]
  297. assert_equal false, c[:is_static]
  298. assert_equal nil, c[:filter]
  299. assert_equal true, c[:insert_dot]
  300. ENV['TM_CURRENT_LINE'] = <<-EOF
  301. this.test_filter
  302. EOF
  303. ENV['TM_LINE_INDEX'] = '22'
  304. c = PropertyInspector.capture
  305. assert_equal 'this', c[:ref]
  306. assert_equal false, c[:is_static]
  307. assert_equal 'test_filter', c[:filter]
  308. assert_equal true, c[:insert_dot]
  309. ENV['TM_CURRENT_LINE'] = <<-EOF
  310. test_filter
  311. EOF
  312. ENV['TM_LINE_INDEX'] = '17'
  313. c = PropertyInspector.capture
  314. assert_equal 'this', c[:ref]
  315. assert_equal false, c[:is_static]
  316. assert_equal 'test_filter', c[:filter]
  317. assert_equal true, c[:insert_dot]
  318. ENV['TM_CURRENT_LINE'] = <<-EOF
  319. one.two.three.foo
  320. EOF
  321. ENV['TM_LINE_INDEX'] = '23'
  322. c = PropertyInspector.capture
  323. assert_equal 'one.two.three', c[:ref]
  324. assert_equal false, c[:is_static]
  325. assert_equal 'foo', c[:filter]
  326. assert_equal true, c[:insert_dot]
  327. ENV['TM_CURRENT_LINE'] = <<-EOF
  328. one.(p as Two).three.foo
  329. EOF
  330. ENV['TM_LINE_INDEX'] = '30'
  331. c = PropertyInspector.capture
  332. assert_equal 'one.Two.three', c[:ref]
  333. assert_equal false, c[:is_static]
  334. assert_equal 'foo', c[:filter]
  335. assert_equal true, c[:insert_dot]
  336. ENV['TM_CURRENT_LINE'] = <<-EOF
  337. BigOne(one).two.foo
  338. EOF
  339. ENV['TM_LINE_INDEX'] = '25'
  340. c = PropertyInspector.capture
  341. assert_equal 'BigOne.two', c[:ref]
  342. assert_equal false, c[:is_static]
  343. assert_equal 'foo', c[:filter]
  344. assert_equal true, c[:insert_dot]
  345. ENV['TM_CURRENT_LINE'] = <<-EOF
  346. BigOne(one).two.(z as Three).(x as Four).foo
  347. EOF
  348. ENV['TM_LINE_INDEX'] = '48'
  349. c = PropertyInspector.capture
  350. assert_equal 'BigOne.two.Three.Four', c[:ref]
  351. assert_equal false, c[:is_static]
  352. assert_equal true, c[:insert_dot]
  353. ENV['TM_CURRENT_LINE'] = <<-EOF
  354. BigOne(one).two.(z as Three).(x as Four).five
  355. EOF
  356. ENV['TM_LINE_INDEX'] = '51'
  357. c = PropertyInspector.capture
  358. assert_equal 'BigOne.two.Three.Four', c[:ref]
  359. assert_equal false, c[:is_static]
  360. assert_equal true, c[:insert_dot]
  361. assert_equal 'five', c[:filter]
  362. end
  363. def test_static_capture
  364. ENV['TM_SCOPE'] = 'source.actionscript.3'
  365. ENV['TM_LINE_INDEX'] = '27'
  366. ENV['TM_CURRENT_LINE'] = <<-EOF
  367. StaticExample.WITH_PA
  368. EOF
  369. c = PropertyInspector.capture
  370. assert_equal 'StaticExample', c[:ref]
  371. assert_equal true, c[:is_static]
  372. assert_equal 'WITH_PA', c[:filter]
  373. assert_equal true, c[:insert_dot]
  374. end
  375. end