johnson 1.2.0 → 2.0.0.pre0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (782) hide show
  1. data/CHANGELOG.rdoc +8 -0
  2. data/Manifest.txt +762 -48
  3. data/README.rdoc +2 -1
  4. data/Rakefile +90 -18
  5. data/ext/spidermonkey/conversions.c +9 -2
  6. data/ext/spidermonkey/ruby_land_proxy.c +1 -1
  7. data/ext/spidermonkey/runtime.h +1 -1
  8. data/ext/tracemonkey/context.cc +125 -0
  9. data/ext/tracemonkey/context.h +19 -0
  10. data/ext/tracemonkey/conversions.cc +365 -0
  11. data/ext/tracemonkey/conversions.h +32 -0
  12. data/ext/tracemonkey/debugger.cc +234 -0
  13. data/ext/tracemonkey/debugger.h +10 -0
  14. data/ext/tracemonkey/extconf.rb +37 -0
  15. data/ext/tracemonkey/extensions.cc +37 -0
  16. data/ext/tracemonkey/extensions.h +12 -0
  17. data/ext/tracemonkey/global.cc +40 -0
  18. data/ext/tracemonkey/global.h +11 -0
  19. data/ext/tracemonkey/idhash.cc +16 -0
  20. data/ext/tracemonkey/idhash.h +8 -0
  21. data/ext/tracemonkey/immutable_node.cc +1199 -0
  22. data/ext/tracemonkey/immutable_node.cc.erb +559 -0
  23. data/ext/tracemonkey/immutable_node.h +22 -0
  24. data/ext/tracemonkey/jroot.h +215 -0
  25. data/ext/tracemonkey/js_land_proxy.cc +620 -0
  26. data/ext/tracemonkey/js_land_proxy.h +20 -0
  27. data/ext/tracemonkey/ruby_land_proxy.cc +618 -0
  28. data/ext/tracemonkey/ruby_land_proxy.h +38 -0
  29. data/ext/tracemonkey/runtime.cc +454 -0
  30. data/ext/tracemonkey/runtime.h +27 -0
  31. data/ext/tracemonkey/split_global.cc +392 -0
  32. data/ext/tracemonkey/split_global.h +11 -0
  33. data/ext/tracemonkey/tracemonkey.cc +23 -0
  34. data/ext/tracemonkey/tracemonkey.h +32 -0
  35. data/lib/johnson.rb +12 -4
  36. data/lib/johnson/error.rb +5 -0
  37. data/lib/johnson/js/prelude.js +16 -1
  38. data/lib/johnson/parser.rb +2 -1
  39. data/lib/johnson/runtime.rb +87 -26
  40. data/lib/johnson/spidermonkey/runtime.rb +7 -16
  41. data/lib/johnson/tracemonkey.rb +13 -0
  42. data/lib/johnson/tracemonkey/context.rb +10 -0
  43. data/lib/johnson/tracemonkey/debugger.rb +67 -0
  44. data/lib/johnson/tracemonkey/immutable_node.rb +282 -0
  45. data/lib/johnson/tracemonkey/js_land_proxy.rb +64 -0
  46. data/lib/johnson/tracemonkey/mutable_tree_visitor.rb +242 -0
  47. data/lib/johnson/tracemonkey/ruby_land_proxy.rb +17 -0
  48. data/lib/johnson/tracemonkey/runtime.rb +80 -0
  49. data/test/{johnson_test.rb → generic/johnson_test.rb} +1 -1
  50. data/test/{parser_test.rb → generic/parser_test.rb} +1 -1
  51. data/test/helper.rb +23 -4
  52. data/test/johnson/{browser_test.rb → generic/browser_test.rb} +1 -1
  53. data/test/johnson/{conversions → generic/conversions}/array_test.rb +1 -1
  54. data/test/johnson/{conversions → generic/conversions}/boolean_test.rb +1 -1
  55. data/test/johnson/{conversions → generic/conversions}/callable_test.rb +1 -1
  56. data/test/johnson/{conversions → generic/conversions}/file_test.rb +1 -1
  57. data/test/johnson/generic/conversions/helper.rb +1 -0
  58. data/test/johnson/{conversions → generic/conversions}/nil_test.rb +1 -1
  59. data/test/johnson/{conversions → generic/conversions}/number_test.rb +1 -1
  60. data/test/johnson/{conversions → generic/conversions}/regexp_test.rb +1 -1
  61. data/test/johnson/{conversions → generic/conversions}/string_test.rb +1 -1
  62. data/test/johnson/{conversions → generic/conversions}/struct_test.rb +1 -1
  63. data/test/johnson/{conversions → generic/conversions}/symbol_test.rb +1 -1
  64. data/test/johnson/{conversions → generic/conversions}/thread_test.rb +1 -1
  65. data/test/johnson/{custom_conversions_test.rb → generic/custom_conversions_test.rb} +1 -1
  66. data/test/johnson/generic/default_test.rb +12 -0
  67. data/test/johnson/{error_test.rb → generic/error_test.rb} +1 -1
  68. data/test/johnson/{extensions_test.rb → generic/extensions_test.rb} +1 -1
  69. data/test/johnson/generic/helper.rb +1 -0
  70. data/test/johnson/{nodes → generic/nodes}/array_literal_test.rb +1 -1
  71. data/test/johnson/{nodes → generic/nodes}/array_node_test.rb +1 -1
  72. data/test/johnson/{nodes → generic/nodes}/binary_node_test.rb +1 -1
  73. data/test/johnson/{nodes → generic/nodes}/bracket_access_test.rb +1 -1
  74. data/test/johnson/{nodes → generic/nodes}/delete_test.rb +1 -1
  75. data/test/johnson/{nodes → generic/nodes}/do_while_test.rb +1 -1
  76. data/test/johnson/{nodes → generic/nodes}/dot_accessor_test.rb +1 -1
  77. data/test/johnson/generic/nodes/export_test.rb +11 -0
  78. data/test/johnson/{nodes → generic/nodes}/for_test.rb +1 -1
  79. data/test/johnson/{nodes → generic/nodes}/function_test.rb +1 -1
  80. data/test/johnson/generic/nodes/helper.rb +1 -0
  81. data/test/johnson/{nodes → generic/nodes}/if_test.rb +16 -6
  82. data/test/johnson/generic/nodes/import_test.rb +15 -0
  83. data/test/johnson/{nodes → generic/nodes}/label_test.rb +1 -1
  84. data/test/johnson/{nodes → generic/nodes}/let_test.rb +1 -1
  85. data/test/johnson/{nodes → generic/nodes}/object_literal_test.rb +1 -1
  86. data/test/johnson/{nodes → generic/nodes}/return_test.rb +1 -1
  87. data/test/johnson/{nodes → generic/nodes}/semi_test.rb +1 -1
  88. data/test/johnson/{nodes → generic/nodes}/switch_test.rb +1 -1
  89. data/test/johnson/{nodes → generic/nodes}/ternary_test.rb +1 -1
  90. data/test/johnson/{nodes → generic/nodes}/throw_test.rb +1 -1
  91. data/test/johnson/{nodes → generic/nodes}/try_node_test.rb +36 -6
  92. data/test/johnson/{nodes → generic/nodes}/typeof_test.rb +1 -1
  93. data/test/johnson/{nodes → generic/nodes}/unary_node_test.rb +1 -1
  94. data/test/johnson/{nodes → generic/nodes}/void_test.rb +1 -1
  95. data/test/johnson/{nodes → generic/nodes}/while_test.rb +1 -1
  96. data/test/johnson/{nodes → generic/nodes}/with_test.rb +1 -1
  97. data/test/johnson/{prelude_test.rb → generic/prelude_test.rb} +1 -1
  98. data/test/johnson/{runtime_test.rb → generic/runtime_test.rb} +3 -6
  99. data/test/johnson/generic/version_test.rb +13 -0
  100. data/test/johnson/{visitors → generic/visitors}/dot_visitor_test.rb +1 -1
  101. data/test/johnson/{visitors → generic/visitors}/enumerating_visitor_test.rb +1 -1
  102. data/test/johnson/generic/visitors/helper.rb +1 -0
  103. data/test/johnson/spidermonkey/js_land_proxy_test.rb +1 -5
  104. data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +11 -7
  105. data/test/johnson/tracemonkey/context_test.rb +21 -0
  106. data/test/johnson/tracemonkey/immutable_node_test.rb +34 -0
  107. data/test/johnson/tracemonkey/js_land_proxy_test.rb +273 -0
  108. data/test/johnson/tracemonkey/ruby_land_proxy_test.rb +274 -0
  109. data/test/johnson/tracemonkey/runtime_test.rb +41 -0
  110. data/test/johnson/tracemonkey/split_global_test.rb +32 -0
  111. data/vendor/spidermonkey/js.pkg +2 -0
  112. data/vendor/tracemonkey/Makefile.in +668 -0
  113. data/vendor/tracemonkey/Makefile.ref +483 -0
  114. data/vendor/tracemonkey/README.html +54 -0
  115. data/vendor/tracemonkey/SpiderMonkey.rsp +11 -0
  116. data/vendor/tracemonkey/Y.js +19 -0
  117. data/vendor/tracemonkey/aclocal.m4 +9 -0
  118. data/vendor/tracemonkey/bench.sh +5 -0
  119. data/vendor/tracemonkey/build/autoconf/acoutput-fast.pl +202 -0
  120. data/vendor/tracemonkey/build/autoconf/altoptions.m4 +154 -0
  121. data/vendor/tracemonkey/build/autoconf/config.guess +1537 -0
  122. data/vendor/tracemonkey/build/autoconf/config.sub +1595 -0
  123. data/vendor/tracemonkey/build/autoconf/install-sh +119 -0
  124. data/vendor/tracemonkey/build/autoconf/make-makefile +315 -0
  125. data/vendor/tracemonkey/build/autoconf/match-dir.sh +101 -0
  126. data/vendor/tracemonkey/build/autoconf/moznbytetype.m4 +136 -0
  127. data/vendor/tracemonkey/build/autoconf/nspr.m4 +82 -0
  128. data/vendor/tracemonkey/build/autoconf/pkg.m4 +59 -0
  129. data/vendor/tracemonkey/build/autoconf/update-makefile.sh +118 -0
  130. data/vendor/tracemonkey/build/cygwin-wrapper +75 -0
  131. data/vendor/tracemonkey/build/hcc +111 -0
  132. data/vendor/tracemonkey/build/hcpp +155 -0
  133. data/vendor/tracemonkey/build/unix/mddepend.pl +165 -0
  134. data/vendor/tracemonkey/build/unix/uniq.pl +63 -0
  135. data/vendor/tracemonkey/build/win32/pgomerge.py +40 -0
  136. data/vendor/tracemonkey/builtins.tbl +91 -0
  137. data/vendor/tracemonkey/call.js +13 -0
  138. data/vendor/tracemonkey/config.mk +206 -0
  139. data/vendor/tracemonkey/config/Makefile.in +106 -0
  140. data/vendor/tracemonkey/config/Moz/Milestone.pm +232 -0
  141. data/vendor/tracemonkey/config/autoconf.mk.in +362 -0
  142. data/vendor/tracemonkey/config/check-sync-dirs.py +103 -0
  143. data/vendor/tracemonkey/config/check-sync-exceptions +7 -0
  144. data/vendor/tracemonkey/config/config.mk +881 -0
  145. data/vendor/tracemonkey/config/fastcwd.pl +66 -0
  146. data/vendor/tracemonkey/config/gcc_hidden.h +2 -0
  147. data/vendor/tracemonkey/config/insure.mk +53 -0
  148. data/vendor/tracemonkey/config/make-system-wrappers.pl +59 -0
  149. data/vendor/tracemonkey/config/milestone.pl +112 -0
  150. data/vendor/tracemonkey/config/milestone.txt +13 -0
  151. data/vendor/tracemonkey/config/mkdepend/Makefile.in +84 -0
  152. data/vendor/tracemonkey/config/mkdepend/cppsetup.c +233 -0
  153. data/vendor/tracemonkey/config/mkdepend/def.h +184 -0
  154. data/vendor/tracemonkey/config/mkdepend/ifparser.c +551 -0
  155. data/vendor/tracemonkey/config/mkdepend/ifparser.h +83 -0
  156. data/vendor/tracemonkey/config/mkdepend/imakemdep.h +733 -0
  157. data/vendor/tracemonkey/config/mkdepend/include.c +337 -0
  158. data/vendor/tracemonkey/config/mkdepend/main.c +860 -0
  159. data/vendor/tracemonkey/config/mkdepend/mkdepend.man +382 -0
  160. data/vendor/tracemonkey/config/mkdepend/parse.c +686 -0
  161. data/vendor/tracemonkey/config/mkdepend/pr.c +124 -0
  162. data/vendor/tracemonkey/config/nfspwd.pl +50 -0
  163. data/vendor/tracemonkey/config/nsinstall.c +481 -0
  164. data/vendor/tracemonkey/config/nsinstall.py +155 -0
  165. data/vendor/tracemonkey/config/pathsub.c +247 -0
  166. data/vendor/tracemonkey/config/pathsub.h +74 -0
  167. data/vendor/tracemonkey/config/preprocessor.pl +671 -0
  168. data/vendor/tracemonkey/config/revdepth-nt.pl +48 -0
  169. data/vendor/tracemonkey/config/revdepth.pl +51 -0
  170. data/vendor/tracemonkey/config/rules.mk +2310 -0
  171. data/vendor/tracemonkey/config/static-checking-config.mk +21 -0
  172. data/vendor/tracemonkey/config/static-checking.js +92 -0
  173. data/vendor/tracemonkey/config/string-format.js +61 -0
  174. data/vendor/tracemonkey/config/system-headers +1035 -0
  175. data/vendor/tracemonkey/config/version.mk +85 -0
  176. data/vendor/tracemonkey/config/version_win.pl +442 -0
  177. data/vendor/tracemonkey/configure +14183 -0
  178. data/vendor/tracemonkey/configure.in +5363 -0
  179. data/vendor/tracemonkey/correct.sh +23 -0
  180. data/vendor/tracemonkey/correct/check-3d-morph.js +55 -0
  181. data/vendor/tracemonkey/correct/check-3d-raytrace.js +445 -0
  182. data/vendor/tracemonkey/correct/check-access-binary-trees.js +52 -0
  183. data/vendor/tracemonkey/correct/check-access-fannkuch.js +66 -0
  184. data/vendor/tracemonkey/correct/check-access-nbody.js +171 -0
  185. data/vendor/tracemonkey/correct/check-access-nsieve.js +40 -0
  186. data/vendor/tracemonkey/correct/check-bitops-3bit-bits-in-byte.js +35 -0
  187. data/vendor/tracemonkey/correct/check-bitops-bits-in-byte.js +24 -0
  188. data/vendor/tracemonkey/correct/check-bitops-bitwise-and.js +29 -0
  189. data/vendor/tracemonkey/correct/check-bitops-nsieve-bits.js +40 -0
  190. data/vendor/tracemonkey/correct/check-controlflow-recursive.js +27 -0
  191. data/vendor/tracemonkey/correct/check-date-format-tofte.js +302 -0
  192. data/vendor/tracemonkey/correct/check-date-format-xparb.js +421 -0
  193. data/vendor/tracemonkey/correct/check-mont.js +119 -0
  194. data/vendor/tracemonkey/dtoa.c +3335 -0
  195. data/vendor/tracemonkey/editline/Makefile.in +55 -0
  196. data/vendor/tracemonkey/editline/Makefile.ref +143 -0
  197. data/vendor/tracemonkey/editline/README +83 -0
  198. data/vendor/tracemonkey/editline/editline.3 +175 -0
  199. data/vendor/tracemonkey/editline/editline.c +1371 -0
  200. data/vendor/tracemonkey/editline/editline.h +135 -0
  201. data/vendor/tracemonkey/editline/sysunix.c +182 -0
  202. data/vendor/tracemonkey/editline/unix.h +82 -0
  203. data/vendor/tracemonkey/if.js +13 -0
  204. data/vendor/tracemonkey/imacro_asm.js.in +396 -0
  205. data/vendor/tracemonkey/imacros.c.out +1034 -0
  206. data/vendor/tracemonkey/imacros.jsasm +770 -0
  207. data/vendor/tracemonkey/javascript-trace.d +73 -0
  208. data/vendor/tracemonkey/jitstats.tbl +55 -0
  209. data/vendor/tracemonkey/js-config.h.in +82 -0
  210. data/vendor/tracemonkey/js-config.in +111 -0
  211. data/vendor/tracemonkey/js.mdp +0 -0
  212. data/vendor/tracemonkey/js.msg +312 -0
  213. data/vendor/tracemonkey/js3240.rc +79 -0
  214. data/vendor/tracemonkey/jsOS240.def +654 -0
  215. data/vendor/tracemonkey/jsapi.cpp +6005 -0
  216. data/vendor/tracemonkey/jsapi.h +2727 -0
  217. data/vendor/tracemonkey/jsarena.cpp +450 -0
  218. data/vendor/tracemonkey/jsarena.h +318 -0
  219. data/vendor/tracemonkey/jsarray.cpp +3664 -0
  220. data/vendor/tracemonkey/jsarray.h +238 -0
  221. data/vendor/tracemonkey/jsatom.cpp +1244 -0
  222. data/vendor/tracemonkey/jsatom.h +493 -0
  223. data/vendor/tracemonkey/jsbit.h +249 -0
  224. data/vendor/tracemonkey/jsbool.cpp +184 -0
  225. data/vendor/tracemonkey/jsbool.h +88 -0
  226. data/vendor/tracemonkey/jsbuiltins.cpp +415 -0
  227. data/vendor/tracemonkey/jsbuiltins.h +456 -0
  228. data/vendor/tracemonkey/jsclist.h +139 -0
  229. data/vendor/tracemonkey/jscntxt.cpp +1816 -0
  230. data/vendor/tracemonkey/jscntxt.h +1541 -0
  231. data/vendor/tracemonkey/jscompat.h +57 -0
  232. data/vendor/tracemonkey/jsconfig.mk +181 -0
  233. data/vendor/tracemonkey/jscpucfg.cpp +194 -0
  234. data/vendor/tracemonkey/jscpucfg.h +91 -0
  235. data/vendor/tracemonkey/jsdate.cpp +2465 -0
  236. data/vendor/tracemonkey/jsdate.h +129 -0
  237. data/vendor/tracemonkey/jsdbgapi.cpp +2017 -0
  238. data/vendor/tracemonkey/jsdbgapi.h +500 -0
  239. data/vendor/tracemonkey/jsdhash.cpp +876 -0
  240. data/vendor/tracemonkey/jsdhash.h +588 -0
  241. data/vendor/tracemonkey/jsdtoa.cpp +572 -0
  242. data/vendor/tracemonkey/jsdtoa.h +131 -0
  243. data/vendor/tracemonkey/jsdtracef.c +318 -0
  244. data/vendor/tracemonkey/jsdtracef.h +81 -0
  245. data/vendor/tracemonkey/jsemit.cpp +7292 -0
  246. data/vendor/tracemonkey/jsemit.h +802 -0
  247. data/vendor/tracemonkey/jsexn.cpp +1337 -0
  248. data/vendor/tracemonkey/jsexn.h +96 -0
  249. data/vendor/tracemonkey/jsfile.cpp +2747 -0
  250. data/vendor/tracemonkey/jsfile.h +56 -0
  251. data/vendor/tracemonkey/jsfile.msg +90 -0
  252. data/vendor/tracemonkey/jsfun.cpp +3089 -0
  253. data/vendor/tracemonkey/jsfun.h +366 -0
  254. data/vendor/tracemonkey/jsgc.cpp +3816 -0
  255. data/vendor/tracemonkey/jsgc.h +429 -0
  256. data/vendor/tracemonkey/jshash.cpp +477 -0
  257. data/vendor/tracemonkey/jshash.h +151 -0
  258. data/vendor/tracemonkey/jsify.pl +483 -0
  259. data/vendor/tracemonkey/jsinterp.cpp +7441 -0
  260. data/vendor/tracemonkey/jsinterp.h +666 -0
  261. data/vendor/tracemonkey/jsinvoke.cpp +42 -0
  262. data/vendor/tracemonkey/jsiter.cpp +1040 -0
  263. data/vendor/tracemonkey/jsiter.h +140 -0
  264. data/vendor/tracemonkey/jskeyword.tbl +124 -0
  265. data/vendor/tracemonkey/jskwgen.cpp +460 -0
  266. data/vendor/tracemonkey/jslibmath.h +69 -0
  267. data/vendor/tracemonkey/jslock.cpp +1512 -0
  268. data/vendor/tracemonkey/jslock.h +325 -0
  269. data/vendor/tracemonkey/jslocko.asm +60 -0
  270. data/vendor/tracemonkey/jslog2.cpp +111 -0
  271. data/vendor/tracemonkey/jslong.h +167 -0
  272. data/vendor/tracemonkey/jsmath.cpp +806 -0
  273. data/vendor/tracemonkey/jsmath.h +63 -0
  274. data/vendor/tracemonkey/jsnum.cpp +1374 -0
  275. data/vendor/tracemonkey/jsnum.h +280 -0
  276. data/vendor/tracemonkey/jsobj.cpp +6165 -0
  277. data/vendor/tracemonkey/jsobj.h +870 -0
  278. data/vendor/tracemonkey/json.cpp +1338 -0
  279. data/vendor/tracemonkey/json.h +108 -0
  280. data/vendor/tracemonkey/jsopcode.cpp +5484 -0
  281. data/vendor/tracemonkey/jsopcode.h +434 -0
  282. data/vendor/tracemonkey/jsopcode.tbl +591 -0
  283. data/vendor/tracemonkey/jsoplengen.cpp +121 -0
  284. data/vendor/tracemonkey/jsotypes.h +202 -0
  285. data/vendor/tracemonkey/jsparse.cpp +9257 -0
  286. data/vendor/tracemonkey/jsparse.h +900 -0
  287. data/vendor/tracemonkey/jsprf.cpp +1262 -0
  288. data/vendor/tracemonkey/jsprf.h +150 -0
  289. data/vendor/tracemonkey/jsproto.tbl +117 -0
  290. data/vendor/tracemonkey/jsprvtd.h +366 -0
  291. data/vendor/tracemonkey/jspubtd.h +585 -0
  292. data/vendor/tracemonkey/jsregexp.cpp +5051 -0
  293. data/vendor/tracemonkey/jsregexp.h +199 -0
  294. data/vendor/tracemonkey/jsreops.tbl +145 -0
  295. data/vendor/tracemonkey/jsscan.cpp +2040 -0
  296. data/vendor/tracemonkey/jsscan.h +467 -0
  297. data/vendor/tracemonkey/jsscope.cpp +1966 -0
  298. data/vendor/tracemonkey/jsscope.h +487 -0
  299. data/vendor/tracemonkey/jsscript.cpp +1932 -0
  300. data/vendor/tracemonkey/jsscript.h +345 -0
  301. data/vendor/tracemonkey/jsshell.msg +54 -0
  302. data/vendor/tracemonkey/jsstack.js +167 -0
  303. data/vendor/tracemonkey/jsstaticcheck.h +69 -0
  304. data/vendor/tracemonkey/jsstddef.h +87 -0
  305. data/vendor/tracemonkey/jsstdint.h +96 -0
  306. data/vendor/tracemonkey/jsstr.cpp +5277 -0
  307. data/vendor/tracemonkey/jsstr.h +702 -0
  308. data/vendor/tracemonkey/jstracer.cpp +10991 -0
  309. data/vendor/tracemonkey/jstracer.h +794 -0
  310. data/vendor/tracemonkey/jstypes.h +481 -0
  311. data/vendor/tracemonkey/jsutil.cpp +361 -0
  312. data/vendor/tracemonkey/jsutil.h +178 -0
  313. data/vendor/tracemonkey/jsversion.h +243 -0
  314. data/vendor/tracemonkey/jswince.asm +44 -0
  315. data/vendor/tracemonkey/jsxdrapi.cpp +800 -0
  316. data/vendor/tracemonkey/jsxdrapi.h +220 -0
  317. data/vendor/tracemonkey/jsxml.cpp +8327 -0
  318. data/vendor/tracemonkey/jsxml.h +305 -0
  319. data/vendor/tracemonkey/liveconnect/LiveConnect.dsp +157 -0
  320. data/vendor/tracemonkey/liveconnect/LiveConnectShell.dsp +120 -0
  321. data/vendor/tracemonkey/liveconnect/LiveConnectShell.dsw +44 -0
  322. data/vendor/tracemonkey/liveconnect/Makefile.in +105 -0
  323. data/vendor/tracemonkey/liveconnect/Makefile.ref +169 -0
  324. data/vendor/tracemonkey/liveconnect/README.html +712 -0
  325. data/vendor/tracemonkey/liveconnect/_jni/netscape_javascript_JSException.h +14 -0
  326. data/vendor/tracemonkey/liveconnect/_jni/netscape_javascript_JSObject.h +155 -0
  327. data/vendor/tracemonkey/liveconnect/classes/Makefile.in +89 -0
  328. data/vendor/tracemonkey/liveconnect/classes/Makefile.ref +57 -0
  329. data/vendor/tracemonkey/liveconnect/classes/netscape/Makefile.ref +47 -0
  330. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSException.java +140 -0
  331. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSObject.java +183 -0
  332. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSProxy.java +58 -0
  333. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSRunnable.java +70 -0
  334. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/JSUtil.java +59 -0
  335. data/vendor/tracemonkey/liveconnect/classes/netscape/javascript/Makefile.ref +53 -0
  336. data/vendor/tracemonkey/liveconnect/config/AIX4.1.mk +45 -0
  337. data/vendor/tracemonkey/liveconnect/config/AIX4.2.mk +45 -0
  338. data/vendor/tracemonkey/liveconnect/config/AIX4.3.mk +50 -0
  339. data/vendor/tracemonkey/liveconnect/config/HP-UXB.10.10.mk +43 -0
  340. data/vendor/tracemonkey/liveconnect/config/HP-UXB.10.20.mk +43 -0
  341. data/vendor/tracemonkey/liveconnect/config/HP-UXB.11.00.mk +43 -0
  342. data/vendor/tracemonkey/liveconnect/config/IRIX6.2.mk +43 -0
  343. data/vendor/tracemonkey/liveconnect/config/IRIX6.3.mk +43 -0
  344. data/vendor/tracemonkey/liveconnect/config/IRIX6.5.mk +43 -0
  345. data/vendor/tracemonkey/liveconnect/config/Linux_All.mk +73 -0
  346. data/vendor/tracemonkey/liveconnect/config/OSF1V4.0.mk +65 -0
  347. data/vendor/tracemonkey/liveconnect/config/OSF1V5.0.mk +62 -0
  348. data/vendor/tracemonkey/liveconnect/config/SunOS5.5.1.mk +55 -0
  349. data/vendor/tracemonkey/liveconnect/config/SunOS5.6.mk +39 -0
  350. data/vendor/tracemonkey/liveconnect/config/SunOS5.7.mk +39 -0
  351. data/vendor/tracemonkey/liveconnect/config/SunOS5.8.mk +39 -0
  352. data/vendor/tracemonkey/liveconnect/config/WINNT4.0.mk +53 -0
  353. data/vendor/tracemonkey/liveconnect/jsj.c +886 -0
  354. data/vendor/tracemonkey/liveconnect/jsj.msg +98 -0
  355. data/vendor/tracemonkey/liveconnect/jsj_JSObject.c +1377 -0
  356. data/vendor/tracemonkey/liveconnect/jsj_JavaArray.c +474 -0
  357. data/vendor/tracemonkey/liveconnect/jsj_JavaClass.c +737 -0
  358. data/vendor/tracemonkey/liveconnect/jsj_JavaMember.c +191 -0
  359. data/vendor/tracemonkey/liveconnect/jsj_JavaObject.c +1079 -0
  360. data/vendor/tracemonkey/liveconnect/jsj_JavaPackage.c +569 -0
  361. data/vendor/tracemonkey/liveconnect/jsj_array.c +207 -0
  362. data/vendor/tracemonkey/liveconnect/jsj_class.c +770 -0
  363. data/vendor/tracemonkey/liveconnect/jsj_convert.c +902 -0
  364. data/vendor/tracemonkey/liveconnect/jsj_field.c +421 -0
  365. data/vendor/tracemonkey/liveconnect/jsj_hash.c +488 -0
  366. data/vendor/tracemonkey/liveconnect/jsj_hash.h +161 -0
  367. data/vendor/tracemonkey/liveconnect/jsj_method.c +1825 -0
  368. data/vendor/tracemonkey/liveconnect/jsj_nodl.c +1 -0
  369. data/vendor/tracemonkey/liveconnect/jsj_private.h +677 -0
  370. data/vendor/tracemonkey/liveconnect/jsj_simpleapi.c +219 -0
  371. data/vendor/tracemonkey/liveconnect/jsj_utils.c +513 -0
  372. data/vendor/tracemonkey/liveconnect/jsjava.h +316 -0
  373. data/vendor/tracemonkey/liveconnect/netscape_javascript_JSObject.h +155 -0
  374. data/vendor/tracemonkey/liveconnect/nsCLiveconnect.cpp +785 -0
  375. data/vendor/tracemonkey/liveconnect/nsCLiveconnect.h +197 -0
  376. data/vendor/tracemonkey/liveconnect/nsCLiveconnectFactory.cpp +118 -0
  377. data/vendor/tracemonkey/liveconnect/nsCLiveconnectFactory.h +76 -0
  378. data/vendor/tracemonkey/liveconnect/nsILiveconnect.h +197 -0
  379. data/vendor/tracemonkey/liveconnect/nsISecureLiveconnect.h +94 -0
  380. data/vendor/tracemonkey/liveconnect/nsISecurityContext.h +136 -0
  381. data/vendor/tracemonkey/lock_SunOS.s +119 -0
  382. data/vendor/tracemonkey/mandelbrot-results.js +3 -0
  383. data/vendor/tracemonkey/math-partial-sums.js +32 -0
  384. data/vendor/tracemonkey/math-trace-tests.js +507 -0
  385. data/vendor/tracemonkey/md5.js +289 -0
  386. data/vendor/tracemonkey/nanojit/Assembler.cpp +1984 -0
  387. data/vendor/tracemonkey/nanojit/Assembler.h +375 -0
  388. data/vendor/tracemonkey/nanojit/Fragmento.cpp +651 -0
  389. data/vendor/tracemonkey/nanojit/Fragmento.h +237 -0
  390. data/vendor/tracemonkey/nanojit/LIR.cpp +2314 -0
  391. data/vendor/tracemonkey/nanojit/LIR.h +879 -0
  392. data/vendor/tracemonkey/nanojit/LIRopcode.tbl +252 -0
  393. data/vendor/tracemonkey/nanojit/Native.h +127 -0
  394. data/vendor/tracemonkey/nanojit/NativeARM.cpp +1742 -0
  395. data/vendor/tracemonkey/nanojit/NativeARM.h +844 -0
  396. data/vendor/tracemonkey/nanojit/NativeSparc.cpp +1130 -0
  397. data/vendor/tracemonkey/nanojit/NativeSparc.h +948 -0
  398. data/vendor/tracemonkey/nanojit/NativeThumb.cpp +1322 -0
  399. data/vendor/tracemonkey/nanojit/NativeThumb.h +525 -0
  400. data/vendor/tracemonkey/nanojit/Nativei386.cpp +1748 -0
  401. data/vendor/tracemonkey/nanojit/Nativei386.h +857 -0
  402. data/vendor/tracemonkey/nanojit/RegAlloc.cpp +183 -0
  403. data/vendor/tracemonkey/nanojit/RegAlloc.h +95 -0
  404. data/vendor/tracemonkey/nanojit/TraceTreeDrawer.cpp +306 -0
  405. data/vendor/tracemonkey/nanojit/TraceTreeDrawer.h +88 -0
  406. data/vendor/tracemonkey/nanojit/avmplus.cpp +56 -0
  407. data/vendor/tracemonkey/nanojit/avmplus.h +1016 -0
  408. data/vendor/tracemonkey/nanojit/nanojit.h +253 -0
  409. data/vendor/tracemonkey/perfect.js +39 -0
  410. data/vendor/tracemonkey/plify_jsdhash.sed +35 -0
  411. data/vendor/tracemonkey/prmjtime.cpp +869 -0
  412. data/vendor/tracemonkey/prmjtime.h +103 -0
  413. data/vendor/tracemonkey/ref-config/AIX4.1.mk +65 -0
  414. data/vendor/tracemonkey/ref-config/AIX4.2.mk +64 -0
  415. data/vendor/tracemonkey/ref-config/AIX4.3.mk +65 -0
  416. data/vendor/tracemonkey/ref-config/Darwin.mk +85 -0
  417. data/vendor/tracemonkey/ref-config/Darwin1.3.mk +81 -0
  418. data/vendor/tracemonkey/ref-config/Darwin1.4.mk +41 -0
  419. data/vendor/tracemonkey/ref-config/Darwin5.2.mk +81 -0
  420. data/vendor/tracemonkey/ref-config/Darwin5.3.mk +81 -0
  421. data/vendor/tracemonkey/ref-config/Darwin64.mk +72 -0
  422. data/vendor/tracemonkey/ref-config/HP-UXB.10.10.mk +77 -0
  423. data/vendor/tracemonkey/ref-config/HP-UXB.10.20.mk +77 -0
  424. data/vendor/tracemonkey/ref-config/HP-UXB.11.00.mk +80 -0
  425. data/vendor/tracemonkey/ref-config/IRIX.mk +87 -0
  426. data/vendor/tracemonkey/ref-config/IRIX5.3.mk +44 -0
  427. data/vendor/tracemonkey/ref-config/IRIX6.1.mk +44 -0
  428. data/vendor/tracemonkey/ref-config/IRIX6.2.mk +44 -0
  429. data/vendor/tracemonkey/ref-config/IRIX6.3.mk +44 -0
  430. data/vendor/tracemonkey/ref-config/IRIX6.5.mk +44 -0
  431. data/vendor/tracemonkey/ref-config/Linux_All.mk +105 -0
  432. data/vendor/tracemonkey/ref-config/Mac_OS10.0.mk +82 -0
  433. data/vendor/tracemonkey/ref-config/OSF1V4.0.mk +72 -0
  434. data/vendor/tracemonkey/ref-config/OSF1V5.0.mk +69 -0
  435. data/vendor/tracemonkey/ref-config/SunOS4.1.4.mk +101 -0
  436. data/vendor/tracemonkey/ref-config/SunOS5.10.mk +50 -0
  437. data/vendor/tracemonkey/ref-config/SunOS5.3.mk +91 -0
  438. data/vendor/tracemonkey/ref-config/SunOS5.4.mk +92 -0
  439. data/vendor/tracemonkey/ref-config/SunOS5.5.1.mk +44 -0
  440. data/vendor/tracemonkey/ref-config/SunOS5.5.mk +87 -0
  441. data/vendor/tracemonkey/ref-config/SunOS5.6.mk +89 -0
  442. data/vendor/tracemonkey/ref-config/SunOS5.7.mk +44 -0
  443. data/vendor/tracemonkey/ref-config/SunOS5.8.mk +44 -0
  444. data/vendor/tracemonkey/ref-config/SunOS5.9.mk +44 -0
  445. data/vendor/tracemonkey/ref-config/WINNT4.0.mk +118 -0
  446. data/vendor/tracemonkey/ref-config/WINNT5.0.mk +118 -0
  447. data/vendor/tracemonkey/ref-config/WINNT5.1.mk +118 -0
  448. data/vendor/tracemonkey/ref-config/WINNT5.2.mk +118 -0
  449. data/vendor/tracemonkey/ref-config/WINNT6.0.mk +118 -0
  450. data/vendor/tracemonkey/ref-config/dgux.mk +64 -0
  451. data/vendor/tracemonkey/resource.h +15 -0
  452. data/vendor/tracemonkey/rules.mk +206 -0
  453. data/vendor/tracemonkey/shell/Makefile.in +72 -0
  454. data/vendor/tracemonkey/shell/js.cpp +4719 -0
  455. data/vendor/tracemonkey/t/3d-cube.js +337 -0
  456. data/vendor/tracemonkey/t/3d-morph.js +54 -0
  457. data/vendor/tracemonkey/t/3d-raytrace.js +441 -0
  458. data/vendor/tracemonkey/t/access-binary-trees.js +50 -0
  459. data/vendor/tracemonkey/t/access-fannkuch.js +66 -0
  460. data/vendor/tracemonkey/t/access-nbody.js +169 -0
  461. data/vendor/tracemonkey/t/access-nsieve.js +38 -0
  462. data/vendor/tracemonkey/t/bitops-3bit-bits-in-byte.js +32 -0
  463. data/vendor/tracemonkey/t/bitops-bits-in-byte.js +21 -0
  464. data/vendor/tracemonkey/t/bitops-bitwise-and.js +28 -0
  465. data/vendor/tracemonkey/t/bitops-nsieve-bits.js +32 -0
  466. data/vendor/tracemonkey/t/controlflow-recursive.js +25 -0
  467. data/vendor/tracemonkey/t/crypto-aes.js +422 -0
  468. data/vendor/tracemonkey/t/crypto-md5.js +286 -0
  469. data/vendor/tracemonkey/t/crypto-sha1.js +224 -0
  470. data/vendor/tracemonkey/t/date-format-tofte.js +299 -0
  471. data/vendor/tracemonkey/t/date-format-xparb.js +417 -0
  472. data/vendor/tracemonkey/t/math-cordic.js +95 -0
  473. data/vendor/tracemonkey/t/math-partial-sums.js +33 -0
  474. data/vendor/tracemonkey/t/math-spectral-norm.js +51 -0
  475. data/vendor/tracemonkey/t/regexp-dna.js +1712 -0
  476. data/vendor/tracemonkey/t/string-base64.js +135 -0
  477. data/vendor/tracemonkey/t/string-fasta.js +85 -0
  478. data/vendor/tracemonkey/t/string-tagcloud.js +265 -0
  479. data/vendor/tracemonkey/t/string-unpack-code.js +68 -0
  480. data/vendor/tracemonkey/t/string-validate-input.js +89 -0
  481. data/vendor/tracemonkey/time.sh +13 -0
  482. data/vendor/tracemonkey/trace-test.js +5564 -0
  483. data/vendor/tracemonkey/v8/base.js +187 -0
  484. data/vendor/tracemonkey/v8/crypto.js +1689 -0
  485. data/vendor/tracemonkey/v8/deltablue.js +880 -0
  486. data/vendor/tracemonkey/v8/earley-boyer.js +4682 -0
  487. data/vendor/tracemonkey/v8/raytrace.js +3418 -0
  488. data/vendor/tracemonkey/v8/richards.js +539 -0
  489. data/vendor/tracemonkey/v8/run-crypto.js +44 -0
  490. data/vendor/tracemonkey/v8/run-deltablue.js +44 -0
  491. data/vendor/tracemonkey/v8/run-earley-boyer.js +44 -0
  492. data/vendor/tracemonkey/v8/run-raytrace.js +44 -0
  493. data/vendor/tracemonkey/v8/run-richards.js +44 -0
  494. data/vendor/tracemonkey/v8/run.js +49 -0
  495. data/vendor/tracemonkey/vprof/readme.txt +93 -0
  496. data/vendor/tracemonkey/vprof/vprof.cpp +360 -0
  497. data/vendor/tracemonkey/vprof/vprof.h +245 -0
  498. data/vendor/tracemonkey/xpconnect/Makefile.in +67 -0
  499. data/vendor/tracemonkey/xpconnect/crashtests/117307-1.html +20 -0
  500. data/vendor/tracemonkey/xpconnect/crashtests/193710.html +11 -0
  501. data/vendor/tracemonkey/xpconnect/crashtests/290162-1.html +5 -0
  502. data/vendor/tracemonkey/xpconnect/crashtests/326615-1.html +16 -0
  503. data/vendor/tracemonkey/xpconnect/crashtests/328553-1.html +13 -0
  504. data/vendor/tracemonkey/xpconnect/crashtests/346258-1.html +12 -0
  505. data/vendor/tracemonkey/xpconnect/crashtests/346512-1-frame1.xhtml +16 -0
  506. data/vendor/tracemonkey/xpconnect/crashtests/346512-1-frame2.xhtml +15 -0
  507. data/vendor/tracemonkey/xpconnect/crashtests/346512-1.xhtml +30 -0
  508. data/vendor/tracemonkey/xpconnect/crashtests/382133-1.html +3 -0
  509. data/vendor/tracemonkey/xpconnect/crashtests/386680-1.html +22 -0
  510. data/vendor/tracemonkey/xpconnect/crashtests/394810-1.html +4 -0
  511. data/vendor/tracemonkey/xpconnect/crashtests/400349-1.html +20 -0
  512. data/vendor/tracemonkey/xpconnect/crashtests/403356-1.html +13 -0
  513. data/vendor/tracemonkey/xpconnect/crashtests/418139-1.svg +22 -0
  514. data/vendor/tracemonkey/xpconnect/crashtests/420513-1.html +11 -0
  515. data/vendor/tracemonkey/xpconnect/crashtests/453935-1.html +37 -0
  516. data/vendor/tracemonkey/xpconnect/crashtests/462926.html +12 -0
  517. data/vendor/tracemonkey/xpconnect/crashtests/468552-1.html +18 -0
  518. data/vendor/tracemonkey/xpconnect/crashtests/471366-1.html +12 -0
  519. data/vendor/tracemonkey/xpconnect/crashtests/475185-1.html +13 -0
  520. data/vendor/tracemonkey/xpconnect/crashtests/475291-1.html +14 -0
  521. data/vendor/tracemonkey/xpconnect/crashtests/503286-1.html +23 -0
  522. data/vendor/tracemonkey/xpconnect/crashtests/crashtests.list +21 -0
  523. data/vendor/tracemonkey/xpconnect/idl/Makefile.in +78 -0
  524. data/vendor/tracemonkey/xpconnect/idl/XPCIDispatch.idl +51 -0
  525. data/vendor/tracemonkey/xpconnect/idl/mozIJSSubScriptLoader.idl +64 -0
  526. data/vendor/tracemonkey/xpconnect/idl/nsIActiveXSecurityPolicy.idl +67 -0
  527. data/vendor/tracemonkey/xpconnect/idl/nsIDispatchSupport.idl +119 -0
  528. data/vendor/tracemonkey/xpconnect/idl/nsIJSContextStack.idl +85 -0
  529. data/vendor/tracemonkey/xpconnect/idl/nsIJSRuntimeService.idl +51 -0
  530. data/vendor/tracemonkey/xpconnect/idl/nsIScriptError.idl +102 -0
  531. data/vendor/tracemonkey/xpconnect/idl/nsIScriptableInterfaces.idl +67 -0
  532. data/vendor/tracemonkey/xpconnect/idl/nsIXPCScriptNotify.idl +66 -0
  533. data/vendor/tracemonkey/xpconnect/idl/nsIXPCScriptable.idl +183 -0
  534. data/vendor/tracemonkey/xpconnect/idl/nsIXPCSecurityManager.idl +114 -0
  535. data/vendor/tracemonkey/xpconnect/idl/nsIXPConnect.idl +819 -0
  536. data/vendor/tracemonkey/xpconnect/idl/xpcIJSModuleLoader.idl +95 -0
  537. data/vendor/tracemonkey/xpconnect/idl/xpcIJSWeakReference.idl +49 -0
  538. data/vendor/tracemonkey/xpconnect/idl/xpccomponents.idl +254 -0
  539. data/vendor/tracemonkey/xpconnect/idl/xpcexception.idl +66 -0
  540. data/vendor/tracemonkey/xpconnect/idl/xpcjsid.idl +83 -0
  541. data/vendor/tracemonkey/xpconnect/loader/ISO8601DateUtils.jsm +176 -0
  542. data/vendor/tracemonkey/xpconnect/loader/Makefile.in +63 -0
  543. data/vendor/tracemonkey/xpconnect/loader/XPCOMUtils.jsm +267 -0
  544. data/vendor/tracemonkey/xpconnect/loader/mozJSComponentLoader.cpp +1717 -0
  545. data/vendor/tracemonkey/xpconnect/loader/mozJSComponentLoader.h +172 -0
  546. data/vendor/tracemonkey/xpconnect/loader/mozJSLoaderConstructors.h +101 -0
  547. data/vendor/tracemonkey/xpconnect/loader/mozJSSubScriptLoader.cpp +360 -0
  548. data/vendor/tracemonkey/xpconnect/loader/mozJSSubScriptLoader.h +66 -0
  549. data/vendor/tracemonkey/xpconnect/public/Makefile.in +54 -0
  550. data/vendor/tracemonkey/xpconnect/public/nsAXPCNativeCallContext.h +89 -0
  551. data/vendor/tracemonkey/xpconnect/public/nsAutoJSValHolder.h +168 -0
  552. data/vendor/tracemonkey/xpconnect/public/xpc_map_end.h +327 -0
  553. data/vendor/tracemonkey/xpconnect/sample/Makefile.in +71 -0
  554. data/vendor/tracemonkey/xpconnect/sample/README +39 -0
  555. data/vendor/tracemonkey/xpconnect/sample/xpcsample1.cpp +337 -0
  556. data/vendor/tracemonkey/xpconnect/sample/xpcsample1.idl +82 -0
  557. data/vendor/tracemonkey/xpconnect/sample/xpcsample1.js +21 -0
  558. data/vendor/tracemonkey/xpconnect/shell/Makefile.in +106 -0
  559. data/vendor/tracemonkey/xpconnect/shell/jsshell.msg +50 -0
  560. data/vendor/tracemonkey/xpconnect/shell/xpcshell.cpp +1817 -0
  561. data/vendor/tracemonkey/xpconnect/shell/xpcshellMacUtils.h +43 -0
  562. data/vendor/tracemonkey/xpconnect/shell/xpcshellMacUtils.mm +54 -0
  563. data/vendor/tracemonkey/xpconnect/src/Makefile.in +228 -0
  564. data/vendor/tracemonkey/xpconnect/src/README +3 -0
  565. data/vendor/tracemonkey/xpconnect/src/XPCCrossOriginWrapper.cpp +1186 -0
  566. data/vendor/tracemonkey/xpconnect/src/XPCDispConvert.cpp +593 -0
  567. data/vendor/tracemonkey/xpconnect/src/XPCDispInlines.h +667 -0
  568. data/vendor/tracemonkey/xpconnect/src/XPCDispInterface.cpp +383 -0
  569. data/vendor/tracemonkey/xpconnect/src/XPCDispObject.cpp +516 -0
  570. data/vendor/tracemonkey/xpconnect/src/XPCDispParamPropJSClass.cpp +223 -0
  571. data/vendor/tracemonkey/xpconnect/src/XPCDispParams.cpp +103 -0
  572. data/vendor/tracemonkey/xpconnect/src/XPCDispPrivate.h +1401 -0
  573. data/vendor/tracemonkey/xpconnect/src/XPCDispTearOff.cpp +547 -0
  574. data/vendor/tracemonkey/xpconnect/src/XPCDispTypeInfo.cpp +471 -0
  575. data/vendor/tracemonkey/xpconnect/src/XPCIDispatchClassInfo.cpp +139 -0
  576. data/vendor/tracemonkey/xpconnect/src/XPCIDispatchExtension.cpp +362 -0
  577. data/vendor/tracemonkey/xpconnect/src/XPCNativeWrapper.cpp +1350 -0
  578. data/vendor/tracemonkey/xpconnect/src/XPCNativeWrapper.h +88 -0
  579. data/vendor/tracemonkey/xpconnect/src/XPCSafeJSObjectWrapper.cpp +1148 -0
  580. data/vendor/tracemonkey/xpconnect/src/XPCSystemOnlyWrapper.cpp +718 -0
  581. data/vendor/tracemonkey/xpconnect/src/XPCWrapper.cpp +850 -0
  582. data/vendor/tracemonkey/xpconnect/src/XPCWrapper.h +394 -0
  583. data/vendor/tracemonkey/xpconnect/src/dom_quickstubs.qsconf +568 -0
  584. data/vendor/tracemonkey/xpconnect/src/nsDispatchSupport.cpp +348 -0
  585. data/vendor/tracemonkey/xpconnect/src/nsScriptError.cpp +201 -0
  586. data/vendor/tracemonkey/xpconnect/src/nsXPConnect.cpp +2609 -0
  587. data/vendor/tracemonkey/xpconnect/src/qsgen.py +1487 -0
  588. data/vendor/tracemonkey/xpconnect/src/xpc.msg +217 -0
  589. data/vendor/tracemonkey/xpconnect/src/xpcJSWeakReference.cpp +148 -0
  590. data/vendor/tracemonkey/xpconnect/src/xpcJSWeakReference.h +56 -0
  591. data/vendor/tracemonkey/xpconnect/src/xpccallcontext.cpp +579 -0
  592. data/vendor/tracemonkey/xpconnect/src/xpccomponents.cpp +4144 -0
  593. data/vendor/tracemonkey/xpconnect/src/xpccontext.cpp +115 -0
  594. data/vendor/tracemonkey/xpconnect/src/xpcconvert.cpp +2298 -0
  595. data/vendor/tracemonkey/xpconnect/src/xpcdebug.cpp +481 -0
  596. data/vendor/tracemonkey/xpconnect/src/xpcexception.cpp +502 -0
  597. data/vendor/tracemonkey/xpconnect/src/xpcforwards.h +114 -0
  598. data/vendor/tracemonkey/xpconnect/src/xpcinlines.h +772 -0
  599. data/vendor/tracemonkey/xpconnect/src/xpcjsid.cpp +1025 -0
  600. data/vendor/tracemonkey/xpconnect/src/xpcjsruntime.cpp +1342 -0
  601. data/vendor/tracemonkey/xpconnect/src/xpclog.cpp +128 -0
  602. data/vendor/tracemonkey/xpconnect/src/xpclog.h +101 -0
  603. data/vendor/tracemonkey/xpconnect/src/xpcmaps.cpp +761 -0
  604. data/vendor/tracemonkey/xpconnect/src/xpcmaps.h +713 -0
  605. data/vendor/tracemonkey/xpconnect/src/xpcmodule.cpp +136 -0
  606. data/vendor/tracemonkey/xpconnect/src/xpcprivate.h +4138 -0
  607. data/vendor/tracemonkey/xpconnect/src/xpcquickstubs.cpp +1128 -0
  608. data/vendor/tracemonkey/xpconnect/src/xpcquickstubs.h +480 -0
  609. data/vendor/tracemonkey/xpconnect/src/xpcruntimesvc.cpp +179 -0
  610. data/vendor/tracemonkey/xpconnect/src/xpcstack.cpp +342 -0
  611. data/vendor/tracemonkey/xpconnect/src/xpcstring.cpp +139 -0
  612. data/vendor/tracemonkey/xpconnect/src/xpcthreadcontext.cpp +599 -0
  613. data/vendor/tracemonkey/xpconnect/src/xpcthrower.cpp +399 -0
  614. data/vendor/tracemonkey/xpconnect/src/xpcvariant.cpp +850 -0
  615. data/vendor/tracemonkey/xpconnect/src/xpcwrappedjs.cpp +670 -0
  616. data/vendor/tracemonkey/xpconnect/src/xpcwrappedjsclass.cpp +2015 -0
  617. data/vendor/tracemonkey/xpconnect/src/xpcwrappednative.cpp +3482 -0
  618. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativeinfo.cpp +945 -0
  619. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativejsops.cpp +2003 -0
  620. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativeproto.cpp +302 -0
  621. data/vendor/tracemonkey/xpconnect/src/xpcwrappednativescope.cpp +991 -0
  622. data/vendor/tracemonkey/xpconnect/tests/Makefile.in +75 -0
  623. data/vendor/tracemonkey/xpconnect/tests/TestXPC.cpp +785 -0
  624. data/vendor/tracemonkey/xpconnect/tests/chrome/Makefile.in +51 -0
  625. data/vendor/tracemonkey/xpconnect/tests/chrome/test_bug500931.xul +43 -0
  626. data/vendor/tracemonkey/xpconnect/tests/components/Makefile.in +85 -0
  627. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_array.cpp +388 -0
  628. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_attributes.cpp +305 -0
  629. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_calljs.cpp +135 -0
  630. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_child.cpp +225 -0
  631. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_const.cpp +76 -0
  632. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_domstring.cpp +118 -0
  633. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_echo.cpp +616 -0
  634. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_in.cpp +204 -0
  635. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_inout.cpp +171 -0
  636. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_module.cpp +77 -0
  637. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_multiple.cpp +554 -0
  638. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_noisy.cpp +154 -0
  639. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_out.cpp +335 -0
  640. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_overloaded.cpp +250 -0
  641. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_private.h +192 -0
  642. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_string.cpp +185 -0
  643. data/vendor/tracemonkey/xpconnect/tests/components/xpctest_variant.cpp +355 -0
  644. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/StdAfx.cpp +12 -0
  645. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/StdAfx.h +28 -0
  646. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCDispUtilities.h +28 -0
  647. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.cpp +86 -0
  648. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.def +9 -0
  649. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.dsp +318 -0
  650. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.dsw +29 -0
  651. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.idl +454 -0
  652. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/XPCIDispatchTest.rc +145 -0
  653. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.cpp +44 -0
  654. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.h +56 -0
  655. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispSimple.rgs +23 -0
  656. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.cpp +221 -0
  657. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.h +53 -0
  658. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestArrays.rgs +23 -0
  659. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.cpp +699 -0
  660. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.h +138 -0
  661. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestMethods.rgs +23 -0
  662. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.cpp +23 -0
  663. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.h +41 -0
  664. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestNoIDispatch.rgs +23 -0
  665. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.cpp +256 -0
  666. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.h +88 -0
  667. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestProperties.rgs +23 -0
  668. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.cpp +23 -0
  669. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.h +43 -0
  670. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOff.rgs +23 -0
  671. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.cpp +29 -0
  672. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.h +45 -0
  673. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestScriptOn.rgs +23 -0
  674. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.cpp +177 -0
  675. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.h +50 -0
  676. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/nsXPCDispTestWrappedJS.rgs +23 -0
  677. data/vendor/tracemonkey/xpconnect/tests/idispatch/COM/resource.h +36 -0
  678. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Arrays/XPCIDispatchArrayTests.js +54 -0
  679. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Attributes/XPCIDispatchAttributeTests.js +150 -0
  680. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/General/XPCIDispatchInstantiations.js +122 -0
  681. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/General/XPCStress.js +58 -0
  682. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/Methods/XPCIDispatchMethodTests.js +376 -0
  683. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedCOM/shell.js +377 -0
  684. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedJS/General/XPCIDispatchTestWrappedJS.js +76 -0
  685. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/WrappedJS/shell.js +377 -0
  686. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/exectests.cmd +1 -0
  687. data/vendor/tracemonkey/xpconnect/tests/idispatch/Tests/jsDriver.pl +1288 -0
  688. data/vendor/tracemonkey/xpconnect/tests/idl/Makefile.in +61 -0
  689. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest.idl +312 -0
  690. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest2.idl +51 -0
  691. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_attributes.idl +67 -0
  692. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_calljs.idl +59 -0
  693. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_const.idl +61 -0
  694. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_domstring.idl +59 -0
  695. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_in.idl +88 -0
  696. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_inout.idl +86 -0
  697. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_multiple.idl +77 -0
  698. data/vendor/tracemonkey/xpconnect/tests/idl/xpctest_out.idl +142 -0
  699. data/vendor/tracemonkey/xpconnect/tests/js/checkid.js +82 -0
  700. data/vendor/tracemonkey/xpconnect/tests/js/evaluate.js +311 -0
  701. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-2.js +153 -0
  702. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-3.js +194 -0
  703. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-4.js +297 -0
  704. data/vendor/tracemonkey/xpconnect/tests/js/exceptions-5.js +343 -0
  705. data/vendor/tracemonkey/xpconnect/tests/js/exceptions.js +230 -0
  706. data/vendor/tracemonkey/xpconnect/tests/js/javascript.js +96 -0
  707. data/vendor/tracemonkey/xpconnect/tests/js/multiple-2.js +151 -0
  708. data/vendor/tracemonkey/xpconnect/tests/js/multiple-3.js +148 -0
  709. data/vendor/tracemonkey/xpconnect/tests/js/multiple-4.js +152 -0
  710. data/vendor/tracemonkey/xpconnect/tests/js/multiple.js +137 -0
  711. data/vendor/tracemonkey/xpconnect/tests/js/notscriptable.js +104 -0
  712. data/vendor/tracemonkey/xpconnect/tests/js/old/simpletest.js +36 -0
  713. data/vendor/tracemonkey/xpconnect/tests/js/old/speed.js +60 -0
  714. data/vendor/tracemonkey/xpconnect/tests/js/old/testxpc.js +464 -0
  715. data/vendor/tracemonkey/xpconnect/tests/js/old/threads.js +74 -0
  716. data/vendor/tracemonkey/xpconnect/tests/js/old/try.js +27 -0
  717. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_array.js +308 -0
  718. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_callcontext.js +68 -0
  719. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_echo.js +636 -0
  720. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_and_sort.js +28 -0
  721. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_constants.js +15 -0
  722. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_enum_create.js +200 -0
  723. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_exceptions.js +167 -0
  724. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_ids.js +135 -0
  725. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_observer.js +36 -0
  726. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_overloaded.js +14 -0
  727. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_primitives.js +141 -0
  728. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_propertybag.js +36 -0
  729. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_variant.js +339 -0
  730. data/vendor/tracemonkey/xpconnect/tests/js/old/xpctest_variant_array.js +30 -0
  731. data/vendor/tracemonkey/xpconnect/tests/js/readonlyattributes.js +74 -0
  732. data/vendor/tracemonkey/xpconnect/tests/js/readwriteattributes.js +101 -0
  733. data/vendor/tracemonkey/xpconnect/tests/js/scriptable.js +120 -0
  734. data/vendor/tracemonkey/xpconnect/tests/js/testin.js +203 -0
  735. data/vendor/tracemonkey/xpconnect/tests/js/xpcfun.js +234 -0
  736. data/vendor/tracemonkey/xpconnect/tests/js/xpctest_primitives.js +200 -0
  737. data/vendor/tracemonkey/xpconnect/tests/mochitest/Makefile.in +66 -0
  738. data/vendor/tracemonkey/xpconnect/tests/mochitest/bug500931_helper.html +7 -0
  739. data/vendor/tracemonkey/xpconnect/tests/mochitest/inner.html +7 -0
  740. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug361111.xul +29 -0
  741. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug384632.html +32 -0
  742. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug390488.html +65 -0
  743. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug393269.html +46 -0
  744. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug396851.html +43 -0
  745. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug428021.html +41 -0
  746. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug446584.html +49 -0
  747. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug448587.html +31 -0
  748. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug462428.html +42 -0
  749. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug478438.html +66 -0
  750. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug484107.html +100 -0
  751. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug484459.html +36 -0
  752. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_bug500691.html +28 -0
  753. data/vendor/tracemonkey/xpconnect/tests/mochitest/test_wrappers.html +116 -0
  754. data/vendor/tracemonkey/xpconnect/tests/unit/bogus_element_type.jsm +1 -0
  755. data/vendor/tracemonkey/xpconnect/tests/unit/bogus_exports_type.jsm +1 -0
  756. data/vendor/tracemonkey/xpconnect/tests/unit/bug451678_subscript.js +2 -0
  757. data/vendor/tracemonkey/xpconnect/tests/unit/component_import.js +144 -0
  758. data/vendor/tracemonkey/xpconnect/tests/unit/recursive_importA.jsm +44 -0
  759. data/vendor/tracemonkey/xpconnect/tests/unit/recursive_importB.jsm +45 -0
  760. data/vendor/tracemonkey/xpconnect/tests/unit/syntax_error.jsm +1 -0
  761. data/vendor/tracemonkey/xpconnect/tests/unit/test_bogus_files.js +88 -0
  762. data/vendor/tracemonkey/xpconnect/tests/unit/test_bug408412.js +51 -0
  763. data/vendor/tracemonkey/xpconnect/tests/unit/test_bug451678.js +52 -0
  764. data/vendor/tracemonkey/xpconnect/tests/unit/test_bug_442086.js +68 -0
  765. data/vendor/tracemonkey/xpconnect/tests/unit/test_import.js +127 -0
  766. data/vendor/tracemonkey/xpconnect/tests/unit/test_js_weak_references.js +63 -0
  767. data/vendor/tracemonkey/xpconnect/tests/unit/test_recursive_import.js +62 -0
  768. data/vendor/tracemonkey/xpconnect/tools/Makefile.in +49 -0
  769. data/vendor/tracemonkey/xpconnect/tools/idl/Makefile.in +53 -0
  770. data/vendor/tracemonkey/xpconnect/tools/idl/nsIXPCToolsCompiler.idl +60 -0
  771. data/vendor/tracemonkey/xpconnect/tools/idl/nsIXPCToolsProfiler.idl +57 -0
  772. data/vendor/tracemonkey/xpconnect/tools/js/CompileJSFiles.js +28 -0
  773. data/vendor/tracemonkey/xpconnect/tools/js/ListJSFiles.js +18 -0
  774. data/vendor/tracemonkey/xpconnect/tools/src/Makefile.in +76 -0
  775. data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsCompiler.cpp +161 -0
  776. data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsModule.cpp +65 -0
  777. data/vendor/tracemonkey/xpconnect/tools/src/nsXPCToolsProfiler.cpp +370 -0
  778. data/vendor/tracemonkey/xpconnect/tools/src/xpctools_private.h +236 -0
  779. metadata +782 -107
  780. data/test/johnson/nodes/export_test.rb +0 -9
  781. data/test/johnson/nodes/import_test.rb +0 -13
  782. data/test/johnson/version_test.rb +0 -13
@@ -0,0 +1 @@
1
+ perl jsDriver.pl -e xpcshell %1 %2 %3 %4 %5 %6 %7 %8 %9
@@ -0,0 +1,1288 @@
1
+ #!/usr/bin/perl
2
+ #
3
+ # ***** BEGIN LICENSE BLOCK *****
4
+ # Version: MPL 1.1/GPL 2.0/LGPL 2.1
5
+ #
6
+ # The contents of this file are subject to the Mozilla Public License Version
7
+ # 1.1 (the "License"); you may not use this file except in compliance with
8
+ # the License. You may obtain a copy of the License at
9
+ # http://www.mozilla.org/MPL/
10
+ #
11
+ # Software distributed under the License is distributed on an "AS IS" basis,
12
+ # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13
+ # for the specific language governing rights and limitations under the
14
+ # License.
15
+ #
16
+ # The Original Code is JavaScript Core Tests.
17
+ #
18
+ # The Initial Developer of the Original Code is
19
+ # Netscape Communications Corporation.
20
+ # Portions created by the Initial Developer are Copyright (C) 1997-1999
21
+ # the Initial Developer. All Rights Reserved.
22
+ #
23
+ # Contributor(s):
24
+ #
25
+ # Alternatively, the contents of this file may be used under the terms of
26
+ # either of the GNU General Public License Version 2 or later (the "GPL"),
27
+ # or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28
+ # in which case the provisions of the GPL or the LGPL are applicable instead
29
+ # of those above. If you wish to allow use of your version of this file only
30
+ # under the terms of either the GPL or the LGPL, and not to allow others to
31
+ # use your version of this file under the terms of the MPL, indicate your
32
+ # decision by deleting the provisions above and replace them with the notice
33
+ # and other provisions required by the GPL or the LGPL. If you do not delete
34
+ # the provisions above, a recipient may use your version of this file under
35
+ # the terms of any one of the MPL, the GPL or the LGPL.
36
+ #
37
+ # ***** END LICENSE BLOCK *****
38
+
39
+ use strict;
40
+ use Getopt::Mixed "nextOption";
41
+
42
+ my $os_type = &get_os_type;
43
+ my $unixish = (($os_type ne "WIN") && ($os_type ne "MAC"));
44
+ my $path_sep = ($os_type eq "MAC") ? ":" : "/";
45
+ my $win_sep = ($os_type eq "WIN")? &get_win_sep : "";
46
+ my $redirect_command = ($os_type ne "MAC") ? " 2>&1" : "";
47
+
48
+ # command line option defaults
49
+ my $opt_suite_path;
50
+ my $opt_trace = 0;
51
+ my $opt_classpath = "";
52
+ my $opt_rhino_opt = 0;
53
+ my $opt_rhino_ms = 0;
54
+ my @opt_engine_list;
55
+ my $opt_engine_type = "";
56
+ my $opt_engine_params = "";
57
+ my $opt_user_output_file = 0;
58
+ my $opt_output_file = "";
59
+ my @opt_test_list_files;
60
+ my @opt_neg_list_files;
61
+ my $opt_shell_path = "";
62
+ my $opt_java_path = "";
63
+ my $opt_bug_url = "http://bugzilla.mozilla.org/show_bug.cgi?id=";
64
+ my $opt_console_failures = 0;
65
+ my $opt_lxr_url = "http://lxr.mozilla.org/mozilla/source/js/tests/";
66
+ my $opt_exit_munge = ($os_type ne "MAC") ? 1 : 0;
67
+
68
+ # command line option definition
69
+ my $options = "b=s bugurl>b c=s classpath>c e=s engine>e f=s file>f " .
70
+ "h help>h i j=s javapath>j k confail>k l=s list>l L=s neglist>L " .
71
+ "o=s opt>o p=s testpath>p s=s shellpath>s t trace>t u=s lxrurl>u " .
72
+ "x noexitmunge>x";
73
+
74
+ if ($os_type eq "MAC") {
75
+ $opt_suite_path = `directory`;
76
+ $opt_suite_path =~ s/[\n\r]//g;
77
+ $opt_suite_path .= ":";
78
+ } else {
79
+ $opt_suite_path = "./";
80
+ }
81
+
82
+ &parse_args;
83
+
84
+ my $user_exit = 0;
85
+ my ($engine_command, $html, $failures_reported, $tests_completed,
86
+ $exec_time_string);
87
+ my @failed_tests;
88
+ my @test_list = &get_test_list;
89
+
90
+ if ($#test_list == -1) {
91
+ die ("Nothing to test.\n");
92
+ }
93
+
94
+ if ($unixish) {
95
+ # on unix, ^C pauses the tests, and gives the user a chance to quit but
96
+ # report on what has been done, to just quit, or to continue (the
97
+ # interrupted test will still be skipped.)
98
+ # windows doesn't handle the int handler they way we want it to,
99
+ # so don't even pretend to let the user continue.
100
+ $SIG{INT} = 'int_handler';
101
+ }
102
+
103
+ &main;
104
+
105
+ #End.
106
+
107
+ sub main {
108
+ my $start_time;
109
+
110
+ while ($opt_engine_type = pop (@opt_engine_list)) {
111
+ dd ("Testing engine '$opt_engine_type'");
112
+
113
+ $engine_command = &get_engine_command;
114
+ $html = "";
115
+ @failed_tests = ();
116
+ $failures_reported = 0;
117
+ $tests_completed = 0;
118
+ $start_time = time;
119
+
120
+
121
+ &execute_tests (@test_list);
122
+
123
+ my $exec_time = (time - $start_time);
124
+ my $exec_hours = int($exec_time / 60 / 60);
125
+ $exec_time -= $exec_hours * 60 * 60;
126
+ my $exec_mins = int($exec_time / 60);
127
+ $exec_time -= $exec_mins * 60;
128
+ my $exec_secs = ($exec_time % 60);
129
+
130
+ if ($exec_hours > 0) {
131
+ $exec_time_string = "$exec_hours hours, $exec_mins minutes, " .
132
+ "$exec_secs seconds";
133
+ } elsif ($exec_mins > 0) {
134
+ $exec_time_string = "$exec_mins minutes, $exec_secs seconds";
135
+ } else {
136
+ $exec_time_string = "$exec_secs seconds";
137
+ }
138
+
139
+ if (!$opt_user_output_file) {
140
+ $opt_output_file = &get_tempfile_name;
141
+ }
142
+
143
+ &write_results;
144
+
145
+ }
146
+ }
147
+
148
+ sub execute_tests {
149
+ my (@test_list) = @_;
150
+ my ($test, $shell_command, $line, @output, $path);
151
+ my $file_param = " -f ";
152
+ my ($last_suite, $last_test_dir);
153
+
154
+ &status ("Executing " . ($#test_list + 1) . " test(s).");
155
+
156
+ foreach $test (@test_list) {
157
+ my ($suite, $test_dir, $test_file) = split($path_sep, $test);
158
+ # *-n.js is a negative test, expect exit code 3 (runtime error)
159
+ my $expected_exit = ($test =~ /\-n\.js$/) ? 3 : 0;
160
+ my ($got_exit, $exit_signal);
161
+ my $failure_lines;
162
+ my $bug_number;
163
+ my $status_lines;
164
+
165
+ # user selected [Q]uit from ^C handler.
166
+ if ($user_exit) {
167
+ return;
168
+ }
169
+
170
+ # Append the shell.js files to the shell_command if they're there.
171
+ # (only check for their existance if the suite or test_dir has changed
172
+ # since the last time we looked.)
173
+ if ($last_suite ne $suite || $last_test_dir ne $test_dir) {
174
+ $shell_command = &xp_path($engine_command);
175
+
176
+ $path = &xp_path($opt_suite_path . $suite . "/shell.js");
177
+ if (-f $path) {
178
+ $shell_command .= $file_param . $path;
179
+ }
180
+
181
+ $path = &xp_path($opt_suite_path . $suite . "/" .
182
+ $test_dir . "/shell.js");
183
+ if (-f $path) {
184
+ $shell_command .= $file_param . $path;
185
+ }
186
+
187
+ $last_suite = $suite;
188
+ $last_test_dir = $test_dir;
189
+ }
190
+
191
+ $path = &xp_path($opt_suite_path . $test);
192
+ &dd ("executing: " . $shell_command . $file_param . $path);
193
+
194
+ open (OUTPUT, $shell_command . $file_param . $path .
195
+ $redirect_command . " |");
196
+ @output = <OUTPUT>;
197
+ close (OUTPUT);
198
+
199
+ @output = grep (!/js\>/, @output);
200
+
201
+ if ($opt_exit_munge == 1) {
202
+ # signal information in the lower 8 bits, exit code above that
203
+ $got_exit = ($? >> 8);
204
+ $exit_signal = ($? & 255);
205
+ } else {
206
+ # user says not to munge the exit code
207
+ $got_exit = $?;
208
+ $exit_signal = 0;
209
+ }
210
+
211
+ $failure_lines = "";
212
+ $bug_number = "";
213
+ $status_lines = "";
214
+
215
+ foreach $line (@output) {
216
+
217
+ # watch for testcase to proclaim what exit code it expects to
218
+ # produce (0 by default)
219
+ if ($line =~ /expect(ed)?\s*exit\s*code\s*\:?\s*(\d+)/i) {
220
+ $expected_exit = $2;
221
+ &dd ("Test case expects exit code $expected_exit");
222
+ }
223
+
224
+ # watch for failures
225
+ if ($line =~ /failed!/i) {
226
+ $failure_lines .= $line;
227
+ }
228
+
229
+ # and watch for bugnumbers
230
+ # XXX This only allows 1 bugnumber per testfile, should be
231
+ # XXX modified to allow for multiple.
232
+ if ($line =~ /bugnumber\s*\:?\s*(.*)/i) {
233
+ $1 =~ /(\n+)/;
234
+ $bug_number = $1;
235
+ }
236
+
237
+ # and watch for status
238
+ if ($line =~ /status/i) {
239
+ $status_lines .= $line;
240
+ }
241
+
242
+ }
243
+
244
+ if (!@output) {
245
+ @output = ("Testcase produced no output!");
246
+ }
247
+
248
+ if ($got_exit != $expected_exit) {
249
+ # full testcase output dumped on mismatched exit codes,
250
+ &report_failure ($test, "Expected exit code " .
251
+ "$expected_exit, got $got_exit\n" .
252
+ "Testcase terminated with signal $exit_signal\n" .
253
+ "Complete testcase output was:\n" .
254
+ join ("\n",@output), $bug_number);
255
+ } elsif ($failure_lines) {
256
+ # only offending lines if exit codes matched
257
+ &report_failure ($test, "$status_lines\n".
258
+ "Failure messages were:\n$failure_lines",
259
+ $bug_number);
260
+ }
261
+
262
+ &dd ("exit code $got_exit, exit signal $exit_signal.");
263
+
264
+ $tests_completed++;
265
+ }
266
+ }
267
+
268
+ sub write_results {
269
+ my ($list_name, $neglist_name);
270
+ my $completion_date = localtime;
271
+ my $failure_pct = int(($failures_reported / $tests_completed) * 10000) /
272
+ 100;
273
+ &dd ("Writing output to $opt_output_file.");
274
+
275
+ if ($#opt_test_list_files == -1) {
276
+ $list_name = "All tests";
277
+ } elsif ($#opt_test_list_files < 10) {
278
+ $list_name = join (", ", @opt_test_list_files);
279
+ } else {
280
+ $list_name = "($#opt_test_list_files test files specified)";
281
+ }
282
+
283
+ if ($#opt_neg_list_files == -1) {
284
+ $neglist_name = "(none)";
285
+ } elsif ($#opt_test_list_files < 10) {
286
+ $neglist_name = join (", ", @opt_neg_list_files);
287
+ } else {
288
+ $neglist_name = "($#opt_neg_list_files skip files specified)";
289
+ }
290
+
291
+ open (OUTPUT, "> $opt_output_file") ||
292
+ die ("Could not create output file $opt_output_file");
293
+
294
+ print OUTPUT
295
+ ("<html><head>\n" .
296
+ "<title>Test results, $opt_engine_type</title>\n" .
297
+ "</head>\n" .
298
+ "<body bgcolor='white'>\n" .
299
+ "<a name='tippy_top'></a>\n" .
300
+ "<h2>Test results, $opt_engine_type</h2><br>\n" .
301
+ "<p class='results_summary'>\n" .
302
+ "Test List: $list_name<br>\n" .
303
+ "Skip List: $neglist_name<br>\n" .
304
+ ($#test_list + 1) . " test(s) selected, $tests_completed test(s) " .
305
+ "completed, $failures_reported failures reported " .
306
+ "($failure_pct% failed)<br>\n" .
307
+ "Engine command line: $engine_command<br>\n" .
308
+ "OS type: $os_type<br>\n");
309
+
310
+ if ($opt_engine_type =~ /^rhino/) {
311
+ open (JAVAOUTPUT, $opt_java_path . "java -fullversion " .
312
+ $redirect_command . " |");
313
+ print OUTPUT <JAVAOUTPUT>;
314
+ print OUTPUT "<BR>";
315
+ close (JAVAOUTPUT);
316
+ }
317
+
318
+ print OUTPUT
319
+ ("Testcase execution time: $exec_time_string.<br>\n" .
320
+ "Tests completed on $completion_date.<br><br>\n");
321
+
322
+ if ($failures_reported > 0) {
323
+ print OUTPUT
324
+ ("[ <a href='#fail_detail'>Failure Details</a> | " .
325
+ "<a href='#retest_list'>Retest List</a> | " .
326
+ "<a href='menu.html'>Test Selection Page</a> ]<br>\n" .
327
+ "<hr>\n" .
328
+ "<a name='fail_detail'></a>\n" .
329
+ "<h2>Failure Details</h2><br>\n<dl>" .
330
+ $html .
331
+ "</dl>\n[ <a href='#tippy_top'>Top of Page</a> | " .
332
+ "<a href='#fail_detail'>Top of Failures</a> ]<br>\n" .
333
+ "<hr>\n" .
334
+ "<a name='retest_list'></a>\n" .
335
+ "<h2>Retest List</h2><br>\n" .
336
+ "<pre>\n" .
337
+ "# Retest List, $opt_engine_type, " .
338
+ "generated $completion_date.\n" .
339
+ "# Original test base was: $list_name.\n" .
340
+ "# $tests_completed of " . ($#test_list + 1) .
341
+ " test(s) were completed, " .
342
+ "$failures_reported failures reported.\n" .
343
+ join ("\n", @failed_tests) .
344
+ "</pre>\n" .
345
+ "[ <a href='#tippy_top'>Top of Page</a> | " .
346
+ "<a href='#retest_list'>Top of Retest List</a> ]<br>\n");
347
+ } else {
348
+ print OUTPUT
349
+ ("<h1>Whoop-de-doo, nothing failed!</h1>\n");
350
+ }
351
+
352
+ print OUTPUT "</body>";
353
+
354
+ close (OUTPUT);
355
+
356
+ &status ("Wrote results to '$opt_output_file'.");
357
+
358
+ if ($opt_console_failures) {
359
+ &status ("$failures_reported test(s) failed");
360
+ }
361
+
362
+ }
363
+
364
+ sub parse_args {
365
+ my ($option, $value, $lastopt);
366
+
367
+ &dd ("checking command line options.");
368
+
369
+ Getopt::Mixed::init ($options);
370
+ $Getopt::Mixed::order = $Getopt::Mixed::RETURN_IN_ORDER;
371
+
372
+ while (($option, $value) = nextOption()) {
373
+
374
+ if ($option eq "b") {
375
+ &dd ("opt: setting bugurl to '$value'.");
376
+ $opt_bug_url = $value;
377
+
378
+ } elsif ($option eq "c") {
379
+ &dd ("opt: setting classpath to '$value'.");
380
+ $opt_classpath = $value;
381
+
382
+ } elsif (($option eq "e") || (($option eq "") && ($lastopt eq "e"))) {
383
+ &dd ("opt: adding engine $value.");
384
+ push (@opt_engine_list, $value);
385
+
386
+ } elsif ($option eq "f") {
387
+ if (!$value) {
388
+ die ("Output file cannot be null.\n");
389
+ }
390
+ &dd ("opt: setting output file to '$value'.");
391
+ $opt_user_output_file = 1;
392
+ $opt_output_file = $value;
393
+
394
+ } elsif ($option eq "h") {
395
+ &usage;
396
+
397
+ } elsif ($option eq "j") {
398
+ if (!($value =~ /[\/\\]$/)) {
399
+ $value .= "/";
400
+ }
401
+ &dd ("opt: setting java path to '$value'.");
402
+ $opt_java_path = $value;
403
+
404
+ } elsif ($option eq "k") {
405
+ &dd ("opt: displaying failures on console.");
406
+ $opt_console_failures=1;
407
+
408
+ } elsif ($option eq "l" || (($option eq "") && ($lastopt eq "l"))) {
409
+ $option = "l";
410
+ &dd ("opt: adding test list '$value'.");
411
+ push (@opt_test_list_files, $value);
412
+
413
+ } elsif ($option eq "L" || (($option eq "") && ($lastopt eq "L"))) {
414
+ $option = "L";
415
+ &dd ("opt: adding negative list '$value'.");
416
+ push (@opt_neg_list_files, $value);
417
+
418
+ } elsif ($option eq "o") {
419
+ $opt_engine_params = $value;
420
+ &dd ("opt: setting engine params to '$opt_engine_params'.");
421
+
422
+ } elsif ($option eq "p") {
423
+ $opt_suite_path = $value;
424
+
425
+ if ($os_type eq "MAC") {
426
+ if (!($opt_suite_path =~ /\:$/)) {
427
+ $opt_suite_path .= ":";
428
+ }
429
+ } else {
430
+ if (!($opt_suite_path =~ /[\/\\]$/)) {
431
+ $opt_suite_path .= "/";
432
+ }
433
+ }
434
+
435
+ &dd ("opt: setting suite path to '$opt_suite_path'.");
436
+
437
+ } elsif ($option eq "s") {
438
+ $opt_shell_path = $value;
439
+ &dd ("opt: setting shell path to '$opt_shell_path'.");
440
+
441
+ } elsif ($option eq "t") {
442
+ &dd ("opt: tracing output. (console failures at no extra charge.)");
443
+ $opt_console_failures = 1;
444
+ $opt_trace = 1;
445
+
446
+ } elsif ($option eq "u") {
447
+ &dd ("opt: setting lxr url to '$value'.");
448
+ $opt_lxr_url = $value;
449
+
450
+ } elsif ($option eq "x") {
451
+ &dd ("opt: turning off exit munging.");
452
+ $opt_exit_munge = 0;
453
+
454
+ } else {
455
+ &usage;
456
+ }
457
+
458
+ $lastopt = $option;
459
+
460
+ }
461
+
462
+ Getopt::Mixed::cleanup();
463
+
464
+ if ($#opt_engine_list == -1) {
465
+ die "You must select a shell to test in.\n";
466
+ }
467
+
468
+ }
469
+
470
+ #
471
+ # print the arguments that this script expects
472
+ #
473
+ sub usage {
474
+ print STDERR
475
+ ("\nusage: $0 [<options>] \n" .
476
+ "(-b|--bugurl) Bugzilla URL.\n" .
477
+ " (default is $opt_bug_url)\n" .
478
+ "(-c|--classpath) Classpath (Rhino only.)\n" .
479
+ "(-e|--engine) <type> ... Specify the type of engine(s) to test.\n" .
480
+ " <type> is one or more of\n" .
481
+ " (smopt|smdebug|lcopt|lcdebug|xpcshell|" .
482
+ "rhino|rhinoi|rhinoms|rhinomsi|rhino9|rhinoms9).\n" .
483
+ "(-f|--file) <file> Redirect output to file named <file>.\n" .
484
+ " (default is " .
485
+ "results-<engine-type>-<date-stamp>.html)\n" .
486
+ "(-h|--help) Print this message.\n" .
487
+ "(-j|--javapath) Location of java executable.\n" .
488
+ "(-k|--confail) Log failures to console (also.)\n" .
489
+ "(-l|--list) <file> ... List of tests to execute.\n" .
490
+ "(-L|--neglist) <file> ... List of tests to skip.\n" .
491
+ "(-o|--opt) <options> Options to pass to the JavaScript engine.\n" .
492
+ " (Make sure to quote them!)\n" .
493
+ "(-p|--testpath) <path> Root of the test suite. (default is ./)\n" .
494
+ "(-s|--shellpath) <path> Location of JavaScript shell.\n" .
495
+ "(-t|--trace) Trace script execution.\n" .
496
+ "(-u|--lxrurl) <url> Complete URL to tests subdirectory on lxr.\n" .
497
+ " (default is $opt_lxr_url)\n" .
498
+ "(-x|--noexitmunge) Don't do exit code munging (try this if it\n" .
499
+ " seems like your exit codes are turning up\n" .
500
+ " as exit signals.)\n");
501
+ exit (1);
502
+
503
+ }
504
+
505
+ #
506
+ # get the shell command used to start the (either) engine
507
+ #
508
+ sub get_engine_command {
509
+
510
+ my $retval;
511
+
512
+ if ($opt_engine_type eq "rhino") {
513
+ &dd ("getting rhino engine command.");
514
+ $opt_rhino_opt = 0;
515
+ $opt_rhino_ms = 0;
516
+ $retval = &get_rhino_engine_command;
517
+ } elsif ($opt_engine_type eq "rhinoi") {
518
+ &dd ("getting rhinoi engine command.");
519
+ $opt_rhino_opt = -1;
520
+ $opt_rhino_ms = 0;
521
+ $retval = &get_rhino_engine_command;
522
+ } elsif ($opt_engine_type eq "rhino9") {
523
+ &dd ("getting rhino engine command.");
524
+ $opt_rhino_opt = 9;
525
+ $opt_rhino_ms = 0;
526
+ $retval = &get_rhino_engine_command;
527
+ } elsif ($opt_engine_type eq "rhinoms") {
528
+ &dd ("getting rhinoms engine command.");
529
+ $opt_rhino_opt = 0;
530
+ $opt_rhino_ms = 1;
531
+ $retval = &get_rhino_engine_command;
532
+ } elsif ($opt_engine_type eq "rhinomsi") {
533
+ &dd ("getting rhinomsi engine command.");
534
+ $opt_rhino_opt = -1;
535
+ $opt_rhino_ms = 1;
536
+ $retval = &get_rhino_engine_command;
537
+ } elsif ($opt_engine_type eq "rhinoms9") {
538
+ &dd ("getting rhinomsi engine command.");
539
+ $opt_rhino_opt = 9;
540
+ $opt_rhino_ms = 1;
541
+ $retval = &get_rhino_engine_command;
542
+ } elsif ($opt_engine_type eq "xpcshell") {
543
+ &dd ("getting xpcshell engine command.");
544
+ $retval = &get_xpc_engine_command;
545
+ } elsif ($opt_engine_type =~ /^lc(opt|debug)$/) {
546
+ &dd ("getting liveconnect engine command.");
547
+ $retval = &get_lc_engine_command;
548
+ } elsif ($opt_engine_type =~ /^sm(opt|debug)$/) {
549
+ &dd ("getting spidermonkey engine command.");
550
+ $retval = &get_sm_engine_command;
551
+ } elsif ($opt_engine_type =~ /^ep(opt|debug)$/) {
552
+ &dd ("getting epimetheus engine command.");
553
+ $retval = &get_ep_engine_command;
554
+ } else {
555
+ die ("Unknown engine type selected, '$opt_engine_type'.\n");
556
+ }
557
+
558
+ $retval .= " $opt_engine_params";
559
+
560
+ &dd ("got '$retval'");
561
+
562
+ return $retval;
563
+
564
+ }
565
+
566
+ #
567
+ # get the shell command used to run rhino
568
+ #
569
+ sub get_rhino_engine_command {
570
+ my $retval = $opt_java_path . ($opt_rhino_ms ? "jview " : "java ");
571
+
572
+ if ($opt_shell_path) {
573
+ $opt_classpath = ($opt_classpath) ?
574
+ $opt_classpath . ":" . $opt_shell_path :
575
+ $opt_shell_path;
576
+ }
577
+
578
+ if ($opt_classpath) {
579
+ $retval .= ($opt_rhino_ms ? "/cp:p" : "-classpath") . " $opt_classpath ";
580
+ }
581
+
582
+ $retval .= "org.mozilla.javascript.tools.shell.Main";
583
+
584
+ if ($opt_rhino_opt) {
585
+ $retval .= " -opt $opt_rhino_opt";
586
+ }
587
+
588
+ return $retval;
589
+
590
+ }
591
+
592
+ #
593
+ # get the shell command used to run xpcshell
594
+ #
595
+ sub get_xpc_engine_command {
596
+ my $retval;
597
+ my $m5_home = @ENV{"MOZILLA_FIVE_HOME"} ||
598
+ die ("You must set MOZILLA_FIVE_HOME to use the xpcshell" ,
599
+ (!$unixish) ? "." : ", also " .
600
+ "setting LD_LIBRARY_PATH to the same directory may get rid of " .
601
+ "any 'library not found' errors.\n");
602
+
603
+ if (($unixish) && (!@ENV{"LD_LIBRARY_PATH"})) {
604
+ print STDERR "-#- WARNING: LD_LIBRARY_PATH is not set, xpcshell may " .
605
+ "not be able to find the required components.\n";
606
+ }
607
+
608
+ if (!($m5_home =~ /[\/\\]$/)) {
609
+ $m5_home .= "/";
610
+ }
611
+
612
+ $retval = $m5_home . "xpcshell";
613
+
614
+ if ($os_type eq "WIN") {
615
+ $retval .= ".exe";
616
+ }
617
+
618
+ $retval = &xp_path($retval);
619
+
620
+ if (($os_type ne "MAC") && !(-x $retval)) {
621
+ # mac doesn't seem to deal with -x correctly
622
+ die ($retval . " is not a valid executable on this system.\n");
623
+ }
624
+
625
+ return $retval;
626
+
627
+ }
628
+
629
+ #
630
+ # get the shell command used to run spidermonkey
631
+ #
632
+ sub get_sm_engine_command {
633
+ my $retval;
634
+
635
+ # Look for Makefile.ref style make first.
636
+ # (On Windows, spidermonkey can be made by two makefiles, each putting the
637
+ # executable in a diferent directory, under a different name.)
638
+
639
+ if ($opt_shell_path) {
640
+ # if the user provided a path to the shell, return that.
641
+ $retval = $opt_shell_path;
642
+
643
+ } else {
644
+
645
+ if ($os_type eq "MAC") {
646
+ $retval = $opt_suite_path . ":src:macbuild:JS";
647
+ } else {
648
+ $retval = $opt_suite_path . "../src/";
649
+ opendir (SRC_DIR_FILES, $retval);
650
+ my @src_dir_files = readdir(SRC_DIR_FILES);
651
+ closedir (SRC_DIR_FILES);
652
+
653
+ my ($dir, $object_dir);
654
+ my $pattern = ($opt_engine_type eq "smdebug") ?
655
+ 'DBG.OBJ' : 'OPT.OBJ';
656
+
657
+ # scan for the first directory matching
658
+ # the pattern expected to hold this type (debug or opt) of engine
659
+ foreach $dir (@src_dir_files) {
660
+ if ($dir =~ $pattern) {
661
+ $object_dir = $dir;
662
+ last;
663
+ }
664
+ }
665
+
666
+ if (!$object_dir && $os_type ne "WIN") {
667
+ die ("Could not locate an object directory in $retval " .
668
+ "matching the pattern *$pattern. Have you built the " .
669
+ "engine?\n");
670
+ }
671
+
672
+ if (!(-x $retval . $object_dir . "/js.exe") && ($os_type eq "WIN")) {
673
+ # On windows, you can build with js.mak as well as Makefile.ref
674
+ # (Can you say WTF boys and girls? I knew you could.)
675
+ # So, if the exe the would have been built by Makefile.ref isn't
676
+ # here, check for the js.mak version before dying.
677
+ if ($opt_shell_path) {
678
+ $retval = $opt_shell_path;
679
+ if (!($retval =~ /[\/\\]$/)) {
680
+ $retval .= "/";
681
+ }
682
+ } else {
683
+ if ($opt_engine_type eq "smopt") {
684
+ $retval = "../src/Release/";
685
+ } else {
686
+ $retval = "../src/Debug/";
687
+ }
688
+ }
689
+
690
+ $retval .= "jsshell.exe";
691
+
692
+ } else {
693
+ $retval .= $object_dir . "/js";
694
+ if ($os_type eq "WIN") {
695
+ $retval .= ".exe";
696
+ }
697
+ }
698
+ } # mac/ not mac
699
+
700
+ $retval = &xp_path($retval);
701
+
702
+ } # (user provided a path)
703
+
704
+
705
+ if (($os_type ne "MAC") && !(-x $retval)) {
706
+ # mac doesn't seem to deal with -x correctly
707
+ die ($retval . " is not a valid executable on this system.\n");
708
+ }
709
+
710
+ return $retval;
711
+
712
+ }
713
+
714
+ #
715
+ # get the shell command used to run epimetheus
716
+ #
717
+ sub get_ep_engine_command {
718
+ my $retval;
719
+
720
+ if ($opt_shell_path) {
721
+ # if the user provided a path to the shell, return that -
722
+ $retval = $opt_shell_path;
723
+
724
+ } else {
725
+ my $dir;
726
+ my $os;
727
+ my $debug;
728
+ my $opt;
729
+ my $exe;
730
+
731
+ $dir = $opt_suite_path . "../../js2/src/";
732
+
733
+ if ($os_type eq "MAC") {
734
+ #
735
+ # On the Mac, the debug and opt builds lie in the same directory -
736
+ #
737
+ $os = "macbuild:";
738
+ $debug = "";
739
+ $opt = "";
740
+ $exe = "JS2";
741
+ } elsif ($os_type eq "WIN") {
742
+ $os = "winbuild/Epimetheus/";
743
+ $debug = "Debug/";
744
+ $opt = "Release/";
745
+ $exe = "Epimetheus.exe";
746
+ } else {
747
+ $os = "";
748
+ $debug = "";
749
+ $opt = ""; # <<<----- XXX THIS IS NOT RIGHT! CHANGE IT!
750
+ $exe = "epimetheus";
751
+ }
752
+
753
+
754
+ if ($opt_engine_type eq "epdebug") {
755
+ $retval = $dir . $os . $debug . $exe;
756
+ } else {
757
+ $retval = $dir . $os . $opt . $exe;
758
+ }
759
+
760
+ $retval = &xp_path($retval);
761
+
762
+ }# (user provided a path)
763
+
764
+
765
+ if (($os_type ne "MAC") && !(-x $retval)) {
766
+ # mac doesn't seem to deal with -x correctly
767
+ die ($retval . " is not a valid executable on this system.\n");
768
+ }
769
+
770
+ return $retval;
771
+ }
772
+
773
+ #
774
+ # get the shell command used to run the liveconnect shell
775
+ #
776
+ sub get_lc_engine_command {
777
+ my $retval;
778
+
779
+ if ($opt_shell_path) {
780
+ $retval = $opt_shell_path;
781
+ } else {
782
+ if ($os_type eq "MAC") {
783
+ die "Don't know how to run the lc shell on the mac yet.\n";
784
+ } else {
785
+ $retval = $opt_suite_path . "../src/liveconnect/";
786
+ opendir (SRC_DIR_FILES, $retval);
787
+ my @src_dir_files = readdir(SRC_DIR_FILES);
788
+ closedir (SRC_DIR_FILES);
789
+
790
+ my ($dir, $object_dir);
791
+ my $pattern = ($opt_engine_type eq "lcdebug") ?
792
+ 'DBG.OBJ' : 'OPT.OBJ';
793
+
794
+ foreach $dir (@src_dir_files) {
795
+ if ($dir =~ $pattern) {
796
+ $object_dir = $dir;
797
+ last;
798
+ }
799
+ }
800
+
801
+ if (!$object_dir) {
802
+ die ("Could not locate an object directory in $retval " .
803
+ "matching the pattern *$pattern. Have you built the " .
804
+ "engine?\n");
805
+ }
806
+
807
+ $retval .= $object_dir . "/";
808
+
809
+ if ($os_type eq "WIN") {
810
+ $retval .= "lcshell.exe";
811
+ } else {
812
+ $retval .= "lcshell";
813
+ }
814
+ } # mac/ not mac
815
+
816
+ $retval = &xp_path($retval);
817
+
818
+ } # (user provided a path)
819
+
820
+
821
+ if (($os_type ne "MAC") && !(-x $retval)) {
822
+ # mac doesn't seem to deal with -x correctly
823
+ die ("$retval is not a valid executable on this system.\n");
824
+ }
825
+
826
+ return $retval;
827
+
828
+ }
829
+
830
+ sub get_os_type {
831
+
832
+ if ("\n" eq "\015") {
833
+ return "MAC";
834
+ }
835
+
836
+ my $uname = `uname -a`;
837
+
838
+ if ($uname =~ /WIN/) {
839
+ $uname = "WIN";
840
+ } else {
841
+ chop $uname;
842
+ }
843
+
844
+ &dd ("get_os_type returning '$uname'.");
845
+ return $uname;
846
+
847
+ }
848
+
849
+ sub get_test_list {
850
+ my @test_list;
851
+ my @neg_list;
852
+
853
+ if ($#opt_test_list_files > -1) {
854
+ my $list_file;
855
+
856
+ &dd ("getting test list from user specified source.");
857
+
858
+ foreach $list_file (@opt_test_list_files) {
859
+ push (@test_list, &expand_user_test_list($list_file));
860
+ }
861
+ } else {
862
+ &dd ("no list file, groveling in '$opt_suite_path'.");
863
+
864
+ @test_list = &get_default_test_list($opt_suite_path);
865
+ }
866
+
867
+ if ($#opt_neg_list_files > -1) {
868
+ my $list_file;
869
+ my $orig_size = $#test_list + 1;
870
+ my $actually_skipped;
871
+
872
+ &dd ("getting negative list from user specified source.");
873
+
874
+ foreach $list_file (@opt_neg_list_files) {
875
+ push (@neg_list, &expand_user_test_list($list_file));
876
+ }
877
+
878
+ @test_list = &subtract_arrays (\@test_list, \@neg_list);
879
+
880
+ $actually_skipped = $orig_size - ($#test_list + 1);
881
+
882
+ &dd ($actually_skipped . " of " . $orig_size .
883
+ " tests will be skipped.");
884
+ &dd ((($#neg_list + 1) - $actually_skipped) . " skip tests were " .
885
+ "not actually part of the test list.");
886
+
887
+ }
888
+
889
+
890
+ # Don't run any shell.js files as tests; they are only utility files
891
+ @test_list = grep (!/shell\.js$/, @test_list);
892
+
893
+ return @test_list;
894
+
895
+ }
896
+
897
+ #
898
+ # reads $list_file, storing non-comment lines into an array.
899
+ # lines in the form suite_dir/[*] or suite_dir/test_dir/[*] are expanded
900
+ # to include all test files under the specified directory
901
+ #
902
+ sub expand_user_test_list {
903
+ my ($list_file) = @_;
904
+ my @retval = ();
905
+
906
+ #
907
+ # Trim off the leading path separator that begins relative paths on the Mac.
908
+ # Each path will get concatenated with $opt_suite_path, which ends in one.
909
+ #
910
+ # Also note:
911
+ #
912
+ # We will call expand_test_list_entry(), which does pattern-matching on $list_file.
913
+ # This will make the pattern-matching the same as it would be on Linux/Windows -
914
+ #
915
+ if ($os_type eq "MAC") {
916
+ $list_file =~ s/^$path_sep//;
917
+ }
918
+
919
+ if ($list_file =~ /\.js$/ || -d $opt_suite_path . $list_file) {
920
+
921
+ push (@retval, &expand_test_list_entry($list_file));
922
+
923
+ } else {
924
+
925
+ open (TESTLIST, $list_file) ||
926
+ die("Error opening test list file '$list_file': $!\n");
927
+
928
+ while (<TESTLIST>) {
929
+ s/\r*\n*$//;
930
+ if (!(/\s*\#/)) {
931
+ # It's not a comment, so process it
932
+ push (@retval, &expand_test_list_entry($_));
933
+ }
934
+ }
935
+
936
+ close (TESTLIST);
937
+
938
+ }
939
+
940
+ return @retval;
941
+
942
+ }
943
+
944
+
945
+ #
946
+ # Currently expect all paths to be RELATIVE to the top-level tests directory.
947
+ # One day, this should be improved to allow absolute paths as well -
948
+ #
949
+ sub expand_test_list_entry {
950
+ my ($entry) = @_;
951
+ my @retval;
952
+
953
+ if ($entry =~ /\.js$/) {
954
+ # it's a regular entry, add it to the list
955
+ if (-f $opt_suite_path . $entry) {
956
+ push (@retval, $entry);
957
+ } else {
958
+ status ("testcase '$entry' not found.");
959
+ }
960
+ } elsif ($entry =~ /(.*$path_sep[^\*][^$path_sep]*)$path_sep?\*?$/) {
961
+ # Entry is in the form suite_dir/test_dir[/*]
962
+ # so iterate all tests under it
963
+ my $suite_and_test_dir = $1;
964
+ my @test_files = &get_js_files ($opt_suite_path .
965
+ $suite_and_test_dir);
966
+ my $i;
967
+
968
+ foreach $i (0 .. $#test_files) {
969
+ $test_files[$i] = $suite_and_test_dir . $path_sep .
970
+ $test_files[$i];
971
+ }
972
+
973
+ splice (@retval, $#retval + 1, 0, @test_files);
974
+
975
+ } elsif ($entry =~ /([^\*][^$path_sep]*)$path_sep?\*?$/) {
976
+ # Entry is in the form suite_dir[/*]
977
+ # so iterate all test dirs and tests under it
978
+ my $suite = $1;
979
+ my @test_dirs = &get_subdirs ($opt_suite_path . $suite);
980
+ my $test_dir;
981
+
982
+ foreach $test_dir (@test_dirs) {
983
+ my @test_files = &get_js_files ($opt_suite_path . $suite .
984
+ $path_sep . $test_dir);
985
+ my $i;
986
+
987
+ foreach $i (0 .. $#test_files) {
988
+ $test_files[$i] = $suite . $path_sep . $test_dir . $path_sep .
989
+ $test_files[$i];
990
+ }
991
+
992
+ splice (@retval, $#retval + 1, 0, @test_files);
993
+ }
994
+
995
+ } else {
996
+ die ("Don't know what to do with list entry '$entry'.\n");
997
+ }
998
+
999
+ return @retval;
1000
+
1001
+ }
1002
+
1003
+ #
1004
+ # Grovels through $suite_path, searching for *all* test files. Used when the
1005
+ # user doesn't supply a test list.
1006
+ #
1007
+ sub get_default_test_list {
1008
+ my ($suite_path) = @_;
1009
+ my @suite_list = &get_subdirs($suite_path);
1010
+ my $suite;
1011
+ my @retval;
1012
+
1013
+ foreach $suite (@suite_list) {
1014
+ my @test_dir_list = get_subdirs ($suite_path . $suite);
1015
+ my $test_dir;
1016
+
1017
+ foreach $test_dir (@test_dir_list) {
1018
+ my @test_list = get_js_files ($suite_path . $suite . $path_sep .
1019
+ $test_dir);
1020
+ my $test;
1021
+
1022
+ foreach $test (@test_list) {
1023
+ $retval[$#retval + 1] = $suite . $path_sep . $test_dir .
1024
+ $path_sep . $test;
1025
+ }
1026
+ }
1027
+ }
1028
+
1029
+ return @retval;
1030
+
1031
+ }
1032
+
1033
+ #
1034
+ # generate an output file name based on the date
1035
+ #
1036
+ sub get_tempfile_name {
1037
+ my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
1038
+ &get_padded_time (localtime);
1039
+ my $rv;
1040
+
1041
+ if ($os_type ne "MAC") {
1042
+ $rv = "results-" . $year . "-" . $mon . "-" . $mday . "-" . $hour .
1043
+ $min . $sec . "-" . $opt_engine_type;
1044
+ } else {
1045
+ $rv = "res-" . $year . $mon . $mday . $hour . $min . $sec . "-" .
1046
+ $opt_engine_type
1047
+ }
1048
+
1049
+ return $rv . ".html";
1050
+ }
1051
+
1052
+ sub get_padded_time {
1053
+ my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = @_;
1054
+
1055
+ $mon++;
1056
+ $mon = &zero_pad($mon);
1057
+ $year += 1900;
1058
+ $mday= &zero_pad($mday);
1059
+ $sec = &zero_pad($sec);
1060
+ $min = &zero_pad($min);
1061
+ $hour = &zero_pad($hour);
1062
+
1063
+ return ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
1064
+
1065
+ }
1066
+
1067
+ sub zero_pad {
1068
+ my ($string) = @_;
1069
+
1070
+ $string = ($string < 10) ? "0" . $string : $string;
1071
+ return $string;
1072
+ }
1073
+
1074
+ sub subtract_arrays {
1075
+ my ($whole_ref, $part_ref) = @_;
1076
+ my @whole = @$whole_ref;
1077
+ my @part = @$part_ref;
1078
+ my $line;
1079
+
1080
+ foreach $line (@part) {
1081
+ @whole = grep (!/$line/, @whole);
1082
+ }
1083
+
1084
+ return @whole;
1085
+
1086
+ }
1087
+
1088
+ #
1089
+ # Convert unix path to mac style.
1090
+ #
1091
+ sub unix_to_mac {
1092
+ my ($path) = @_;
1093
+ my @path_elements = split ("/", $path);
1094
+ my $rv = "";
1095
+ my $i;
1096
+
1097
+ foreach $i (0 .. $#path_elements) {
1098
+ if ($path_elements[$i] eq ".") {
1099
+ if (!($rv =~ /\:$/)) {
1100
+ $rv .= ":";
1101
+ }
1102
+ } elsif ($path_elements[$i] eq "..") {
1103
+ if (!($rv =~ /\:$/)) {
1104
+ $rv .= "::";
1105
+ } else {
1106
+ $rv .= ":";
1107
+ }
1108
+ } elsif ($path_elements[$i] ne "") {
1109
+ $rv .= $path_elements[$i] . ":";
1110
+ }
1111
+
1112
+ }
1113
+
1114
+ $rv =~ s/\:$//;
1115
+
1116
+ return $rv;
1117
+ }
1118
+
1119
+ #
1120
+ # Convert unix path to win style.
1121
+ #
1122
+ sub unix_to_win {
1123
+ my ($path) = @_;
1124
+
1125
+ if ($path_sep ne $win_sep) {
1126
+ $path =~ s/$path_sep/$win_sep/g;
1127
+ }
1128
+
1129
+ return $path;
1130
+ }
1131
+
1132
+ #
1133
+ # Windows shells require "/" or "\" as path separator.
1134
+ # Find out the one used in the current Windows shell.
1135
+ #
1136
+ sub get_win_sep {
1137
+ my $path = $ENV{"PATH"} || $ENV{"Path"} || $ENV{"path"};
1138
+ $path =~ /\\|\//;
1139
+ return $&;
1140
+ }
1141
+
1142
+ #
1143
+ # Convert unix path to correct style based on platform.
1144
+ #
1145
+ sub xp_path {
1146
+ my ($path) = @_;
1147
+
1148
+ if ($os_type eq "MAC") {
1149
+ return &unix_to_mac($path);
1150
+ } elsif($os_type eq "WIN") {
1151
+ return &unix_to_win($path);
1152
+ } else {
1153
+ return $path;
1154
+ }
1155
+ }
1156
+
1157
+ #
1158
+ # given a directory, return an array of all subdirectories
1159
+ #
1160
+ sub get_subdirs {
1161
+ my ($dir) = @_;
1162
+ my @subdirs;
1163
+
1164
+ if ($os_type ne "MAC") {
1165
+ if (!($dir =~ /\/$/)) {
1166
+ $dir = $dir . "/";
1167
+ }
1168
+ } else {
1169
+ if (!($dir =~ /\:$/)) {
1170
+ $dir = $dir . ":";
1171
+ }
1172
+ }
1173
+ opendir (DIR, $dir) || die ("couldn't open directory $dir: $!");
1174
+ my @testdir_contents = readdir(DIR);
1175
+ closedir(DIR);
1176
+
1177
+ foreach (@testdir_contents) {
1178
+ if ((-d ($dir . $_)) && ($_ ne 'CVS') && ($_ ne '.') && ($_ ne '..')) {
1179
+ @subdirs[$#subdirs + 1] = $_;
1180
+ }
1181
+ }
1182
+
1183
+ return @subdirs;
1184
+ }
1185
+
1186
+ #
1187
+ # given a directory, return an array of all the js files that are in it.
1188
+ #
1189
+ sub get_js_files {
1190
+ my ($test_subdir) = @_;
1191
+ my (@js_file_array, @subdir_files);
1192
+
1193
+ opendir (TEST_SUBDIR, $test_subdir) || die ("couldn't open directory " .
1194
+ "$test_subdir: $!");
1195
+ @subdir_files = readdir(TEST_SUBDIR);
1196
+ closedir( TEST_SUBDIR );
1197
+
1198
+ foreach (@subdir_files) {
1199
+ if ($_ =~ /\.js$/) {
1200
+ $js_file_array[$#js_file_array+1] = $_;
1201
+ }
1202
+ }
1203
+
1204
+ return @js_file_array;
1205
+ }
1206
+
1207
+ sub report_failure {
1208
+ my ($test, $message, $bug_number) = @_;
1209
+ my $bug_line = "";
1210
+
1211
+ $failures_reported++;
1212
+
1213
+ $message =~ s/\n+/\n/g;
1214
+ $test =~ s/\:/\//g;
1215
+
1216
+ if ($opt_console_failures) {
1217
+ if($bug_number) {
1218
+ print STDERR ("*-* Testcase $test failed:\nBug Number $bug_number".
1219
+ "\n$message\n");
1220
+ } else {
1221
+ print STDERR ("*-* Testcase $test failed:\n$message\n");
1222
+ }
1223
+ }
1224
+
1225
+ $message =~ s/\n/<br>\n/g;
1226
+ $html .= "<a name='failure$failures_reported'></a>";
1227
+
1228
+ if ($bug_number) {
1229
+ $bug_line = "<a href='$opt_bug_url$bug_number' target='other_window'>".
1230
+ "Bug Number $bug_number</a>";
1231
+ }
1232
+
1233
+ if ($opt_lxr_url) {
1234
+ $test =~ /\/?([^\/]+\/[^\/]+\/[^\/]+)$/;
1235
+ $test = $1;
1236
+ $html .= "<dd><b>".
1237
+ "Testcase <a target='other_window' href='$opt_lxr_url$test'>$1</a> " .
1238
+ "failed</b> $bug_line<br>\n";
1239
+ } else {
1240
+ $html .= "<dd><b>".
1241
+ "Testcase $test failed</b> $bug_line<br>\n";
1242
+ }
1243
+
1244
+ $html .= " [ ";
1245
+ if ($failures_reported > 1) {
1246
+ $html .= "<a href='#failure" . ($failures_reported - 1) . "'>" .
1247
+ "Previous Failure</a> | ";
1248
+ }
1249
+
1250
+ $html .= "<a href='#failure" . ($failures_reported + 1) . "'>" .
1251
+ "Next Failure</a> | " .
1252
+ "<a href='#tippy_top'>Top of Page</a> ]<br>\n" .
1253
+ "<tt>$message</tt><br>\n";
1254
+
1255
+ @failed_tests[$#failed_tests + 1] = $test;
1256
+
1257
+ }
1258
+
1259
+ sub dd {
1260
+
1261
+ if ($opt_trace) {
1262
+ print ("-*- ", @_ , "\n");
1263
+ }
1264
+
1265
+ }
1266
+
1267
+ sub status {
1268
+
1269
+ print ("-#- ", @_ , "\n");
1270
+
1271
+ }
1272
+
1273
+ sub int_handler {
1274
+ my $resp;
1275
+
1276
+ do {
1277
+ print ("\n*** User Break: Just [Q]uit, Quit and [R]eport, [C]ontinue ?");
1278
+ $resp = <STDIN>;
1279
+ } until ($resp =~ /[QqRrCc]/);
1280
+
1281
+ if ($resp =~ /[Qq]/) {
1282
+ print ("User Exit. No results were generated.\n");
1283
+ exit;
1284
+ } elsif ($resp =~ /[Rr]/) {
1285
+ $user_exit = 1;
1286
+ }
1287
+
1288
+ }