blockly 12.3.0 → 12.4.0

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 (1636) hide show
  1. package/.prettierignore +30 -0
  2. package/.prettierrc.js +15 -0
  3. package/api-extractor.json +390 -0
  4. package/appengine/.gcloudignore +20 -0
  5. package/appengine/README.txt +42 -0
  6. package/appengine/add_timestamps.py +69 -0
  7. package/appengine/app.yaml +106 -0
  8. package/appengine/apple-touch-icon.png +0 -0
  9. package/appengine/blockly_compressed.js +11 -0
  10. package/appengine/expiration.py +52 -0
  11. package/appengine/favicon.ico +0 -0
  12. package/appengine/index.yaml +11 -0
  13. package/appengine/main.py +39 -0
  14. package/appengine/redirect.html +107 -0
  15. package/appengine/requirements.txt +1 -0
  16. package/appengine/robots.txt +2 -0
  17. package/appengine/storage.js +190 -0
  18. package/appengine/storage.py +125 -0
  19. package/blocks/blocks.ts +44 -0
  20. package/blocks/lists.ts +1065 -0
  21. package/blocks/logic.ts +712 -0
  22. package/blocks/loops.ts +408 -0
  23. package/blocks/math.ts +591 -0
  24. package/blocks/procedures.ts +1366 -0
  25. package/blocks/text.ts +1001 -0
  26. package/blocks/variables.ts +181 -0
  27. package/blocks/variables_dynamic.ts +192 -0
  28. package/core/any_aliases.ts +8 -0
  29. package/core/block.ts +2511 -0
  30. package/core/block_animations.ts +233 -0
  31. package/core/block_flyout_inflater.ts +283 -0
  32. package/core/block_svg.ts +1873 -0
  33. package/core/blockly.ts +644 -0
  34. package/core/blockly_options.ts +71 -0
  35. package/core/blocks.ts +18 -0
  36. package/core/browser_events.ts +256 -0
  37. package/core/bubbles/bubble.ts +732 -0
  38. package/core/bubbles/mini_workspace_bubble.ts +292 -0
  39. package/core/bubbles/text_bubble.ts +112 -0
  40. package/core/bubbles/textinput_bubble.ts +296 -0
  41. package/core/bubbles.ts +12 -0
  42. package/core/bump_objects.ts +188 -0
  43. package/core/button_flyout_inflater.ts +76 -0
  44. package/core/clipboard/block_paster.ts +154 -0
  45. package/core/clipboard/registry.ts +31 -0
  46. package/core/clipboard/workspace_comment_paster.ts +95 -0
  47. package/core/clipboard.ts +197 -0
  48. package/core/comments/collapse_comment_bar_button.ts +102 -0
  49. package/core/comments/comment_bar_button.ts +105 -0
  50. package/core/comments/comment_editor.ts +220 -0
  51. package/core/comments/comment_view.ts +773 -0
  52. package/core/comments/delete_comment_bar_button.ts +106 -0
  53. package/core/comments/rendered_workspace_comment.ts +361 -0
  54. package/core/comments/workspace_comment.ts +247 -0
  55. package/core/comments.ts +13 -0
  56. package/core/common.ts +347 -0
  57. package/core/component_manager.ts +247 -0
  58. package/core/config.ts +65 -0
  59. package/core/connection.ts +807 -0
  60. package/core/connection_checker.ts +348 -0
  61. package/core/connection_db.ts +297 -0
  62. package/core/connection_type.ts +21 -0
  63. package/core/constants.ts +23 -0
  64. package/core/contextmenu.ts +295 -0
  65. package/core/contextmenu_items.ts +684 -0
  66. package/core/contextmenu_registry.ts +278 -0
  67. package/core/css.ts +518 -0
  68. package/core/delete_area.ts +77 -0
  69. package/core/dialog.ts +167 -0
  70. package/core/drag_target.ts +97 -0
  71. package/core/dragging/block_drag_strategy.ts +523 -0
  72. package/core/dragging/bubble_drag_strategy.ts +49 -0
  73. package/core/dragging/comment_drag_strategy.ts +92 -0
  74. package/core/dragging/dragger.ts +174 -0
  75. package/core/dragging.ts +12 -0
  76. package/core/dropdowndiv.ts +792 -0
  77. package/core/events/events.ts +109 -0
  78. package/core/events/events_abstract.ts +129 -0
  79. package/core/events/events_block_base.ts +87 -0
  80. package/core/events/events_block_change.ts +259 -0
  81. package/core/events/events_block_create.ts +185 -0
  82. package/core/events/events_block_delete.ts +182 -0
  83. package/core/events/events_block_drag.ts +116 -0
  84. package/core/events/events_block_field_intermediate_change.ts +166 -0
  85. package/core/events/events_block_move.ts +306 -0
  86. package/core/events/events_bubble_open.ts +121 -0
  87. package/core/events/events_click.ts +110 -0
  88. package/core/events/events_comment_base.ts +126 -0
  89. package/core/events/events_comment_change.ts +156 -0
  90. package/core/events/events_comment_collapse.ts +103 -0
  91. package/core/events/events_comment_create.ts +114 -0
  92. package/core/events/events_comment_delete.ts +113 -0
  93. package/core/events/events_comment_drag.ts +99 -0
  94. package/core/events/events_comment_move.ts +206 -0
  95. package/core/events/events_comment_resize.ts +169 -0
  96. package/core/events/events_selected.ts +97 -0
  97. package/core/events/events_theme_change.ts +84 -0
  98. package/core/events/events_toolbox_item_select.ts +96 -0
  99. package/core/events/events_trashcan_open.ts +87 -0
  100. package/core/events/events_ui_base.ts +47 -0
  101. package/core/events/events_var_base.ts +88 -0
  102. package/core/events/events_var_create.ts +131 -0
  103. package/core/events/events_var_delete.ts +124 -0
  104. package/core/events/events_var_rename.ts +133 -0
  105. package/core/events/events_var_type_change.ts +122 -0
  106. package/core/events/events_viewport.ts +149 -0
  107. package/core/events/predicates.ts +166 -0
  108. package/core/events/type.ts +87 -0
  109. package/core/events/utils.ts +455 -0
  110. package/core/events/workspace_events.ts +46 -0
  111. package/core/extensions.ts +497 -0
  112. package/core/field.ts +1445 -0
  113. package/core/field_checkbox.ts +266 -0
  114. package/core/field_dropdown.ts +907 -0
  115. package/core/field_image.ts +307 -0
  116. package/core/field_input.ts +826 -0
  117. package/core/field_label.ts +150 -0
  118. package/core/field_label_serializable.ts +73 -0
  119. package/core/field_number.ts +381 -0
  120. package/core/field_registry.ts +115 -0
  121. package/core/field_textinput.ts +125 -0
  122. package/core/field_variable.ts +654 -0
  123. package/core/flyout_base.ts +1013 -0
  124. package/core/flyout_button.ts +447 -0
  125. package/core/flyout_horizontal.ts +375 -0
  126. package/core/flyout_item.ts +33 -0
  127. package/core/flyout_metrics_manager.ts +90 -0
  128. package/core/flyout_navigator.ts +24 -0
  129. package/core/flyout_separator.ts +94 -0
  130. package/core/flyout_vertical.ts +354 -0
  131. package/core/focus_manager.ts +675 -0
  132. package/core/generator.ts +611 -0
  133. package/core/gesture.ts +1190 -0
  134. package/core/grid.ts +267 -0
  135. package/core/icons/comment_icon.ts +429 -0
  136. package/core/icons/exceptions.ts +23 -0
  137. package/core/icons/icon.ts +204 -0
  138. package/core/icons/icon_types.ts +32 -0
  139. package/core/icons/mutator_icon.ts +360 -0
  140. package/core/icons/registry.ts +33 -0
  141. package/core/icons/warning_icon.ts +226 -0
  142. package/core/icons.ts +24 -0
  143. package/core/inject.ts +332 -0
  144. package/core/inputs/align.ts +14 -0
  145. package/core/inputs/dummy_input.ts +26 -0
  146. package/core/inputs/end_row_input.ts +31 -0
  147. package/core/inputs/input.ts +317 -0
  148. package/core/inputs/input_types.ts +27 -0
  149. package/core/inputs/statement_input.ts +34 -0
  150. package/core/inputs/value_input.ts +30 -0
  151. package/core/inputs.ts +23 -0
  152. package/core/insertion_marker_previewer.ts +268 -0
  153. package/core/interfaces/i_autohideable.ts +27 -0
  154. package/core/interfaces/i_bounded_element.ts +31 -0
  155. package/core/interfaces/i_bubble.ts +64 -0
  156. package/core/interfaces/i_collapsible_toolbox_item.ts +33 -0
  157. package/core/interfaces/i_comment_icon.ts +47 -0
  158. package/core/interfaces/i_component.ts +19 -0
  159. package/core/interfaces/i_connection_checker.ts +101 -0
  160. package/core/interfaces/i_connection_previewer.ts +50 -0
  161. package/core/interfaces/i_contextmenu.ts +21 -0
  162. package/core/interfaces/i_copyable.ts +39 -0
  163. package/core/interfaces/i_deletable.ts +35 -0
  164. package/core/interfaces/i_delete_area.ts +28 -0
  165. package/core/interfaces/i_drag_target.ts +67 -0
  166. package/core/interfaces/i_draggable.ts +73 -0
  167. package/core/interfaces/i_dragger.ts +35 -0
  168. package/core/interfaces/i_flyout.ts +190 -0
  169. package/core/interfaces/i_flyout_inflater.ts +51 -0
  170. package/core/interfaces/i_focusable_node.ts +120 -0
  171. package/core/interfaces/i_focusable_tree.ts +144 -0
  172. package/core/interfaces/i_has_bubble.ts +37 -0
  173. package/core/interfaces/i_icon.ts +116 -0
  174. package/core/interfaces/i_keyboard_accessible.ts +22 -0
  175. package/core/interfaces/i_legacy_procedure_blocks.ts +51 -0
  176. package/core/interfaces/i_metrics_manager.ts +150 -0
  177. package/core/interfaces/i_movable.ts +19 -0
  178. package/core/interfaces/i_navigation_policy.ts +69 -0
  179. package/core/interfaces/i_observable.ts +28 -0
  180. package/core/interfaces/i_parameter_model.ts +51 -0
  181. package/core/interfaces/i_paster.ts +25 -0
  182. package/core/interfaces/i_positionable.ts +33 -0
  183. package/core/interfaces/i_procedure_block.ts +29 -0
  184. package/core/interfaces/i_procedure_map.ts +18 -0
  185. package/core/interfaces/i_procedure_model.ts +71 -0
  186. package/core/interfaces/i_registrable.ts +12 -0
  187. package/core/interfaces/i_rendered_element.ts +19 -0
  188. package/core/interfaces/i_selectable.ts +41 -0
  189. package/core/interfaces/i_selectable_toolbox_item.ts +63 -0
  190. package/core/interfaces/i_serializable.ts +32 -0
  191. package/core/interfaces/i_serializer.ts +51 -0
  192. package/core/interfaces/i_styleable.ts +26 -0
  193. package/core/interfaces/i_toolbox.ts +121 -0
  194. package/core/interfaces/i_toolbox_item.ts +83 -0
  195. package/core/interfaces/i_variable_backed_parameter_model.ts +23 -0
  196. package/core/interfaces/i_variable_map.ts +65 -0
  197. package/core/interfaces/i_variable_model.ts +57 -0
  198. package/core/internal_constants.ts +47 -0
  199. package/core/keyboard_nav/block_comment_navigation_policy.ts +76 -0
  200. package/core/keyboard_nav/block_navigation_policy.ts +213 -0
  201. package/core/keyboard_nav/comment_bar_button_navigation_policy.ts +88 -0
  202. package/core/keyboard_nav/comment_editor_navigation_policy.ts +54 -0
  203. package/core/keyboard_nav/connection_navigation_policy.ts +155 -0
  204. package/core/keyboard_nav/field_navigation_policy.ts +85 -0
  205. package/core/keyboard_nav/flyout_button_navigation_policy.ts +76 -0
  206. package/core/keyboard_nav/flyout_navigation_policy.ts +111 -0
  207. package/core/keyboard_nav/flyout_separator_navigation_policy.ts +53 -0
  208. package/core/keyboard_nav/icon_navigation_policy.ts +93 -0
  209. package/core/keyboard_nav/line_cursor.ts +414 -0
  210. package/core/keyboard_nav/marker.ts +86 -0
  211. package/core/keyboard_nav/workspace_comment_navigation_policy.ts +77 -0
  212. package/core/keyboard_nav/workspace_navigation_policy.ts +77 -0
  213. package/core/keyboard_navigation_controller.ts +63 -0
  214. package/core/label_flyout_inflater.ts +75 -0
  215. package/core/layer_manager.ts +229 -0
  216. package/core/layers.ts +17 -0
  217. package/core/main.ts +31 -0
  218. package/core/marker_manager.ts +116 -0
  219. package/core/menu.ts +486 -0
  220. package/core/menu_separator.ts +38 -0
  221. package/core/menuitem.ts +289 -0
  222. package/core/metrics_manager.ts +486 -0
  223. package/core/msg.ts +27 -0
  224. package/core/names.ts +275 -0
  225. package/core/navigator.ts +123 -0
  226. package/core/observable_procedure_map.ts +66 -0
  227. package/core/options.ts +377 -0
  228. package/core/positionable_helpers.ts +186 -0
  229. package/core/procedures.ts +622 -0
  230. package/core/registry.ts +400 -0
  231. package/core/render_management.ts +193 -0
  232. package/core/rendered_connection.ts +690 -0
  233. package/core/renderers/common/block_rendering.ts +122 -0
  234. package/core/renderers/common/constants.ts +1226 -0
  235. package/core/renderers/common/drawer.ts +511 -0
  236. package/core/renderers/common/i_path_object.ts +109 -0
  237. package/core/renderers/common/info.ts +768 -0
  238. package/core/renderers/common/path_object.ts +260 -0
  239. package/core/renderers/common/renderer.ts +236 -0
  240. package/core/renderers/geras/constants.ts +42 -0
  241. package/core/renderers/geras/drawer.ts +166 -0
  242. package/core/renderers/geras/geras.ts +31 -0
  243. package/core/renderers/geras/highlight_constants.ts +342 -0
  244. package/core/renderers/geras/highlighter.ts +312 -0
  245. package/core/renderers/geras/info.ts +476 -0
  246. package/core/renderers/geras/measurables/inline_input.ts +36 -0
  247. package/core/renderers/geras/measurables/statement_input.ts +35 -0
  248. package/core/renderers/geras/path_object.ts +121 -0
  249. package/core/renderers/geras/renderer.ts +127 -0
  250. package/core/renderers/measurables/base.ts +40 -0
  251. package/core/renderers/measurables/bottom_row.ts +103 -0
  252. package/core/renderers/measurables/connection.ts +41 -0
  253. package/core/renderers/measurables/external_value_input.ts +51 -0
  254. package/core/renderers/measurables/field.ts +48 -0
  255. package/core/renderers/measurables/hat.ts +32 -0
  256. package/core/renderers/measurables/icon.ts +40 -0
  257. package/core/renderers/measurables/in_row_spacer.ts +36 -0
  258. package/core/renderers/measurables/inline_input.ts +61 -0
  259. package/core/renderers/measurables/input_connection.ts +56 -0
  260. package/core/renderers/measurables/input_row.ts +62 -0
  261. package/core/renderers/measurables/jagged_edge.ts +35 -0
  262. package/core/renderers/measurables/next_connection.ts +41 -0
  263. package/core/renderers/measurables/output_connection.ts +42 -0
  264. package/core/renderers/measurables/previous_connection.ts +41 -0
  265. package/core/renderers/measurables/round_corner.ts +41 -0
  266. package/core/renderers/measurables/row.ts +190 -0
  267. package/core/renderers/measurables/spacer_row.ts +43 -0
  268. package/core/renderers/measurables/square_corner.ts +39 -0
  269. package/core/renderers/measurables/statement_input.ts +47 -0
  270. package/core/renderers/measurables/top_row.ts +108 -0
  271. package/core/renderers/measurables/types.ts +362 -0
  272. package/core/renderers/thrasos/info.ts +327 -0
  273. package/core/renderers/thrasos/renderer.ts +39 -0
  274. package/core/renderers/thrasos/thrasos.ts +14 -0
  275. package/core/renderers/zelos/constants.ts +913 -0
  276. package/core/renderers/zelos/drawer.ts +272 -0
  277. package/core/renderers/zelos/info.ts +651 -0
  278. package/core/renderers/zelos/measurables/bottom_row.ts +44 -0
  279. package/core/renderers/zelos/measurables/inputs.ts +40 -0
  280. package/core/renderers/zelos/measurables/row_elements.ts +29 -0
  281. package/core/renderers/zelos/measurables/top_row.ts +50 -0
  282. package/core/renderers/zelos/path_object.ts +209 -0
  283. package/core/renderers/zelos/renderer.ts +91 -0
  284. package/core/renderers/zelos/zelos.ts +31 -0
  285. package/core/scrollbar.ts +898 -0
  286. package/core/scrollbar_pair.ts +349 -0
  287. package/core/separator_flyout_inflater.ts +83 -0
  288. package/core/serialization/blocks.ts +834 -0
  289. package/core/serialization/exceptions.ts +112 -0
  290. package/core/serialization/priorities.ts +25 -0
  291. package/core/serialization/procedures.ts +158 -0
  292. package/core/serialization/registry.ts +30 -0
  293. package/core/serialization/variables.ts +69 -0
  294. package/core/serialization/workspace_comments.ts +143 -0
  295. package/core/serialization/workspaces.ts +94 -0
  296. package/core/serialization.ts +32 -0
  297. package/core/shortcut_items.ts +405 -0
  298. package/core/shortcut_registry.ts +451 -0
  299. package/core/sprites.ts +15 -0
  300. package/core/theme/classic.ts +40 -0
  301. package/core/theme/themes.ts +12 -0
  302. package/core/theme/zelos.ts +80 -0
  303. package/core/theme.ts +232 -0
  304. package/core/theme_manager.ts +192 -0
  305. package/core/toast.ts +219 -0
  306. package/core/toolbox/category.ts +746 -0
  307. package/core/toolbox/collapsible_category.ts +287 -0
  308. package/core/toolbox/separator.ts +108 -0
  309. package/core/toolbox/toolbox.ts +1210 -0
  310. package/core/toolbox/toolbox_item.ts +181 -0
  311. package/core/tooltip.ts +466 -0
  312. package/core/touch.ts +155 -0
  313. package/core/trashcan.ts +730 -0
  314. package/core/utils/aria.ts +158 -0
  315. package/core/utils/array.ts +24 -0
  316. package/core/utils/colour.ts +265 -0
  317. package/core/utils/coordinate.ts +129 -0
  318. package/core/utils/deprecation.ts +47 -0
  319. package/core/utils/dom.ts +356 -0
  320. package/core/utils/drag.ts +74 -0
  321. package/core/utils/focusable_tree_traverser.ts +126 -0
  322. package/core/utils/idgenerator.ts +70 -0
  323. package/core/utils/keycodes.ts +154 -0
  324. package/core/utils/math.ts +50 -0
  325. package/core/utils/metrics.ts +86 -0
  326. package/core/utils/object.ts +33 -0
  327. package/core/utils/parsing.ts +286 -0
  328. package/core/utils/rect.ts +142 -0
  329. package/core/utils/size.ts +62 -0
  330. package/core/utils/string.ts +289 -0
  331. package/core/utils/style.ts +219 -0
  332. package/core/utils/svg.ts +84 -0
  333. package/core/utils/svg_math.ts +207 -0
  334. package/core/utils/svg_paths.ts +133 -0
  335. package/core/utils/toolbox.ts +417 -0
  336. package/core/utils/useragent.ts +86 -0
  337. package/core/utils/xml.ts +165 -0
  338. package/core/utils.ts +59 -0
  339. package/core/variable_map.ts +476 -0
  340. package/core/variable_model.ts +150 -0
  341. package/core/variables.ts +931 -0
  342. package/core/variables_dynamic.ts +230 -0
  343. package/core/widgetdiv.ts +349 -0
  344. package/core/workspace.ts +994 -0
  345. package/core/workspace_audio.ts +137 -0
  346. package/core/workspace_dragger.ts +81 -0
  347. package/core/workspace_svg.ts +2954 -0
  348. package/core/xml.ts +1126 -0
  349. package/core/zoom_controls.ts +495 -0
  350. package/demos/blockfactory/analytics.js +195 -0
  351. package/demos/blockfactory/app_controller.js +726 -0
  352. package/demos/blockfactory/block_definition_extractor.js +742 -0
  353. package/demos/blockfactory/block_exporter_controller.js +311 -0
  354. package/demos/blockfactory/block_exporter_tools.js +212 -0
  355. package/demos/blockfactory/block_exporter_view.js +101 -0
  356. package/demos/blockfactory/block_library_controller.js +325 -0
  357. package/demos/blockfactory/block_library_storage.js +149 -0
  358. package/demos/blockfactory/block_library_view.js +178 -0
  359. package/demos/blockfactory/block_option.js +151 -0
  360. package/demos/blockfactory/blocks.js +920 -0
  361. package/demos/blockfactory/cp.css +46 -0
  362. package/demos/blockfactory/cp.js +179 -0
  363. package/demos/blockfactory/factory.css +586 -0
  364. package/demos/blockfactory/factory.js +338 -0
  365. package/demos/blockfactory/factory_utils.js +1036 -0
  366. package/demos/blockfactory/icon.png +0 -0
  367. package/demos/blockfactory/index.html +767 -0
  368. package/demos/blockfactory/link.png +0 -0
  369. package/demos/blockfactory/standard_categories.js +384 -0
  370. package/demos/blockfactory/workspacefactory/wfactory_controller.js +1332 -0
  371. package/demos/blockfactory/workspacefactory/wfactory_generator.js +224 -0
  372. package/demos/blockfactory/workspacefactory/wfactory_init.js +541 -0
  373. package/demos/blockfactory/workspacefactory/wfactory_model.js +548 -0
  374. package/demos/blockfactory/workspacefactory/wfactory_view.js +424 -0
  375. package/demos/code/code.js +626 -0
  376. package/demos/code/icon.png +0 -0
  377. package/demos/code/icons.png +0 -0
  378. package/demos/code/index.html +359 -0
  379. package/demos/code/msg/ar.js +24 -0
  380. package/demos/code/msg/be-tarask.js +24 -0
  381. package/demos/code/msg/br.js +24 -0
  382. package/demos/code/msg/ca.js +24 -0
  383. package/demos/code/msg/cs.js +24 -0
  384. package/demos/code/msg/da.js +24 -0
  385. package/demos/code/msg/de.js +24 -0
  386. package/demos/code/msg/el.js +24 -0
  387. package/demos/code/msg/en.js +24 -0
  388. package/demos/code/msg/es.js +24 -0
  389. package/demos/code/msg/et.js +24 -0
  390. package/demos/code/msg/fa.js +24 -0
  391. package/demos/code/msg/fr.js +24 -0
  392. package/demos/code/msg/he.js +24 -0
  393. package/demos/code/msg/hr.js +24 -0
  394. package/demos/code/msg/hrx.js +24 -0
  395. package/demos/code/msg/hu.js +24 -0
  396. package/demos/code/msg/ia.js +24 -0
  397. package/demos/code/msg/is.js +24 -0
  398. package/demos/code/msg/it.js +24 -0
  399. package/demos/code/msg/ja.js +24 -0
  400. package/demos/code/msg/kab.js +24 -0
  401. package/demos/code/msg/ko.js +24 -0
  402. package/demos/code/msg/mk.js +24 -0
  403. package/demos/code/msg/ms.js +24 -0
  404. package/demos/code/msg/nb.js +24 -0
  405. package/demos/code/msg/nl.js +24 -0
  406. package/demos/code/msg/oc.js +24 -0
  407. package/demos/code/msg/pl.js +24 -0
  408. package/demos/code/msg/pms.js +24 -0
  409. package/demos/code/msg/pt-br.js +24 -0
  410. package/demos/code/msg/ro.js +24 -0
  411. package/demos/code/msg/ru.js +24 -0
  412. package/demos/code/msg/sc.js +24 -0
  413. package/demos/code/msg/sk.js +24 -0
  414. package/demos/code/msg/sr.js +24 -0
  415. package/demos/code/msg/sv.js +24 -0
  416. package/demos/code/msg/ta.js +24 -0
  417. package/demos/code/msg/th.js +24 -0
  418. package/demos/code/msg/tlh.js +24 -0
  419. package/demos/code/msg/tr.js +24 -0
  420. package/demos/code/msg/uk.js +24 -0
  421. package/demos/code/msg/vi.js +24 -0
  422. package/demos/code/msg/zh-hans.js +24 -0
  423. package/demos/code/msg/zh-hant.js +24 -0
  424. package/demos/code/style.css +184 -0
  425. package/demos/index.html +68 -0
  426. package/demos/storage/icon.png +0 -0
  427. package/demos/storage/index.html +104 -0
  428. package/eslint.config.mjs +314 -0
  429. package/generators/dart/dart_generator.ts +321 -0
  430. package/generators/dart/lists.ts +525 -0
  431. package/generators/dart/logic.ts +157 -0
  432. package/generators/dart/loops.ts +217 -0
  433. package/generators/dart/math.ts +559 -0
  434. package/generators/dart/procedures.ts +138 -0
  435. package/generators/dart/text.ts +405 -0
  436. package/generators/dart/variables.ts +32 -0
  437. package/generators/dart/variables_dynamic.ts +17 -0
  438. package/generators/dart.ts +50 -0
  439. package/generators/javascript/javascript_generator.ts +346 -0
  440. package/generators/javascript/lists.ts +465 -0
  441. package/generators/javascript/logic.ts +155 -0
  442. package/generators/javascript/loops.ts +245 -0
  443. package/generators/javascript/math.ts +450 -0
  444. package/generators/javascript/procedures.ts +142 -0
  445. package/generators/javascript/text.ts +418 -0
  446. package/generators/javascript/variables.ts +32 -0
  447. package/generators/javascript/variables_dynamic.ts +17 -0
  448. package/generators/javascript.ts +46 -0
  449. package/generators/lua/lists.ts +445 -0
  450. package/generators/lua/logic.ts +144 -0
  451. package/generators/lua/loops.ts +192 -0
  452. package/generators/lua/lua_generator.ts +225 -0
  453. package/generators/lua/math.ts +473 -0
  454. package/generators/lua/procedures.ts +144 -0
  455. package/generators/lua/text.ts +380 -0
  456. package/generators/lua/variables.ts +31 -0
  457. package/generators/lua/variables_dynamic.ts +17 -0
  458. package/generators/lua.ts +44 -0
  459. package/generators/php/lists.ts +585 -0
  460. package/generators/php/logic.ts +157 -0
  461. package/generators/php/loops.ts +218 -0
  462. package/generators/php/math.ts +408 -0
  463. package/generators/php/php_generator.ts +320 -0
  464. package/generators/php/procedures.ts +159 -0
  465. package/generators/php/text.ts +315 -0
  466. package/generators/php/variables.ts +32 -0
  467. package/generators/php/variables_dynamic.ts +17 -0
  468. package/generators/php.ts +46 -0
  469. package/generators/python/lists.ts +398 -0
  470. package/generators/python/logic.ts +152 -0
  471. package/generators/python/loops.ts +251 -0
  472. package/generators/python/math.ts +434 -0
  473. package/generators/python/procedures.ts +159 -0
  474. package/generators/python/python_generator.ts +355 -0
  475. package/generators/python/text.ts +338 -0
  476. package/generators/python/variables.ts +31 -0
  477. package/generators/python/variables_dynamic.ts +17 -0
  478. package/generators/python.ts +51 -0
  479. package/gulpfile.mjs +100 -0
  480. package/jsconfig.json +7 -0
  481. package/msg/json/README.md +33 -0
  482. package/msg/json/ab.json +222 -0
  483. package/msg/json/ace.json +7 -0
  484. package/msg/json/af.json +34 -0
  485. package/msg/json/am.json +30 -0
  486. package/msg/json/ar.json +355 -0
  487. package/msg/json/ast.json +10 -0
  488. package/msg/json/az.json +334 -0
  489. package/msg/json/ba.json +211 -0
  490. package/msg/json/bcc.json +290 -0
  491. package/msg/json/be-tarask.json +335 -0
  492. package/msg/json/be.json +326 -0
  493. package/msg/json/bg.json +347 -0
  494. package/msg/json/bn.json +189 -0
  495. package/msg/json/br.json +334 -0
  496. package/msg/json/bs.json +166 -0
  497. package/msg/json/ca.json +341 -0
  498. package/msg/json/cdo.json +6 -0
  499. package/msg/json/ce.json +328 -0
  500. package/msg/json/constants.json +12 -0
  501. package/msg/json/cs.json +344 -0
  502. package/msg/json/da.json +346 -0
  503. package/msg/json/de.json +369 -0
  504. package/msg/json/diq.json +264 -0
  505. package/msg/json/dtp.json +198 -0
  506. package/msg/json/dty.json +97 -0
  507. package/msg/json/ee.json +160 -0
  508. package/msg/json/el.json +356 -0
  509. package/msg/json/en-gb.json +199 -0
  510. package/msg/json/en.json +423 -0
  511. package/msg/json/eo.json +337 -0
  512. package/msg/json/es.json +361 -0
  513. package/msg/json/et.json +335 -0
  514. package/msg/json/eu.json +219 -0
  515. package/msg/json/fa.json +342 -0
  516. package/msg/json/fi.json +350 -0
  517. package/msg/json/fo.json +46 -0
  518. package/msg/json/fr.json +374 -0
  519. package/msg/json/frr.json +6 -0
  520. package/msg/json/gl.json +338 -0
  521. package/msg/json/gn.json +54 -0
  522. package/msg/json/gor.json +87 -0
  523. package/msg/json/ha.json +313 -0
  524. package/msg/json/hak.json +17 -0
  525. package/msg/json/he.json +355 -0
  526. package/msg/json/hi.json +318 -0
  527. package/msg/json/hr.json +337 -0
  528. package/msg/json/hrx.json +287 -0
  529. package/msg/json/hsb.json +128 -0
  530. package/msg/json/hu.json +349 -0
  531. package/msg/json/hy.json +337 -0
  532. package/msg/json/ia.json +337 -0
  533. package/msg/json/id.json +338 -0
  534. package/msg/json/ig.json +323 -0
  535. package/msg/json/inh.json +80 -0
  536. package/msg/json/is.json +331 -0
  537. package/msg/json/it.json +346 -0
  538. package/msg/json/ja.json +362 -0
  539. package/msg/json/ka.json +14 -0
  540. package/msg/json/kab.json +323 -0
  541. package/msg/json/kbd-cyrl.json +84 -0
  542. package/msg/json/km.json +29 -0
  543. package/msg/json/kn.json +333 -0
  544. package/msg/json/ko.json +377 -0
  545. package/msg/json/ksh.json +43 -0
  546. package/msg/json/ku-latn.json +41 -0
  547. package/msg/json/ky.json +71 -0
  548. package/msg/json/la.json +6 -0
  549. package/msg/json/lb.json +156 -0
  550. package/msg/json/lki.json +282 -0
  551. package/msg/json/lo.json +92 -0
  552. package/msg/json/lrc.json +123 -0
  553. package/msg/json/lt.json +321 -0
  554. package/msg/json/lv.json +324 -0
  555. package/msg/json/mg.json +58 -0
  556. package/msg/json/mk.json +178 -0
  557. package/msg/json/ml.json +35 -0
  558. package/msg/json/mnw.json +90 -0
  559. package/msg/json/ms.json +300 -0
  560. package/msg/json/my.json +57 -0
  561. package/msg/json/mzn.json +6 -0
  562. package/msg/json/nb.json +331 -0
  563. package/msg/json/ne.json +247 -0
  564. package/msg/json/nl.json +358 -0
  565. package/msg/json/oc.json +194 -0
  566. package/msg/json/olo.json +37 -0
  567. package/msg/json/pa.json +75 -0
  568. package/msg/json/pl.json +358 -0
  569. package/msg/json/pms.json +325 -0
  570. package/msg/json/ps.json +50 -0
  571. package/msg/json/pt-br.json +371 -0
  572. package/msg/json/pt.json +360 -0
  573. package/msg/json/qqq.json +430 -0
  574. package/msg/json/ro.json +333 -0
  575. package/msg/json/ru.json +363 -0
  576. package/msg/json/sc.json +283 -0
  577. package/msg/json/sco.json +11 -0
  578. package/msg/json/sd.json +158 -0
  579. package/msg/json/shn.json +109 -0
  580. package/msg/json/si.json +16 -0
  581. package/msg/json/sk.json +339 -0
  582. package/msg/json/skr-arab.json +117 -0
  583. package/msg/json/sl.json +355 -0
  584. package/msg/json/smn.json +133 -0
  585. package/msg/json/sq.json +343 -0
  586. package/msg/json/sr-latn.json +324 -0
  587. package/msg/json/sr.json +349 -0
  588. package/msg/json/sv.json +350 -0
  589. package/msg/json/sw.json +12 -0
  590. package/msg/json/synonyms.json +22 -0
  591. package/msg/json/ta.json +306 -0
  592. package/msg/json/tcy.json +316 -0
  593. package/msg/json/tdd.json +110 -0
  594. package/msg/json/te.json +101 -0
  595. package/msg/json/th.json +333 -0
  596. package/msg/json/ti.json +50 -0
  597. package/msg/json/tl.json +149 -0
  598. package/msg/json/tlh.json +179 -0
  599. package/msg/json/tr.json +370 -0
  600. package/msg/json/ug-arab.json +180 -0
  601. package/msg/json/uk.json +346 -0
  602. package/msg/json/ur.json +118 -0
  603. package/msg/json/uz.json +36 -0
  604. package/msg/json/vi.json +345 -0
  605. package/msg/json/xmf.json +99 -0
  606. package/msg/json/yo.json +316 -0
  607. package/msg/json/zgh.json +83 -0
  608. package/msg/json/zh-hans.json +374 -0
  609. package/msg/json/zh-hant.json +362 -0
  610. package/msg/messages.js +1695 -0
  611. package/package.json +37 -5
  612. package/scripts/gulpfiles/appengine_tasks.mjs +189 -0
  613. package/scripts/gulpfiles/build_tasks.mjs +753 -0
  614. package/scripts/gulpfiles/config.mjs +40 -0
  615. package/scripts/gulpfiles/docs_tasks.mjs +146 -0
  616. package/scripts/gulpfiles/git_tasks.mjs +167 -0
  617. package/scripts/gulpfiles/helper_tasks.mjs +25 -0
  618. package/scripts/gulpfiles/package_tasks.mjs +257 -0
  619. package/scripts/gulpfiles/release_tasks.mjs +174 -0
  620. package/scripts/gulpfiles/test_tasks.mjs +409 -0
  621. package/scripts/helpers.js +74 -0
  622. package/scripts/i18n/common.py +233 -0
  623. package/scripts/i18n/create_messages.py +167 -0
  624. package/scripts/i18n/dedup_json.py +72 -0
  625. package/scripts/i18n/js_to_json.py +135 -0
  626. package/scripts/i18n/tests.py +46 -0
  627. package/scripts/migration/renamings.json5 +1599 -0
  628. package/scripts/package/index.js +23 -0
  629. package/scripts/package/templates/umd-msg.template +16 -0
  630. package/scripts/package/templates/umd.template +13 -0
  631. package/scripts/themes/blockStyles_example.json +11 -0
  632. package/scripts/themes/create_blockStyles.py +184 -0
  633. package/scripts/tsick.js +86 -0
  634. package/tests/browser/.mocharc.js +7 -0
  635. package/tests/browser/test/basic_block_factory_test.mjs +44 -0
  636. package/tests/browser/test/basic_block_test.mjs +38 -0
  637. package/tests/browser/test/basic_playground_test.mjs +461 -0
  638. package/tests/browser/test/block_undo_test.mjs +50 -0
  639. package/tests/browser/test/clipboard_test.mjs +611 -0
  640. package/tests/browser/test/delete_blocks_test.mjs +217 -0
  641. package/tests/browser/test/extensive_test.mjs +191 -0
  642. package/tests/browser/test/field_edits_test.mjs +61 -0
  643. package/tests/browser/test/hooks.mjs +23 -0
  644. package/tests/browser/test/mutator_test.mjs +87 -0
  645. package/tests/browser/test/procedure_test.mjs +109 -0
  646. package/tests/browser/test/test_setup.mjs +623 -0
  647. package/tests/browser/test/toolbox_drag_test.mjs +219 -0
  648. package/tests/browser/test/workspace_comment_test.mjs +220 -0
  649. package/tests/compile/index.html +43 -0
  650. package/tests/compile/main.js +53 -0
  651. package/tests/compile/test_blocks.js +47 -0
  652. package/tests/compile/webdriver.js +81 -0
  653. package/tests/generators/functions.xml +561 -0
  654. package/tests/generators/golden/generated.dart +1604 -0
  655. package/tests/generators/golden/generated.js +1552 -0
  656. package/tests/generators/golden/generated.lua +1828 -0
  657. package/tests/generators/golden/generated.php +1611 -0
  658. package/tests/generators/golden/generated.py +1407 -0
  659. package/tests/generators/index.html +408 -0
  660. package/tests/generators/lists.xml +8675 -0
  661. package/tests/generators/logic.xml +1019 -0
  662. package/tests/generators/loops1.xml +345 -0
  663. package/tests/generators/loops2.xml +891 -0
  664. package/tests/generators/loops3.xml +735 -0
  665. package/tests/generators/math.xml +2077 -0
  666. package/tests/generators/text.xml +4651 -0
  667. package/tests/generators/unittest.js +103 -0
  668. package/tests/generators/unittest_dart.js +163 -0
  669. package/tests/generators/unittest_javascript.js +167 -0
  670. package/tests/generators/unittest_lua.js +165 -0
  671. package/tests/generators/unittest_php.js +154 -0
  672. package/tests/generators/unittest_python.js +138 -0
  673. package/tests/generators/variables.xml +68 -0
  674. package/tests/generators/webdriver.js +123 -0
  675. package/tests/media/200px.png +0 -0
  676. package/tests/media/30px.png +0 -0
  677. package/tests/media/50px.png +0 -0
  678. package/tests/media/a.png +0 -0
  679. package/tests/media/arrow.png +0 -0
  680. package/tests/media/b.png +0 -0
  681. package/tests/media/c.png +0 -0
  682. package/tests/media/d.png +0 -0
  683. package/tests/media/e.png +0 -0
  684. package/tests/media/f.png +0 -0
  685. package/tests/media/g.png +0 -0
  686. package/tests/media/h.png +0 -0
  687. package/tests/media/i.png +0 -0
  688. package/tests/media/j.png +0 -0
  689. package/tests/media/k.png +0 -0
  690. package/tests/media/l.png +0 -0
  691. package/tests/media/m.png +0 -0
  692. package/tests/migration/renamings.schema.json +59 -0
  693. package/tests/migration/validate-renamings.mjs +63 -0
  694. package/tests/mocha/.mocharc.js +6 -0
  695. package/tests/mocha/block_json_test.js +777 -0
  696. package/tests/mocha/block_test.js +2949 -0
  697. package/tests/mocha/blocks/lists_test.js +238 -0
  698. package/tests/mocha/blocks/logic_ternary_test.js +320 -0
  699. package/tests/mocha/blocks/loops_test.js +56 -0
  700. package/tests/mocha/blocks/procedures_test.js +2509 -0
  701. package/tests/mocha/blocks/variables_test.js +345 -0
  702. package/tests/mocha/clipboard_test.js +263 -0
  703. package/tests/mocha/comment_deserialization_test.js +122 -0
  704. package/tests/mocha/comment_test.js +215 -0
  705. package/tests/mocha/comment_view_test.js +188 -0
  706. package/tests/mocha/connection_checker_test.js +694 -0
  707. package/tests/mocha/connection_db_test.js +363 -0
  708. package/tests/mocha/connection_test.js +3738 -0
  709. package/tests/mocha/contextmenu_items_test.js +653 -0
  710. package/tests/mocha/contextmenu_test.js +73 -0
  711. package/tests/mocha/cursor_test.js +922 -0
  712. package/tests/mocha/dialog_test.js +168 -0
  713. package/tests/mocha/dropdowndiv_test.js +458 -0
  714. package/tests/mocha/event_block_change_test.js +126 -0
  715. package/tests/mocha/event_block_create_test.js +109 -0
  716. package/tests/mocha/event_block_delete_test.js +55 -0
  717. package/tests/mocha/event_block_drag_test.js +36 -0
  718. package/tests/mocha/event_block_field_intermediate_change_test.js +67 -0
  719. package/tests/mocha/event_block_move_test.js +39 -0
  720. package/tests/mocha/event_bubble_open_test.js +42 -0
  721. package/tests/mocha/event_click_test.js +40 -0
  722. package/tests/mocha/event_comment_change_test.js +39 -0
  723. package/tests/mocha/event_comment_collapse_test.js +34 -0
  724. package/tests/mocha/event_comment_create_test.js +38 -0
  725. package/tests/mocha/event_comment_delete_test.js +38 -0
  726. package/tests/mocha/event_comment_drag_test.js +35 -0
  727. package/tests/mocha/event_comment_move_test.js +40 -0
  728. package/tests/mocha/event_comment_resize_test.js +38 -0
  729. package/tests/mocha/event_selected_test.js +41 -0
  730. package/tests/mocha/event_test.js +1668 -0
  731. package/tests/mocha/event_theme_change_test.js +36 -0
  732. package/tests/mocha/event_toolbox_item_select_test.js +64 -0
  733. package/tests/mocha/event_trashcan_open_test.js +36 -0
  734. package/tests/mocha/event_var_create_test.js +54 -0
  735. package/tests/mocha/event_var_delete_test.js +54 -0
  736. package/tests/mocha/event_var_rename_test.js +39 -0
  737. package/tests/mocha/event_var_type_change_test.js +43 -0
  738. package/tests/mocha/event_viewport_test.js +39 -0
  739. package/tests/mocha/extensions_test.js +613 -0
  740. package/tests/mocha/field_checkbox_test.js +299 -0
  741. package/tests/mocha/field_colour_test.js +395 -0
  742. package/tests/mocha/field_dropdown_test.js +328 -0
  743. package/tests/mocha/field_image_test.js +351 -0
  744. package/tests/mocha/field_label_serializable_test.js +252 -0
  745. package/tests/mocha/field_label_test.js +226 -0
  746. package/tests/mocha/field_number_test.js +505 -0
  747. package/tests/mocha/field_registry_test.js +115 -0
  748. package/tests/mocha/field_test.js +821 -0
  749. package/tests/mocha/field_textinput_test.js +593 -0
  750. package/tests/mocha/field_variable_test.js +644 -0
  751. package/tests/mocha/flyout_test.js +650 -0
  752. package/tests/mocha/focus_manager_test.js +5979 -0
  753. package/tests/mocha/focusable_tree_traverser_test.js +602 -0
  754. package/tests/mocha/generator_test.js +233 -0
  755. package/tests/mocha/gesture_test.js +133 -0
  756. package/tests/mocha/icon_test.js +431 -0
  757. package/tests/mocha/index.html +354 -0
  758. package/tests/mocha/input_test.js +296 -0
  759. package/tests/mocha/insertion_marker_test.js +432 -0
  760. package/tests/mocha/jso_deserialization_test.js +848 -0
  761. package/tests/mocha/jso_serialization_test.js +1068 -0
  762. package/tests/mocha/json_test.js +303 -0
  763. package/tests/mocha/keyboard_navigation_controller_test.js +37 -0
  764. package/tests/mocha/layering_test.js +104 -0
  765. package/tests/mocha/menu_item_test.js +176 -0
  766. package/tests/mocha/metrics_test.js +671 -0
  767. package/tests/mocha/mutator_test.js +87 -0
  768. package/tests/mocha/names_test.js +97 -0
  769. package/tests/mocha/navigation_test.js +876 -0
  770. package/tests/mocha/old_workspace_comment_test.js +256 -0
  771. package/tests/mocha/procedure_map_test.js +52 -0
  772. package/tests/mocha/rect_test.js +1668 -0
  773. package/tests/mocha/registry_test.js +281 -0
  774. package/tests/mocha/render_management_test.js +127 -0
  775. package/tests/mocha/serializer_test.js +2100 -0
  776. package/tests/mocha/shortcut_items_test.js +563 -0
  777. package/tests/mocha/shortcut_registry_test.js +533 -0
  778. package/tests/mocha/test_helpers/block_definitions.js +204 -0
  779. package/tests/mocha/test_helpers/code_generation.js +114 -0
  780. package/tests/mocha/test_helpers/common.js +106 -0
  781. package/tests/mocha/test_helpers/events.js +290 -0
  782. package/tests/mocha/test_helpers/fields.js +310 -0
  783. package/tests/mocha/test_helpers/icon_mocks.js +130 -0
  784. package/tests/mocha/test_helpers/procedures.js +304 -0
  785. package/tests/mocha/test_helpers/serialization.js +124 -0
  786. package/tests/mocha/test_helpers/setup_teardown.js +232 -0
  787. package/tests/mocha/test_helpers/toolbox_definitions.js +269 -0
  788. package/tests/mocha/test_helpers/user_input.js +62 -0
  789. package/tests/mocha/test_helpers/variables.js +27 -0
  790. package/tests/mocha/test_helpers/warnings.js +83 -0
  791. package/tests/mocha/test_helpers/workspace.js +1659 -0
  792. package/tests/mocha/theme_test.js +307 -0
  793. package/tests/mocha/toast_test.js +129 -0
  794. package/tests/mocha/toolbox_test.js +821 -0
  795. package/tests/mocha/tooltip_test.js +276 -0
  796. package/tests/mocha/touch_test.js +109 -0
  797. package/tests/mocha/trashcan_test.js +376 -0
  798. package/tests/mocha/utils_test.js +557 -0
  799. package/tests/mocha/variable_map_test.js +470 -0
  800. package/tests/mocha/variable_model_test.js +85 -0
  801. package/tests/mocha/webdriver.js +110 -0
  802. package/tests/mocha/widget_div_test.js +427 -0
  803. package/tests/mocha/workspace_comment_test.js +197 -0
  804. package/tests/mocha/workspace_svg_test.js +922 -0
  805. package/tests/mocha/workspace_test.js +24 -0
  806. package/tests/mocha/xml_test.js +893 -0
  807. package/tests/mocha/zoom_controls_test.js +81 -0
  808. package/tests/multi_playground.html +482 -0
  809. package/tests/node/.mocharc.js +6 -0
  810. package/tests/node/run_node_test.mjs +191 -0
  811. package/tests/playground.html +1280 -0
  812. package/tests/playgrounds/advanced_playground.html +188 -0
  813. package/tests/playgrounds/iframe.html +40 -0
  814. package/tests/playgrounds/screenshot.js +123 -0
  815. package/tests/scripts/check_metadata.sh +170 -0
  816. package/tests/scripts/load.mjs +140 -0
  817. package/tests/scripts/setup_linux_env.sh +7 -0
  818. package/tests/scripts/update_metadata.sh +46 -0
  819. package/tests/themes/test_themes.js +62 -0
  820. package/tests/typescript/README.md +4 -0
  821. package/tests/typescript/src/field/different_user_input.ts +81 -0
  822. package/tests/typescript/src/generators/dart.ts +24 -0
  823. package/tests/typescript/src/generators/javascript.ts +28 -0
  824. package/tests/typescript/src/generators/lua.ts +24 -0
  825. package/tests/typescript/src/generators/php.ts +24 -0
  826. package/tests/typescript/src/generators/python.ts +24 -0
  827. package/tests/typescript/src/generators.ts +33 -0
  828. package/tests/typescript/src/msg.ts +20 -0
  829. package/tests/typescript/tsconfig.json +20 -0
  830. package/tests/xml/README.txt +11 -0
  831. package/tests/xml/blockly.xsd +178 -0
  832. package/tests/xml/invalid.xml +6 -0
  833. package/tests/xml/toolbox.xml +311 -0
  834. package/tests/xml/workspace.xml +114 -0
  835. package/tsconfig.json +37 -0
  836. package/tsdoc.json +25 -0
  837. package/typings/README.md +5 -0
  838. package/typings/templates/blockly-header.template +11 -0
  839. package/typings/templates/blockly-interfaces.template +83 -0
  840. package/typings/templates/msg.template +15 -0
  841. package/typings/tsconfig.json +23 -0
  842. package/blockly.min.js +0 -2740
  843. package/blockly.mjs +0 -163
  844. package/blockly_compressed.js +0 -1814
  845. package/blockly_compressed.js.map +0 -1
  846. package/blocks.js +0 -4
  847. package/blocks.mjs +0 -12
  848. package/blocks_compressed.js +0 -193
  849. package/blocks_compressed.js.map +0 -1
  850. package/core/any_aliases.d.ts +0 -7
  851. package/core/block.d.ts +0 -1006
  852. package/core/block_animations.d.ts +0 -34
  853. package/core/block_flyout_inflater.d.ts +0 -94
  854. package/core/block_svg.d.ts +0 -733
  855. package/core/blockly.d.ts +0 -286
  856. package/core/blockly_options.d.ts +0 -70
  857. package/core/blocks.d.ts +0 -17
  858. package/core/browser_events.d.ts +0 -82
  859. package/core/bubbles/bubble.d.ts +0 -228
  860. package/core/bubbles/mini_workspace_bubble.d.ts +0 -84
  861. package/core/bubbles/text_bubble.d.ts +0 -38
  862. package/core/bubbles/textinput_bubble.d.ts +0 -102
  863. package/core/bubbles.d.ts +0 -11
  864. package/core/bump_objects.d.ts +0 -37
  865. package/core/button_flyout_inflater.d.ts +0 -42
  866. package/core/clipboard/block_paster.d.ts +0 -34
  867. package/core/clipboard/registry.d.ts +0 -21
  868. package/core/clipboard/workspace_comment_paster.d.ts +0 -19
  869. package/core/clipboard.d.ts +0 -103
  870. package/core/comments/collapse_comment_bar_button.d.ts +0 -52
  871. package/core/comments/comment_bar_button.d.ts +0 -62
  872. package/core/comments/comment_editor.d.ts +0 -62
  873. package/core/comments/comment_view.d.ts +0 -213
  874. package/core/comments/delete_comment_bar_button.d.ts +0 -52
  875. package/core/comments/rendered_workspace_comment.d.ts +0 -121
  876. package/core/comments/workspace_comment.d.ts +0 -107
  877. package/core/comments.d.ts +0 -13
  878. package/core/common.d.ts +0 -163
  879. package/core/component_manager.d.ts +0 -112
  880. package/core/config.d.ts +0 -24
  881. package/core/connection.d.ts +0 -291
  882. package/core/connection_checker.d.ts +0 -85
  883. package/core/connection_db.d.ts +0 -100
  884. package/core/connection_type.d.ts +0 -15
  885. package/core/constants.d.ts +0 -19
  886. package/core/contextmenu.d.ts +0 -53
  887. package/core/contextmenu_items.d.ts +0 -73
  888. package/core/contextmenu_registry.d.ts +0 -173
  889. package/core/css.d.ts +0 -25
  890. package/core/delete_area.d.ts +0 -48
  891. package/core/dialog.d.ts +0 -82
  892. package/core/drag_target.d.ts +0 -75
  893. package/core/dragging/block_drag_strategy.d.ts +0 -121
  894. package/core/dragging/bubble_drag_strategy.d.ts +0 -20
  895. package/core/dragging/comment_drag_strategy.d.ts +0 -26
  896. package/core/dragging/dragger.d.ts +0 -49
  897. package/core/dragging.d.ts +0 -11
  898. package/core/dropdowndiv.d.ts +0 -208
  899. package/core/events/events.d.ts +0 -72
  900. package/core/events/events_abstract.d.ts +0 -72
  901. package/core/events/events_block_base.d.ts +0 -46
  902. package/core/events/events_block_change.d.ts +0 -100
  903. package/core/events/events_block_create.d.ts +0 -59
  904. package/core/events/events_block_delete.d.ts +0 -62
  905. package/core/events/events_block_drag.d.ts +0 -61
  906. package/core/events/events_block_field_intermediate_change.d.ts +0 -71
  907. package/core/events/events_block_move.d.ts +0 -115
  908. package/core/events/events_bubble_open.d.ts +0 -62
  909. package/core/events/events_click.d.ts +0 -64
  910. package/core/events/events_comment_base.d.ts +0 -55
  911. package/core/events/events_comment_change.d.ts +0 -64
  912. package/core/events/events_comment_collapse.d.ts +0 -40
  913. package/core/events/events_comment_create.d.ts +0 -57
  914. package/core/events/events_comment_delete.d.ts +0 -57
  915. package/core/events/events_comment_drag.d.ts +0 -51
  916. package/core/events/events_comment_move.d.ts +0 -93
  917. package/core/events/events_comment_resize.d.ts +0 -68
  918. package/core/events/events_selected.d.ts +0 -53
  919. package/core/events/events_theme_change.d.ts +0 -43
  920. package/core/events/events_toolbox_item_select.d.ts +0 -49
  921. package/core/events/events_trashcan_open.d.ts +0 -47
  922. package/core/events/events_ui_base.d.ts +0 -32
  923. package/core/events/events_var_base.d.ts +0 -46
  924. package/core/events/events_var_create.d.ts +0 -55
  925. package/core/events/events_var_delete.d.ts +0 -50
  926. package/core/events/events_var_rename.d.ts +0 -51
  927. package/core/events/events_var_type_change.d.ts +0 -55
  928. package/core/events/events_viewport.d.ts +0 -67
  929. package/core/events/predicates.d.ts +0 -87
  930. package/core/events/type.d.ts +0 -81
  931. package/core/events/utils.d.ts +0 -211
  932. package/core/events/workspace_events.d.ts +0 -23
  933. package/core/extensions.d.ts +0 -99
  934. package/core/field.d.ts +0 -724
  935. package/core/field_checkbox.d.ts +0 -156
  936. package/core/field_dropdown.d.ts +0 -295
  937. package/core/field_image.d.ts +0 -148
  938. package/core/field_input.d.ts +0 -293
  939. package/core/field_label.d.ts +0 -80
  940. package/core/field_label_serializable.d.ts +0 -50
  941. package/core/field_number.d.ts +0 -194
  942. package/core/field_registry.d.ts +0 -83
  943. package/core/field_textinput.d.ts +0 -78
  944. package/core/field_variable.d.ts +0 -261
  945. package/core/flyout_base.d.ts +0 -455
  946. package/core/flyout_button.d.ts +0 -139
  947. package/core/flyout_horizontal.d.ts +0 -87
  948. package/core/flyout_item.d.ts +0 -26
  949. package/core/flyout_metrics_manager.d.ts +0 -46
  950. package/core/flyout_navigator.d.ts +0 -11
  951. package/core/flyout_separator.d.ts +0 -64
  952. package/core/flyout_vertical.d.ts +0 -88
  953. package/core/focus_manager.d.ts +0 -266
  954. package/core/generator.d.ts +0 -279
  955. package/core/gesture.d.ts +0 -454
  956. package/core/grid.d.ts +0 -124
  957. package/core/icons/comment_icon.d.ts +0 -134
  958. package/core/icons/exceptions.d.ts +0 -17
  959. package/core/icons/icon.d.ts +0 -82
  960. package/core/icons/icon_types.d.ts +0 -25
  961. package/core/icons/mutator_icon.d.ts +0 -96
  962. package/core/icons/registry.d.ts +0 -23
  963. package/core/icons/warning_icon.d.ts +0 -77
  964. package/core/icons.d.ts +0 -14
  965. package/core/inject.d.ts +0 -16
  966. package/core/inputs/align.d.ts +0 -14
  967. package/core/inputs/dummy_input.d.ts +0 -20
  968. package/core/inputs/end_row_input.d.ts +0 -25
  969. package/core/inputs/input.d.ts +0 -147
  970. package/core/inputs/input_types.d.ts +0 -16
  971. package/core/inputs/statement_input.d.ts +0 -22
  972. package/core/inputs/value_input.d.ts +0 -20
  973. package/core/inputs.d.ts +0 -14
  974. package/core/insertion_marker_previewer.d.ts +0 -67
  975. package/core/interfaces/i_autohideable.d.ts +0 -21
  976. package/core/interfaces/i_bounded_element.d.ts +0 -27
  977. package/core/interfaces/i_bubble.d.ts +0 -55
  978. package/core/interfaces/i_collapsible_toolbox_item.d.ts +0 -28
  979. package/core/interfaces/i_comment_icon.d.ts +0 -24
  980. package/core/interfaces/i_component.d.ts +0 -17
  981. package/core/interfaces/i_connection_checker.d.ts +0 -75
  982. package/core/interfaces/i_connection_previewer.d.ts +0 -39
  983. package/core/interfaces/i_contextmenu.d.ts +0 -14
  984. package/core/interfaces/i_copyable.d.ts +0 -30
  985. package/core/interfaces/i_deletable.d.ts +0 -23
  986. package/core/interfaces/i_delete_area.d.ts +0 -25
  987. package/core/interfaces/i_drag_target.d.ts +0 -59
  988. package/core/interfaces/i_draggable.d.ts +0 -56
  989. package/core/interfaces/i_dragger.d.ts +0 -32
  990. package/core/interfaces/i_flyout.d.ts +0 -159
  991. package/core/interfaces/i_flyout_inflater.d.ts +0 -48
  992. package/core/interfaces/i_focusable_node.d.ts +0 -105
  993. package/core/interfaces/i_focusable_tree.d.ts +0 -125
  994. package/core/interfaces/i_has_bubble.d.ts +0 -27
  995. package/core/interfaces/i_icon.d.ts +0 -84
  996. package/core/interfaces/i_keyboard_accessible.d.ts +0 -19
  997. package/core/interfaces/i_legacy_procedure_blocks.d.ts +0 -34
  998. package/core/interfaces/i_metrics_manager.d.ts +0 -129
  999. package/core/interfaces/i_movable.d.ts +0 -17
  1000. package/core/interfaces/i_navigation_policy.d.ts +0 -63
  1001. package/core/interfaces/i_observable.d.ts +0 -21
  1002. package/core/interfaces/i_parameter_model.d.ts +0 -44
  1003. package/core/interfaces/i_paster.d.ts +0 -15
  1004. package/core/interfaces/i_positionable.d.ts +0 -29
  1005. package/core/interfaces/i_procedure_block.d.ts +0 -16
  1006. package/core/interfaces/i_procedure_map.d.ts +0 -16
  1007. package/core/interfaces/i_procedure_model.d.ts +0 -59
  1008. package/core/interfaces/i_registrable.d.ts +0 -11
  1009. package/core/interfaces/i_rendered_element.d.ts +0 -16
  1010. package/core/interfaces/i_selectable.d.ts +0 -26
  1011. package/core/interfaces/i_selectable_toolbox_item.d.ts +0 -51
  1012. package/core/interfaces/i_serializable.d.ts +0 -24
  1013. package/core/interfaces/i_serializer.d.ts +0 -45
  1014. package/core/interfaces/i_styleable.d.ts +0 -23
  1015. package/core/interfaces/i_toolbox.d.ts +0 -102
  1016. package/core/interfaces/i_toolbox_item.d.ts +0 -71
  1017. package/core/interfaces/i_variable_backed_parameter_model.d.ts +0 -17
  1018. package/core/interfaces/i_variable_map.d.ts +0 -48
  1019. package/core/interfaces/i_variable_model.d.ts +0 -36
  1020. package/core/internal_constants.d.ts +0 -34
  1021. package/core/keyboard_nav/block_comment_navigation_policy.d.ts +0 -56
  1022. package/core/keyboard_nav/block_navigation_policy.d.ts +0 -84
  1023. package/core/keyboard_nav/comment_bar_button_navigation_policy.d.ts +0 -56
  1024. package/core/keyboard_nav/comment_editor_navigation_policy.d.ts +0 -34
  1025. package/core/keyboard_nav/connection_navigation_policy.d.ts +0 -67
  1026. package/core/keyboard_nav/field_navigation_policy.d.ts +0 -56
  1027. package/core/keyboard_nav/flyout_button_navigation_policy.d.ts +0 -56
  1028. package/core/keyboard_nav/flyout_navigation_policy.d.ts +0 -65
  1029. package/core/keyboard_nav/flyout_separator_navigation_policy.d.ts +0 -33
  1030. package/core/keyboard_nav/icon_navigation_policy.d.ts +0 -56
  1031. package/core/keyboard_nav/line_cursor.d.ts +0 -187
  1032. package/core/keyboard_nav/marker.d.ts +0 -53
  1033. package/core/keyboard_nav/workspace_comment_navigation_policy.d.ts +0 -56
  1034. package/core/keyboard_nav/workspace_navigation_policy.d.ts +0 -56
  1035. package/core/keyboard_navigation_controller.d.ts +0 -48
  1036. package/core/label_flyout_inflater.d.ts +0 -42
  1037. package/core/layer_manager.d.ts +0 -86
  1038. package/core/layers.d.ts +0 -16
  1039. package/core/main.d.ts +0 -7
  1040. package/core/marker_manager.d.ts +0 -72
  1041. package/core/menu.d.ts +0 -170
  1042. package/core/menu_separator.d.ts +0 -25
  1043. package/core/menuitem.d.ts +0 -139
  1044. package/core/metrics_manager.d.ts +0 -221
  1045. package/core/msg.d.ts +0 -24
  1046. package/core/names.d.ts +0 -139
  1047. package/core/navigator.d.ts +0 -65
  1048. package/core/observable_procedure_map.d.ts +0 -34
  1049. package/core/options.d.ts +0 -148
  1050. package/core/positionable_helpers.d.ts +0 -89
  1051. package/core/procedures.d.ts +0 -108
  1052. package/core/registry.d.ts +0 -158
  1053. package/core/render_management.d.ts +0 -34
  1054. package/core/rendered_connection.d.ts +0 -263
  1055. package/core/renderers/common/block_rendering.d.ts +0 -63
  1056. package/core/renderers/common/constants.d.ts +0 -454
  1057. package/core/renderers/common/drawer.d.ts +0 -156
  1058. package/core/renderers/common/i_path_object.d.ts +0 -88
  1059. package/core/renderers/common/info.d.ts +0 -201
  1060. package/core/renderers/common/path_object.d.ts +0 -130
  1061. package/core/renderers/common/renderer.d.ts +0 -141
  1062. package/core/renderers/geras/constants.d.ts +0 -22
  1063. package/core/renderers/geras/drawer.d.ts +0 -44
  1064. package/core/renderers/geras/geras.d.ts +0 -17
  1065. package/core/renderers/geras/highlight_constants.d.ts +0 -100
  1066. package/core/renderers/geras/highlighter.d.ts +0 -96
  1067. package/core/renderers/geras/info.d.ts +0 -45
  1068. package/core/renderers/geras/measurables/inline_input.d.ts +0 -22
  1069. package/core/renderers/geras/measurables/statement_input.d.ts +0 -22
  1070. package/core/renderers/geras/path_object.d.ts +0 -42
  1071. package/core/renderers/geras/renderer.d.ts +0 -77
  1072. package/core/renderers/measurables/base.d.ts +0 -26
  1073. package/core/renderers/measurables/bottom_row.d.ts +0 -58
  1074. package/core/renderers/measurables/connection.d.ts +0 -25
  1075. package/core/renderers/measurables/external_value_input.d.ts +0 -25
  1076. package/core/renderers/measurables/field.d.ts +0 -28
  1077. package/core/renderers/measurables/hat.d.ts +0 -19
  1078. package/core/renderers/measurables/icon.d.ts +0 -25
  1079. package/core/renderers/measurables/in_row_spacer.d.ts +0 -20
  1080. package/core/renderers/measurables/inline_input.d.ts +0 -22
  1081. package/core/renderers/measurables/input_connection.d.ts +0 -28
  1082. package/core/renderers/measurables/input_row.d.ts +0 -26
  1083. package/core/renderers/measurables/jagged_edge.d.ts +0 -19
  1084. package/core/renderers/measurables/next_connection.d.ts +0 -22
  1085. package/core/renderers/measurables/output_connection.d.ts +0 -24
  1086. package/core/renderers/measurables/previous_connection.d.ts +0 -22
  1087. package/core/renderers/measurables/round_corner.d.ts +0 -20
  1088. package/core/renderers/measurables/row.d.ts +0 -124
  1089. package/core/renderers/measurables/spacer_row.d.ts +0 -27
  1090. package/core/renderers/measurables/square_corner.d.ts +0 -20
  1091. package/core/renderers/measurables/statement_input.d.ts +0 -21
  1092. package/core/renderers/measurables/top_row.d.ts +0 -53
  1093. package/core/renderers/measurables/types.d.ts +0 -258
  1094. package/core/renderers/thrasos/info.d.ts +0 -37
  1095. package/core/renderers/thrasos/renderer.d.ts +0 -28
  1096. package/core/renderers/thrasos/thrasos.d.ts +0 -10
  1097. package/core/renderers/zelos/constants.d.ts +0 -165
  1098. package/core/renderers/zelos/drawer.d.ts +0 -51
  1099. package/core/renderers/zelos/info.d.ts +0 -89
  1100. package/core/renderers/zelos/measurables/bottom_row.d.ts +0 -26
  1101. package/core/renderers/zelos/measurables/inputs.d.ts +0 -21
  1102. package/core/renderers/zelos/measurables/row_elements.d.ts +0 -20
  1103. package/core/renderers/zelos/measurables/top_row.d.ts +0 -28
  1104. package/core/renderers/zelos/path_object.d.ts +0 -76
  1105. package/core/renderers/zelos/renderer.d.ts +0 -64
  1106. package/core/renderers/zelos/zelos.d.ts +0 -17
  1107. package/core/scrollbar.d.ts +0 -348
  1108. package/core/scrollbar_pair.d.ts +0 -121
  1109. package/core/separator_flyout_inflater.d.ts +0 -57
  1110. package/core/serialization/blocks.d.ts +0 -138
  1111. package/core/serialization/exceptions.d.ts +0 -81
  1112. package/core/serialization/priorities.d.ts +0 -20
  1113. package/core/serialization/procedures.d.ts +0 -97
  1114. package/core/serialization/registry.d.ts +0 -21
  1115. package/core/serialization/variables.d.ts +0 -38
  1116. package/core/serialization/workspace_comments.d.ts +0 -45
  1117. package/core/serialization/workspaces.d.ts +0 -29
  1118. package/core/serialization.d.ts +0 -19
  1119. package/core/shortcut_items.d.ts +0 -54
  1120. package/core/shortcut_registry.d.ts +0 -236
  1121. package/core/sprites.d.ts +0 -15
  1122. package/core/theme/classic.d.ts +0 -12
  1123. package/core/theme/themes.d.ts +0 -9
  1124. package/core/theme/zelos.d.ts +0 -11
  1125. package/core/theme.d.ts +0 -151
  1126. package/core/theme_manager.d.ts +0 -92
  1127. package/core/toast.d.ts +0 -74
  1128. package/core/toolbox/category.d.ts +0 -265
  1129. package/core/toolbox/collapsible_category.d.ts +0 -99
  1130. package/core/toolbox/separator.d.ts +0 -40
  1131. package/core/toolbox/toolbox.d.ts +0 -417
  1132. package/core/toolbox/toolbox_item.d.ts +0 -109
  1133. package/core/tooltip.d.ts +0 -118
  1134. package/core/touch.d.ts +0 -72
  1135. package/core/trashcan.d.ts +0 -212
  1136. package/core/utils/aria.d.ts +0 -69
  1137. package/core/utils/array.d.ts +0 -15
  1138. package/core/utils/colour.d.ts +0 -102
  1139. package/core/utils/coordinate.d.ts +0 -87
  1140. package/core/utils/deprecation.d.ts +0 -18
  1141. package/core/utils/dom.d.ts +0 -154
  1142. package/core/utils/drag.d.ts +0 -33
  1143. package/core/utils/focusable_tree_traverser.d.ts +0 -53
  1144. package/core/utils/idgenerator.d.ts +0 -33
  1145. package/core/utils/keycodes.d.ts +0 -136
  1146. package/core/utils/math.d.ts +0 -31
  1147. package/core/utils/metrics.d.ts +0 -64
  1148. package/core/utils/object.d.ts +0 -17
  1149. package/core/utils/parsing.d.ts +0 -52
  1150. package/core/utils/rect.d.ts +0 -82
  1151. package/core/utils/size.d.ts +0 -44
  1152. package/core/utils/string.d.ts +0 -46
  1153. package/core/utils/style.d.ts +0 -89
  1154. package/core/utils/svg.d.ts +0 -75
  1155. package/core/utils/svg_math.d.ts +0 -64
  1156. package/core/utils/svg_paths.d.ts +0 -103
  1157. package/core/utils/toolbox.d.ts +0 -180
  1158. package/core/utils/useragent.d.ts +0 -14
  1159. package/core/utils/xml.d.ts +0 -96
  1160. package/core/utils.d.ts +0 -31
  1161. package/core/variable_map.d.ts +0 -164
  1162. package/core/variable_model.d.ts +0 -73
  1163. package/core/variables.d.ts +0 -238
  1164. package/core/variables_dynamic.d.ts +0 -56
  1165. package/core/widgetdiv.d.ts +0 -87
  1166. package/core/workspace.d.ts +0 -482
  1167. package/core/workspace_audio.d.ts +0 -61
  1168. package/core/workspace_dragger.d.ts +0 -54
  1169. package/core/workspace_svg.d.ts +0 -1103
  1170. package/core/xml.d.ts +0 -127
  1171. package/core/zoom_controls.d.ts +0 -134
  1172. package/core.js +0 -4
  1173. package/dart.js +0 -4
  1174. package/dart.mjs +0 -6
  1175. package/dart_compressed.js +0 -330
  1176. package/dart_compressed.js.map +0 -1
  1177. package/generators/dart/dart_generator.d.ts +0 -104
  1178. package/generators/dart/lists.d.ts +0 -21
  1179. package/generators/dart/logic.d.ts +0 -20
  1180. package/generators/dart/loops.d.ts +0 -14
  1181. package/generators/dart/math.d.ts +0 -26
  1182. package/generators/dart/procedures.d.ts +0 -14
  1183. package/generators/dart/text.d.ts +0 -25
  1184. package/generators/dart/variables.d.ts +0 -14
  1185. package/generators/dart/variables_dynamic.d.ts +0 -10
  1186. package/generators/dart.d.ts +0 -18
  1187. package/generators/javascript/javascript_generator.d.ts +0 -123
  1188. package/generators/javascript/lists.d.ts +0 -21
  1189. package/generators/javascript/logic.d.ts +0 -20
  1190. package/generators/javascript/loops.d.ts +0 -14
  1191. package/generators/javascript/math.d.ts +0 -26
  1192. package/generators/javascript/procedures.d.ts +0 -14
  1193. package/generators/javascript/text.d.ts +0 -25
  1194. package/generators/javascript/variables.d.ts +0 -14
  1195. package/generators/javascript/variables_dynamic.d.ts +0 -10
  1196. package/generators/javascript.d.ts +0 -18
  1197. package/generators/lua/lists.d.ts +0 -21
  1198. package/generators/lua/logic.d.ts +0 -20
  1199. package/generators/lua/loops.d.ts +0 -14
  1200. package/generators/lua/lua_generator.d.ts +0 -91
  1201. package/generators/lua/math.d.ts +0 -26
  1202. package/generators/lua/procedures.d.ts +0 -14
  1203. package/generators/lua/text.d.ts +0 -25
  1204. package/generators/lua/variables.d.ts +0 -14
  1205. package/generators/lua/variables_dynamic.d.ts +0 -10
  1206. package/generators/lua.d.ts +0 -12
  1207. package/generators/php/lists.d.ts +0 -21
  1208. package/generators/php/logic.d.ts +0 -20
  1209. package/generators/php/loops.d.ts +0 -14
  1210. package/generators/php/math.d.ts +0 -26
  1211. package/generators/php/php_generator.d.ts +0 -122
  1212. package/generators/php/procedures.d.ts +0 -14
  1213. package/generators/php/text.d.ts +0 -25
  1214. package/generators/php/variables.d.ts +0 -14
  1215. package/generators/php/variables_dynamic.d.ts +0 -10
  1216. package/generators/php.d.ts +0 -13
  1217. package/generators/python/lists.d.ts +0 -21
  1218. package/generators/python/logic.d.ts +0 -20
  1219. package/generators/python/loops.d.ts +0 -14
  1220. package/generators/python/math.d.ts +0 -26
  1221. package/generators/python/procedures.d.ts +0 -14
  1222. package/generators/python/python_generator.d.ts +0 -111
  1223. package/generators/python/text.d.ts +0 -25
  1224. package/generators/python/variables.d.ts +0 -14
  1225. package/generators/python/variables_dynamic.d.ts +0 -10
  1226. package/generators/python.d.ts +0 -13
  1227. package/index.js +0 -36
  1228. package/index.mjs +0 -163
  1229. package/javascript.js +0 -4
  1230. package/javascript.mjs +0 -6
  1231. package/javascript_compressed.js +0 -264
  1232. package/javascript_compressed.js.map +0 -1
  1233. package/lua.js +0 -4
  1234. package/lua.mjs +0 -6
  1235. package/lua_compressed.js +0 -373
  1236. package/lua_compressed.js.map +0 -1
  1237. package/media/click.ogg +0 -0
  1238. package/media/click.wav +0 -0
  1239. package/media/delete.ogg +0 -0
  1240. package/media/delete.wav +0 -0
  1241. package/media/disconnect.ogg +0 -0
  1242. package/media/disconnect.wav +0 -0
  1243. package/msg/ab.js +0 -466
  1244. package/msg/ab.mjs +0 -446
  1245. package/msg/ace.js +0 -466
  1246. package/msg/ace.mjs +0 -446
  1247. package/msg/af.js +0 -466
  1248. package/msg/af.mjs +0 -446
  1249. package/msg/am.js +0 -466
  1250. package/msg/am.mjs +0 -446
  1251. package/msg/ar.js +0 -466
  1252. package/msg/ar.mjs +0 -446
  1253. package/msg/ast.js +0 -466
  1254. package/msg/ast.mjs +0 -446
  1255. package/msg/az.js +0 -466
  1256. package/msg/az.mjs +0 -446
  1257. package/msg/ba.js +0 -466
  1258. package/msg/ba.mjs +0 -446
  1259. package/msg/bcc.js +0 -466
  1260. package/msg/bcc.mjs +0 -446
  1261. package/msg/be-tarask.js +0 -466
  1262. package/msg/be-tarask.mjs +0 -446
  1263. package/msg/be.js +0 -466
  1264. package/msg/be.mjs +0 -446
  1265. package/msg/bg.js +0 -466
  1266. package/msg/bg.mjs +0 -446
  1267. package/msg/bn.js +0 -466
  1268. package/msg/bn.mjs +0 -446
  1269. package/msg/br.js +0 -466
  1270. package/msg/br.mjs +0 -446
  1271. package/msg/bs.js +0 -466
  1272. package/msg/bs.mjs +0 -446
  1273. package/msg/ca.js +0 -466
  1274. package/msg/ca.mjs +0 -446
  1275. package/msg/cdo.js +0 -466
  1276. package/msg/cdo.mjs +0 -446
  1277. package/msg/ce.js +0 -466
  1278. package/msg/ce.mjs +0 -446
  1279. package/msg/cs.js +0 -466
  1280. package/msg/cs.mjs +0 -446
  1281. package/msg/da.js +0 -466
  1282. package/msg/da.mjs +0 -446
  1283. package/msg/de.js +0 -466
  1284. package/msg/de.mjs +0 -446
  1285. package/msg/diq.js +0 -466
  1286. package/msg/diq.mjs +0 -446
  1287. package/msg/dtp.js +0 -466
  1288. package/msg/dtp.mjs +0 -446
  1289. package/msg/dty.js +0 -466
  1290. package/msg/dty.mjs +0 -446
  1291. package/msg/ee.js +0 -466
  1292. package/msg/ee.mjs +0 -446
  1293. package/msg/el.js +0 -466
  1294. package/msg/el.mjs +0 -446
  1295. package/msg/en-gb.js +0 -466
  1296. package/msg/en-gb.mjs +0 -446
  1297. package/msg/en.js +0 -466
  1298. package/msg/en.mjs +0 -446
  1299. package/msg/eo.js +0 -466
  1300. package/msg/eo.mjs +0 -446
  1301. package/msg/es.js +0 -466
  1302. package/msg/es.mjs +0 -446
  1303. package/msg/et.js +0 -466
  1304. package/msg/et.mjs +0 -446
  1305. package/msg/eu.js +0 -466
  1306. package/msg/eu.mjs +0 -446
  1307. package/msg/fa.js +0 -466
  1308. package/msg/fa.mjs +0 -446
  1309. package/msg/fi.js +0 -466
  1310. package/msg/fi.mjs +0 -446
  1311. package/msg/fo.js +0 -466
  1312. package/msg/fo.mjs +0 -446
  1313. package/msg/fr.js +0 -466
  1314. package/msg/fr.mjs +0 -446
  1315. package/msg/frr.js +0 -466
  1316. package/msg/frr.mjs +0 -446
  1317. package/msg/gl.js +0 -466
  1318. package/msg/gl.mjs +0 -446
  1319. package/msg/gn.js +0 -466
  1320. package/msg/gn.mjs +0 -446
  1321. package/msg/gor.js +0 -466
  1322. package/msg/gor.mjs +0 -446
  1323. package/msg/ha.js +0 -466
  1324. package/msg/ha.mjs +0 -446
  1325. package/msg/hak.js +0 -466
  1326. package/msg/hak.mjs +0 -446
  1327. package/msg/he.js +0 -466
  1328. package/msg/he.mjs +0 -446
  1329. package/msg/hi.js +0 -466
  1330. package/msg/hi.mjs +0 -446
  1331. package/msg/hr.js +0 -466
  1332. package/msg/hr.mjs +0 -446
  1333. package/msg/hrx.js +0 -466
  1334. package/msg/hrx.mjs +0 -446
  1335. package/msg/hsb.js +0 -466
  1336. package/msg/hsb.mjs +0 -446
  1337. package/msg/hu.js +0 -466
  1338. package/msg/hu.mjs +0 -446
  1339. package/msg/hy.js +0 -466
  1340. package/msg/hy.mjs +0 -446
  1341. package/msg/ia.js +0 -466
  1342. package/msg/ia.mjs +0 -446
  1343. package/msg/id.js +0 -466
  1344. package/msg/id.mjs +0 -446
  1345. package/msg/ig.js +0 -466
  1346. package/msg/ig.mjs +0 -446
  1347. package/msg/inh.js +0 -466
  1348. package/msg/inh.mjs +0 -446
  1349. package/msg/is.js +0 -466
  1350. package/msg/is.mjs +0 -446
  1351. package/msg/it.js +0 -466
  1352. package/msg/it.mjs +0 -446
  1353. package/msg/ja.js +0 -466
  1354. package/msg/ja.mjs +0 -446
  1355. package/msg/ka.js +0 -466
  1356. package/msg/ka.mjs +0 -446
  1357. package/msg/kab.js +0 -466
  1358. package/msg/kab.mjs +0 -446
  1359. package/msg/kbd-cyrl.js +0 -466
  1360. package/msg/kbd-cyrl.mjs +0 -446
  1361. package/msg/km.js +0 -466
  1362. package/msg/km.mjs +0 -446
  1363. package/msg/kn.js +0 -466
  1364. package/msg/kn.mjs +0 -446
  1365. package/msg/ko.js +0 -466
  1366. package/msg/ko.mjs +0 -446
  1367. package/msg/ksh.js +0 -466
  1368. package/msg/ksh.mjs +0 -446
  1369. package/msg/ku-latn.js +0 -466
  1370. package/msg/ku-latn.mjs +0 -446
  1371. package/msg/ky.js +0 -466
  1372. package/msg/ky.mjs +0 -446
  1373. package/msg/la.js +0 -466
  1374. package/msg/la.mjs +0 -446
  1375. package/msg/lb.js +0 -466
  1376. package/msg/lb.mjs +0 -446
  1377. package/msg/lki.js +0 -466
  1378. package/msg/lki.mjs +0 -446
  1379. package/msg/lo.js +0 -466
  1380. package/msg/lo.mjs +0 -446
  1381. package/msg/lrc.js +0 -466
  1382. package/msg/lrc.mjs +0 -446
  1383. package/msg/lt.js +0 -466
  1384. package/msg/lt.mjs +0 -446
  1385. package/msg/lv.js +0 -466
  1386. package/msg/lv.mjs +0 -446
  1387. package/msg/mg.js +0 -466
  1388. package/msg/mg.mjs +0 -446
  1389. package/msg/mk.js +0 -466
  1390. package/msg/mk.mjs +0 -446
  1391. package/msg/ml.js +0 -466
  1392. package/msg/ml.mjs +0 -446
  1393. package/msg/mnw.js +0 -466
  1394. package/msg/mnw.mjs +0 -446
  1395. package/msg/ms.js +0 -466
  1396. package/msg/ms.mjs +0 -446
  1397. package/msg/my.js +0 -466
  1398. package/msg/my.mjs +0 -446
  1399. package/msg/mzn.js +0 -466
  1400. package/msg/mzn.mjs +0 -446
  1401. package/msg/nb.js +0 -466
  1402. package/msg/nb.mjs +0 -446
  1403. package/msg/ne.js +0 -466
  1404. package/msg/ne.mjs +0 -446
  1405. package/msg/nl.js +0 -466
  1406. package/msg/nl.mjs +0 -446
  1407. package/msg/oc.js +0 -466
  1408. package/msg/oc.mjs +0 -446
  1409. package/msg/olo.js +0 -466
  1410. package/msg/olo.mjs +0 -446
  1411. package/msg/pa.js +0 -466
  1412. package/msg/pa.mjs +0 -446
  1413. package/msg/pl.js +0 -466
  1414. package/msg/pl.mjs +0 -446
  1415. package/msg/pms.js +0 -466
  1416. package/msg/pms.mjs +0 -446
  1417. package/msg/ps.js +0 -466
  1418. package/msg/ps.mjs +0 -446
  1419. package/msg/pt-br.js +0 -466
  1420. package/msg/pt-br.mjs +0 -446
  1421. package/msg/pt.js +0 -466
  1422. package/msg/pt.mjs +0 -446
  1423. package/msg/ro.js +0 -466
  1424. package/msg/ro.mjs +0 -446
  1425. package/msg/ru.js +0 -466
  1426. package/msg/ru.mjs +0 -446
  1427. package/msg/sc.js +0 -466
  1428. package/msg/sc.mjs +0 -446
  1429. package/msg/sco.js +0 -466
  1430. package/msg/sco.mjs +0 -446
  1431. package/msg/sd.js +0 -466
  1432. package/msg/sd.mjs +0 -446
  1433. package/msg/shn.js +0 -466
  1434. package/msg/shn.mjs +0 -446
  1435. package/msg/si.js +0 -466
  1436. package/msg/si.mjs +0 -446
  1437. package/msg/sk.js +0 -466
  1438. package/msg/sk.mjs +0 -446
  1439. package/msg/skr-arab.js +0 -466
  1440. package/msg/skr-arab.mjs +0 -446
  1441. package/msg/sl.js +0 -466
  1442. package/msg/sl.mjs +0 -446
  1443. package/msg/smn.js +0 -466
  1444. package/msg/smn.mjs +0 -446
  1445. package/msg/sq.js +0 -466
  1446. package/msg/sq.mjs +0 -446
  1447. package/msg/sr-latn.js +0 -466
  1448. package/msg/sr-latn.mjs +0 -446
  1449. package/msg/sr.js +0 -466
  1450. package/msg/sr.mjs +0 -446
  1451. package/msg/sv.js +0 -466
  1452. package/msg/sv.mjs +0 -446
  1453. package/msg/sw.js +0 -466
  1454. package/msg/sw.mjs +0 -446
  1455. package/msg/ta.js +0 -466
  1456. package/msg/ta.mjs +0 -446
  1457. package/msg/tcy.js +0 -466
  1458. package/msg/tcy.mjs +0 -446
  1459. package/msg/tdd.js +0 -466
  1460. package/msg/tdd.mjs +0 -446
  1461. package/msg/te.js +0 -466
  1462. package/msg/te.mjs +0 -446
  1463. package/msg/th.js +0 -466
  1464. package/msg/th.mjs +0 -446
  1465. package/msg/ti.js +0 -466
  1466. package/msg/ti.mjs +0 -446
  1467. package/msg/tl.js +0 -466
  1468. package/msg/tl.mjs +0 -446
  1469. package/msg/tlh.js +0 -466
  1470. package/msg/tlh.mjs +0 -446
  1471. package/msg/tr.js +0 -466
  1472. package/msg/tr.mjs +0 -446
  1473. package/msg/ug-arab.js +0 -466
  1474. package/msg/ug-arab.mjs +0 -446
  1475. package/msg/uk.js +0 -466
  1476. package/msg/uk.mjs +0 -446
  1477. package/msg/ur.js +0 -466
  1478. package/msg/ur.mjs +0 -446
  1479. package/msg/uz.js +0 -466
  1480. package/msg/uz.mjs +0 -446
  1481. package/msg/vi.js +0 -466
  1482. package/msg/vi.mjs +0 -446
  1483. package/msg/xmf.js +0 -466
  1484. package/msg/xmf.mjs +0 -446
  1485. package/msg/yo.js +0 -466
  1486. package/msg/yo.mjs +0 -446
  1487. package/msg/zgh.js +0 -466
  1488. package/msg/zgh.mjs +0 -446
  1489. package/msg/zh-hans.js +0 -466
  1490. package/msg/zh-hans.mjs +0 -446
  1491. package/msg/zh-hant.js +0 -466
  1492. package/msg/zh-hant.mjs +0 -446
  1493. package/php.js +0 -4
  1494. package/php.mjs +0 -6
  1495. package/php_compressed.js +0 -283
  1496. package/php_compressed.js.map +0 -1
  1497. package/python.js +0 -4
  1498. package/python.mjs +0 -6
  1499. package/python_compressed.js +0 -208
  1500. package/python_compressed.js.map +0 -1
  1501. /package/{README.md → scripts/package/README.md} +0 -0
  1502. /package/{core-node.js → scripts/package/core-node.js} +0 -0
  1503. /package/{blocks.d.ts → typings/blocks.d.ts} +0 -0
  1504. /package/{core.d.ts → typings/core.d.ts} +0 -0
  1505. /package/{dart.d.ts → typings/dart.d.ts} +0 -0
  1506. /package/{index.d.ts → typings/index.d.ts} +0 -0
  1507. /package/{javascript.d.ts → typings/javascript.d.ts} +0 -0
  1508. /package/{lua.d.ts → typings/lua.d.ts} +0 -0
  1509. /package/{msg → typings/msg}/ab.d.ts +0 -0
  1510. /package/{msg → typings/msg}/ace.d.ts +0 -0
  1511. /package/{msg → typings/msg}/af.d.ts +0 -0
  1512. /package/{msg → typings/msg}/am.d.ts +0 -0
  1513. /package/{msg → typings/msg}/ar.d.ts +0 -0
  1514. /package/{msg → typings/msg}/ast.d.ts +0 -0
  1515. /package/{msg → typings/msg}/az.d.ts +0 -0
  1516. /package/{msg → typings/msg}/ba.d.ts +0 -0
  1517. /package/{msg → typings/msg}/bcc.d.ts +0 -0
  1518. /package/{msg → typings/msg}/be-tarask.d.ts +0 -0
  1519. /package/{msg → typings/msg}/be.d.ts +0 -0
  1520. /package/{msg → typings/msg}/bg.d.ts +0 -0
  1521. /package/{msg → typings/msg}/bn.d.ts +0 -0
  1522. /package/{msg → typings/msg}/br.d.ts +0 -0
  1523. /package/{msg → typings/msg}/bs.d.ts +0 -0
  1524. /package/{msg → typings/msg}/ca.d.ts +0 -0
  1525. /package/{msg → typings/msg}/cdo.d.ts +0 -0
  1526. /package/{msg → typings/msg}/ce.d.ts +0 -0
  1527. /package/{msg → typings/msg}/cs.d.ts +0 -0
  1528. /package/{msg → typings/msg}/da.d.ts +0 -0
  1529. /package/{msg → typings/msg}/de.d.ts +0 -0
  1530. /package/{msg → typings/msg}/diq.d.ts +0 -0
  1531. /package/{msg → typings/msg}/dtp.d.ts +0 -0
  1532. /package/{msg → typings/msg}/dty.d.ts +0 -0
  1533. /package/{msg → typings/msg}/ee.d.ts +0 -0
  1534. /package/{msg → typings/msg}/el.d.ts +0 -0
  1535. /package/{msg → typings/msg}/en-gb.d.ts +0 -0
  1536. /package/{msg → typings/msg}/en.d.ts +0 -0
  1537. /package/{msg → typings/msg}/eo.d.ts +0 -0
  1538. /package/{msg → typings/msg}/es.d.ts +0 -0
  1539. /package/{msg → typings/msg}/et.d.ts +0 -0
  1540. /package/{msg → typings/msg}/eu.d.ts +0 -0
  1541. /package/{msg → typings/msg}/fa.d.ts +0 -0
  1542. /package/{msg → typings/msg}/fi.d.ts +0 -0
  1543. /package/{msg → typings/msg}/fo.d.ts +0 -0
  1544. /package/{msg → typings/msg}/fr.d.ts +0 -0
  1545. /package/{msg → typings/msg}/frr.d.ts +0 -0
  1546. /package/{msg → typings/msg}/gl.d.ts +0 -0
  1547. /package/{msg → typings/msg}/gn.d.ts +0 -0
  1548. /package/{msg → typings/msg}/gor.d.ts +0 -0
  1549. /package/{msg → typings/msg}/ha.d.ts +0 -0
  1550. /package/{msg → typings/msg}/hak.d.ts +0 -0
  1551. /package/{msg → typings/msg}/he.d.ts +0 -0
  1552. /package/{msg → typings/msg}/hi.d.ts +0 -0
  1553. /package/{msg → typings/msg}/hr.d.ts +0 -0
  1554. /package/{msg → typings/msg}/hrx.d.ts +0 -0
  1555. /package/{msg → typings/msg}/hsb.d.ts +0 -0
  1556. /package/{msg → typings/msg}/hu.d.ts +0 -0
  1557. /package/{msg → typings/msg}/hy.d.ts +0 -0
  1558. /package/{msg → typings/msg}/ia.d.ts +0 -0
  1559. /package/{msg → typings/msg}/id.d.ts +0 -0
  1560. /package/{msg → typings/msg}/ig.d.ts +0 -0
  1561. /package/{msg → typings/msg}/inh.d.ts +0 -0
  1562. /package/{msg → typings/msg}/is.d.ts +0 -0
  1563. /package/{msg → typings/msg}/it.d.ts +0 -0
  1564. /package/{msg → typings/msg}/ja.d.ts +0 -0
  1565. /package/{msg → typings/msg}/ka.d.ts +0 -0
  1566. /package/{msg → typings/msg}/kab.d.ts +0 -0
  1567. /package/{msg → typings/msg}/kbd-cyrl.d.ts +0 -0
  1568. /package/{msg → typings/msg}/km.d.ts +0 -0
  1569. /package/{msg → typings/msg}/kn.d.ts +0 -0
  1570. /package/{msg → typings/msg}/ko.d.ts +0 -0
  1571. /package/{msg → typings/msg}/ksh.d.ts +0 -0
  1572. /package/{msg → typings/msg}/ku-latn.d.ts +0 -0
  1573. /package/{msg → typings/msg}/ky.d.ts +0 -0
  1574. /package/{msg → typings/msg}/la.d.ts +0 -0
  1575. /package/{msg → typings/msg}/lb.d.ts +0 -0
  1576. /package/{msg → typings/msg}/lki.d.ts +0 -0
  1577. /package/{msg → typings/msg}/lo.d.ts +0 -0
  1578. /package/{msg → typings/msg}/lrc.d.ts +0 -0
  1579. /package/{msg → typings/msg}/lt.d.ts +0 -0
  1580. /package/{msg → typings/msg}/lv.d.ts +0 -0
  1581. /package/{msg → typings/msg}/mg.d.ts +0 -0
  1582. /package/{msg → typings/msg}/mk.d.ts +0 -0
  1583. /package/{msg → typings/msg}/ml.d.ts +0 -0
  1584. /package/{msg → typings/msg}/mnw.d.ts +0 -0
  1585. /package/{msg → typings/msg}/ms.d.ts +0 -0
  1586. /package/{msg → typings/msg}/msg.d.ts +0 -0
  1587. /package/{msg → typings/msg}/my.d.ts +0 -0
  1588. /package/{msg → typings/msg}/mzn.d.ts +0 -0
  1589. /package/{msg → typings/msg}/nb.d.ts +0 -0
  1590. /package/{msg → typings/msg}/ne.d.ts +0 -0
  1591. /package/{msg → typings/msg}/nl.d.ts +0 -0
  1592. /package/{msg → typings/msg}/oc.d.ts +0 -0
  1593. /package/{msg → typings/msg}/olo.d.ts +0 -0
  1594. /package/{msg → typings/msg}/pa.d.ts +0 -0
  1595. /package/{msg → typings/msg}/pl.d.ts +0 -0
  1596. /package/{msg → typings/msg}/pms.d.ts +0 -0
  1597. /package/{msg → typings/msg}/ps.d.ts +0 -0
  1598. /package/{msg → typings/msg}/pt-br.d.ts +0 -0
  1599. /package/{msg → typings/msg}/pt.d.ts +0 -0
  1600. /package/{msg → typings/msg}/ro.d.ts +0 -0
  1601. /package/{msg → typings/msg}/ru.d.ts +0 -0
  1602. /package/{msg → typings/msg}/sc.d.ts +0 -0
  1603. /package/{msg → typings/msg}/sco.d.ts +0 -0
  1604. /package/{msg → typings/msg}/sd.d.ts +0 -0
  1605. /package/{msg → typings/msg}/shn.d.ts +0 -0
  1606. /package/{msg → typings/msg}/si.d.ts +0 -0
  1607. /package/{msg → typings/msg}/sk.d.ts +0 -0
  1608. /package/{msg → typings/msg}/skr-arab.d.ts +0 -0
  1609. /package/{msg → typings/msg}/sl.d.ts +0 -0
  1610. /package/{msg → typings/msg}/smn.d.ts +0 -0
  1611. /package/{msg → typings/msg}/sq.d.ts +0 -0
  1612. /package/{msg → typings/msg}/sr-latn.d.ts +0 -0
  1613. /package/{msg → typings/msg}/sr.d.ts +0 -0
  1614. /package/{msg → typings/msg}/sv.d.ts +0 -0
  1615. /package/{msg → typings/msg}/sw.d.ts +0 -0
  1616. /package/{msg → typings/msg}/ta.d.ts +0 -0
  1617. /package/{msg → typings/msg}/tcy.d.ts +0 -0
  1618. /package/{msg → typings/msg}/tdd.d.ts +0 -0
  1619. /package/{msg → typings/msg}/te.d.ts +0 -0
  1620. /package/{msg → typings/msg}/th.d.ts +0 -0
  1621. /package/{msg → typings/msg}/ti.d.ts +0 -0
  1622. /package/{msg → typings/msg}/tl.d.ts +0 -0
  1623. /package/{msg → typings/msg}/tlh.d.ts +0 -0
  1624. /package/{msg → typings/msg}/tr.d.ts +0 -0
  1625. /package/{msg → typings/msg}/ug-arab.d.ts +0 -0
  1626. /package/{msg → typings/msg}/uk.d.ts +0 -0
  1627. /package/{msg → typings/msg}/ur.d.ts +0 -0
  1628. /package/{msg → typings/msg}/uz.d.ts +0 -0
  1629. /package/{msg → typings/msg}/vi.d.ts +0 -0
  1630. /package/{msg → typings/msg}/xmf.d.ts +0 -0
  1631. /package/{msg → typings/msg}/yo.d.ts +0 -0
  1632. /package/{msg → typings/msg}/zgh.d.ts +0 -0
  1633. /package/{msg → typings/msg}/zh-hans.d.ts +0 -0
  1634. /package/{msg → typings/msg}/zh-hant.d.ts +0 -0
  1635. /package/{php.d.ts → typings/php.d.ts} +0 -0
  1636. /package/{python.d.ts → typings/python.d.ts} +0 -0
@@ -0,0 +1,1611 @@
1
+ function unittest_report() {
2
+ global $unittestResults;
3
+ // Create test report.
4
+ $report = array();
5
+ $summary = array();
6
+ $fails = 0;
7
+ for ($x = 0; $x < count($unittestResults); $x++) {
8
+ if ($unittestResults[$x][0]) {
9
+ array_push($summary, ".");
10
+ } else {
11
+ array_push($summary, "F");
12
+ $fails++;
13
+ array_push($report, "");
14
+ array_push($report, "FAIL: " . $unittestResults[$x][2]);
15
+ array_push($report, $unittestResults[$x][1]);
16
+ }
17
+ }
18
+ array_unshift($report, implode("", $summary));
19
+ array_push($report, "");
20
+ array_push($report, "Number of tests run: " . count($unittestResults));
21
+ array_push($report, "");
22
+ if ($fails) {
23
+ array_push($report, "FAILED (failures=" . $fails . ")");
24
+ } else {
25
+ array_push($report, "OK");
26
+ }
27
+ return implode("\n", $report);
28
+ }
29
+
30
+ function assertEquals($actual, $expected, $message) {
31
+ global $unittestResults;
32
+ // Asserts that a value equals another value.
33
+ if (!is_array($unittestResults)) {
34
+ throw new Exception("Orphaned assert: " . $message);
35
+ }
36
+ if ($actual == $expected) {
37
+ array_push($unittestResults, [true, "OK", $message]);
38
+ } else {
39
+ $expected = is_array($expected) ? implode(" ", $expected) : $expected;
40
+ $actual = is_array($actual) ? implode(" ", $actual) : $actual;
41
+ array_push($unittestResults, [false, "Expected: " . $expected . "\nActual: " . $actual, $message]);
42
+ }
43
+ }
44
+
45
+ function unittest_fail($message) {
46
+ global $unittestResults;
47
+ // Always assert an error.
48
+ if (!$unittestResults) {
49
+ throw new Exception("Orphaned assert fail: " . $message);
50
+ }
51
+ array_push($unittestResults, [false, "Fail.", $message]);
52
+ }
53
+
54
+ // Describe this function...
55
+ function test_if() {
56
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
57
+ if (false) {
58
+ unittest_fail('if false');
59
+ }
60
+ $ok = false;
61
+ if (true) {
62
+ $ok = true;
63
+ }
64
+ assertEquals($ok, true, 'if true');
65
+ $ok = false;
66
+ if (false) {
67
+ unittest_fail('if/else false');
68
+ } else {
69
+ $ok = true;
70
+ }
71
+ assertEquals($ok, true, 'if/else false');
72
+ $ok = false;
73
+ if (true) {
74
+ $ok = true;
75
+ } else {
76
+ unittest_fail('if/else true');
77
+ }
78
+ assertEquals($ok, true, 'if/else true');
79
+ $ok = false;
80
+ if (false) {
81
+ unittest_fail('elseif 1');
82
+ } else if (true) {
83
+ $ok = true;
84
+ } else if (true) {
85
+ unittest_fail('elseif 2');
86
+ } else {
87
+ unittest_fail('elseif 3');
88
+ }
89
+ assertEquals($ok, true, 'elseif 4');
90
+ }
91
+
92
+ // Describe this function...
93
+ function test_ifelse() {
94
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
95
+ $ok = false;
96
+ if (true) {
97
+ $ok = true;
98
+ } else {
99
+ unittest_fail('ifelse true');
100
+ }
101
+ assertEquals($ok, true, 'ifelse true');
102
+ $ok = false;
103
+ if (false) {
104
+ unittest_fail('ifelse false');
105
+ } else {
106
+ $ok = true;
107
+ }
108
+ assertEquals($ok, true, 'ifelse false');
109
+ }
110
+
111
+ // Describe this function...
112
+ function test_equalities() {
113
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
114
+ assertEquals(2 == 2, true, 'Equal yes');
115
+ assertEquals(3 == 4, false, 'Equal no');
116
+ assertEquals(5 != 6, true, 'Not equal yes');
117
+ assertEquals(3 == 4, false, 'Not equal no');
118
+ assertEquals(5 < 6, true, 'Smaller yes');
119
+ assertEquals(7 < 7, false, 'Smaller no');
120
+ assertEquals(9 > 8, true, 'Greater yes');
121
+ assertEquals(10 > 10, false, 'Greater no');
122
+ assertEquals(11 <= 11, true, 'Smaller-equal yes');
123
+ assertEquals(13 <= 12, false, 'Smaller-equal no');
124
+ assertEquals(14 >= 14, true, 'Greater-equal yes');
125
+ assertEquals(15 >= 16, false, 'Greater-equal no');
126
+ }
127
+
128
+ // Describe this function...
129
+ function test_and() {
130
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
131
+ assertEquals(true && true, true, 'And true/true');
132
+ assertEquals(false && true, false, 'And false/true');
133
+ assertEquals(true && false, false, 'And true/false');
134
+ assertEquals(false && false, false, 'And false/false');
135
+ }
136
+
137
+ // Describe this function...
138
+ function test_or() {
139
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
140
+ assertEquals(true || true, true, 'Or true/true');
141
+ assertEquals(false || true, true, 'Or false/true');
142
+ assertEquals(true || false, true, 'Or true/false');
143
+ assertEquals(false || false, false, 'Or false/false');
144
+ }
145
+
146
+ // Describe this function...
147
+ function test_ternary() {
148
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
149
+ assertEquals(true ? 42 : 99, 42, 'if true');
150
+ assertEquals(false ? 42 : 99, 99, 'if true');
151
+ }
152
+
153
+ // Describe this function...
154
+ function test_foreach() {
155
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
156
+ $log = '';
157
+ foreach (array('a', 'b', 'c') as $x) {
158
+ $log .= $x;
159
+ }
160
+ assertEquals($log, 'abc', 'for loop');
161
+ }
162
+
163
+ // Describe this function...
164
+ function test_repeat() {
165
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
166
+ $count = 0;
167
+ for ($count2 = 0; $count2 < 10; $count2++) {
168
+ $count += 1;
169
+ }
170
+ assertEquals($count, 10, 'repeat 10');
171
+ }
172
+
173
+ // Describe this function...
174
+ function test_while() {
175
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
176
+ while (false) {
177
+ unittest_fail('while 0');
178
+ }
179
+ while (!true) {
180
+ unittest_fail('until 0');
181
+ }
182
+ $count = 1;
183
+ while ($count != 10) {
184
+ $count += 1;
185
+ }
186
+ assertEquals($count, 10, 'while 10');
187
+ $count = 1;
188
+ while (!($count == 10)) {
189
+ $count += 1;
190
+ }
191
+ assertEquals($count, 10, 'until 10');
192
+ }
193
+
194
+ // Describe this function...
195
+ function test_repeat_ext() {
196
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
197
+ $count = 0;
198
+ for ($count3 = 0; $count3 < 10; $count3++) {
199
+ $count += 1;
200
+ }
201
+ assertEquals($count, 10, 'repeat 10');
202
+ }
203
+
204
+ // Describe this function...
205
+ function test_count_by() {
206
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
207
+ $log = '';
208
+ for ($x = 1; $x <= 8; $x += 2) {
209
+ $log .= $x;
210
+ }
211
+ assertEquals($log, '1357', 'count up ints');
212
+ $log = '';
213
+ for ($x = 8; $x >= 1; $x -= 2) {
214
+ $log .= $x;
215
+ }
216
+ assertEquals($log, '8642', 'count down ints');
217
+ $loglist = array();
218
+ for ($x = 1; $x <= 8; $x += 1.5) {
219
+ array_push($loglist, $x);
220
+ }
221
+ assertEquals($loglist, array(1, 2.5, 4, 5.5, 7), 'count with floats');
222
+ $loglist = array();
223
+ $_x_start = 1 + 0;
224
+ $_x_end = 8 + 0;
225
+ $_x_inc = abs(1 - 2);
226
+ if ($_x_start > $_x_end) {
227
+ $_x_inc = -$_x_inc;
228
+ }
229
+ for ($x = $_x_start; $_x_inc >= 0 ? $x <= $_x_end : $x >= $_x_end; $x += $_x_inc) {
230
+ array_push($loglist, $x);
231
+ }
232
+ assertEquals($loglist, array(1, 2, 3, 4, 5, 6, 7, 8), 'count up non-trivial ints');
233
+ $loglist = array();
234
+ $_x_start2 = 8 + 0;
235
+ $_x_end2 = 1 + 0;
236
+ $_x_inc2 = 2;
237
+ if ($_x_start2 > $_x_end2) {
238
+ $_x_inc2 = -$_x_inc2;
239
+ }
240
+ for ($x = $_x_start2; $_x_inc2 >= 0 ? $x <= $_x_end2 : $x >= $_x_end2; $x += $_x_inc2) {
241
+ array_push($loglist, $x);
242
+ }
243
+ assertEquals($loglist, array(8, 6, 4, 2), 'count down non-trivial ints');
244
+ $loglist = array();
245
+ $_x_start3 = 5 + 0.5;
246
+ $_x_end3 = 1 + 0;
247
+ $_x_inc3 = abs(1 + 0);
248
+ if ($_x_start3 > $_x_end3) {
249
+ $_x_inc3 = -$_x_inc3;
250
+ }
251
+ for ($x = $_x_start3; $_x_inc3 >= 0 ? $x <= $_x_end3 : $x >= $_x_end3; $x += $_x_inc3) {
252
+ array_push($loglist, $x);
253
+ }
254
+ assertEquals($loglist, array(5.5, 4.5, 3.5, 2.5, 1.5), 'count with floats');
255
+ }
256
+
257
+ // Describe this function...
258
+ function test_count_loops() {
259
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
260
+ $log = '';
261
+ for ($x = 1; $x <= 8; $x++) {
262
+ $log .= $x;
263
+ }
264
+ assertEquals($log, '12345678', 'count up');
265
+ $log = '';
266
+ for ($x = 8; $x >= 1; $x--) {
267
+ $log .= $x;
268
+ }
269
+ assertEquals($log, '87654321', 'count down');
270
+ $loglist = array();
271
+ $_x_start4 = 1 + 0;
272
+ $_x_end4 = 4 + 0;
273
+ $_x_inc4 = 1;
274
+ if ($_x_start4 > $_x_end4) {
275
+ $_x_inc4 = -$_x_inc4;
276
+ }
277
+ for ($x = $_x_start4; $_x_inc4 >= 0 ? $x <= $_x_end4 : $x >= $_x_end4; $x += $_x_inc4) {
278
+ array_push($loglist, $x);
279
+ }
280
+ assertEquals($loglist, array(1, 2, 3, 4), 'count up non-trivial');
281
+ $loglist = array();
282
+ $_x_start5 = 3 + 1;
283
+ $_x_end5 = 1 + 0;
284
+ $_x_inc5 = 1;
285
+ if ($_x_start5 > $_x_end5) {
286
+ $_x_inc5 = -$_x_inc5;
287
+ }
288
+ for ($x = $_x_start5; $_x_inc5 >= 0 ? $x <= $_x_end5 : $x >= $_x_end5; $x += $_x_inc5) {
289
+ array_push($loglist, $x);
290
+ }
291
+ assertEquals($loglist, array(4, 3, 2, 1), 'count down non-trivial');
292
+ }
293
+
294
+ // Describe this function...
295
+ function test_continue() {
296
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
297
+ $log = '';
298
+ $count = 0;
299
+ while ($count != 8) {
300
+ $count += 1;
301
+ if ($count == 5) {
302
+ continue;
303
+ }
304
+ $log .= $count;
305
+ }
306
+ assertEquals($log, '1234678', 'while continue');
307
+ $log = '';
308
+ $count = 0;
309
+ while (!($count == 8)) {
310
+ $count += 1;
311
+ if ($count == 5) {
312
+ continue;
313
+ }
314
+ $log .= $count;
315
+ }
316
+ assertEquals($log, '1234678', 'until continue');
317
+ $log = '';
318
+ for ($x = 1; $x <= 8; $x++) {
319
+ if ($x == 5) {
320
+ continue;
321
+ }
322
+ $log .= $x;
323
+ }
324
+ assertEquals($log, '1234678', 'count continue');
325
+ $log = '';
326
+ foreach (array('a', 'b', 'c', 'd') as $x) {
327
+ if ($x == 'c') {
328
+ continue;
329
+ }
330
+ $log .= $x;
331
+ }
332
+ assertEquals($log, 'abd', 'for continue');
333
+ }
334
+
335
+ // Describe this function...
336
+ function test_break() {
337
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
338
+ $count = 1;
339
+ while ($count != 10) {
340
+ if ($count == 5) {
341
+ break;
342
+ }
343
+ $count += 1;
344
+ }
345
+ assertEquals($count, 5, 'while break');
346
+ $count = 1;
347
+ while (!($count == 10)) {
348
+ if ($count == 5) {
349
+ break;
350
+ }
351
+ $count += 1;
352
+ }
353
+ assertEquals($count, 5, 'until break');
354
+ $log = '';
355
+ for ($x = 1; $x <= 8; $x++) {
356
+ if ($x == 5) {
357
+ break;
358
+ }
359
+ $log .= $x;
360
+ }
361
+ assertEquals($log, '1234', 'count break');
362
+ $log = '';
363
+ foreach (array('a', 'b', 'c', 'd') as $x) {
364
+ if ($x == 'c') {
365
+ break;
366
+ }
367
+ $log .= $x;
368
+ }
369
+ assertEquals($log, 'ab', 'for break');
370
+ }
371
+
372
+ // Tests the "single" block.
373
+ function test_single() {
374
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
375
+ assertEquals(sqrt(25), 5, 'sqrt');
376
+ assertEquals(abs(-25), 25, 'abs');
377
+ assertEquals(-(-25), 25, 'negate');
378
+ assertEquals(log(1), 0, 'ln');
379
+ assertEquals(log(100) / log(10), 2, 'log10');
380
+ assertEquals(exp(2), 7.38905609893065, 'exp');
381
+ assertEquals(pow(10,2), 100, 'power10');
382
+ }
383
+
384
+ // Tests the "arithmetic" block for all operations and checks
385
+ // parenthesis are properly generated for different orders.
386
+ function test_arithmetic() {
387
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
388
+ assertEquals(1 + 2, 3, 'add');
389
+ assertEquals(1 - 2, -1, 'subtract');
390
+ assertEquals(1 - (0 + 2), -1, 'subtract order with add');
391
+ assertEquals(1 - (0 - 2), 3, 'subtract order with subtract');
392
+ assertEquals(4 * 2.5, 10, 'multiply');
393
+ assertEquals(4 * (0 + 2.5), 10, 'multiply order');
394
+ assertEquals(8.2 / -5, -1.64, 'divide');
395
+ assertEquals(8.2 / (0 + -5), -1.64, 'divide order');
396
+ assertEquals(10 ** 4, 10000, 'power');
397
+ assertEquals(10 ** (0 + 4), 10000, 'power order');
398
+ }
399
+
400
+ // Tests the "trig" block.
401
+ function test_trig() {
402
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
403
+ assertEquals(sin(90 / 180 * pi()), 1, 'sin');
404
+ assertEquals(cos(180 / 180 * pi()), -1, 'cos');
405
+ assertEquals(tan(0 / 180 * pi()), 0, 'tan');
406
+ assertEquals(asin(-1) / pi() * 180, -90, 'asin');
407
+ assertEquals(acos(1) / pi() * 180, 0, 'acos');
408
+ assertEquals(atan(1) / pi() * 180, 45, 'atan');
409
+ }
410
+
411
+ // Tests the "constant" blocks.
412
+ function test_constant() {
413
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
414
+ assertEquals(floor(M_PI * 1000), 3141, 'const pi');
415
+ assertEquals(floor(M_E * 1000), 2718, 'const e');
416
+ assertEquals(floor(((1 + sqrt(5)) / 2) * 1000), 1618, 'const golden');
417
+ assertEquals(floor(M_SQRT2 * 1000), 1414, 'const sqrt 2');
418
+ assertEquals(floor(M_SQRT1_2 * 1000), 707, 'const sqrt 0.5');
419
+ assertEquals(9999 < INF, true, 'const infinity');
420
+ }
421
+
422
+ function math_isPrime($n) {
423
+ // https://en.wikipedia.org/wiki/Primality_test#Naive_methods
424
+ if ($n == 2 || $n == 3) {
425
+ return true;
426
+ }
427
+ // False if n is NaN, negative, is 1, or not whole.
428
+ // And false if n is divisible by 2 or 3.
429
+ if (!is_numeric($n) || $n <= 1 || $n % 1 != 0 || $n % 2 == 0 || $n % 3 == 0) {
430
+ return false;
431
+ }
432
+ // Check all the numbers of form 6k +/- 1, up to sqrt(n).
433
+ for ($x = 6; $x <= sqrt($n) + 1; $x += 6) {
434
+ if ($n % ($x - 1) == 0 || $n % ($x + 1) == 0) {
435
+ return false;
436
+ }
437
+ }
438
+ return true;
439
+ }
440
+
441
+ // Tests the "number property" blocks.
442
+ function test_number_properties() {
443
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
444
+ assertEquals(42 % 2 == 0, true, 'even');
445
+ assertEquals(42.1 % 2 == 1, false, 'odd');
446
+ assertEquals(math_isPrime(5), true, 'prime 5');
447
+ assertEquals(math_isPrime(5 + 2), true, 'prime 5 + 2 (extra parentheses)');
448
+ assertEquals(math_isPrime(25), false, 'prime 25');
449
+ assertEquals(math_isPrime(-31.1), false, 'prime negative');
450
+ assertEquals(is_int(M_PI), false, 'whole');
451
+ assertEquals(INF > 0, true, 'positive');
452
+ assertEquals(5 + 2 > 0, true, '5 + 2 is positive (extra parentheses)');
453
+ assertEquals(-42 < 0, true, 'negative');
454
+ assertEquals(3 + 2 < 0, false, '3 + 2 is negative (extra parentheses)');
455
+ assertEquals(42 % 2 == 0, true, 'divisible');
456
+ assertEquals(!false, true, 'divisible by 0');
457
+ }
458
+
459
+ // Tests the "round" block.
460
+ function test_round() {
461
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
462
+ assertEquals(round(42.42), 42, 'round');
463
+ assertEquals(ceil(-42.42), -42, 'round up');
464
+ assertEquals(floor(42.42), 42, 'round down');
465
+ }
466
+
467
+ // Tests the "change" block.
468
+ function test_change() {
469
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
470
+ $varToChange = 100;
471
+ $varToChange += 42;
472
+ assertEquals($varToChange, 142, 'change');
473
+ }
474
+
475
+ function math_mean($myList) {
476
+ return array_sum($myList) / count($myList);
477
+ }
478
+
479
+ function math_median($arr) {
480
+ sort($arr,SORT_NUMERIC);
481
+ return (count($arr) % 2) ? $arr[floor(count($arr) / 2)] :
482
+ ($arr[floor(count($arr) / 2)] + $arr[floor(count($arr) / 2) - 1]) / 2;
483
+ }
484
+
485
+ function math_modes($values) {
486
+ if (empty($values)) return array();
487
+ $counts = array_count_values($values);
488
+ arsort($counts); // Sort counts in descending order
489
+ $modes = array_keys($counts, current($counts), true);
490
+ return $modes;
491
+ }
492
+
493
+ function math_standard_deviation($numbers) {
494
+ $n = count($numbers);
495
+ if (!$n) return null;
496
+ $mean = array_sum($numbers) / count($numbers);
497
+ foreach($numbers as $key => $num) $devs[$key] = pow($num - $mean, 2);
498
+ return sqrt(array_sum($devs) / (count($devs) - 1));
499
+ }
500
+
501
+ function math_random_list($list) {
502
+ $x = rand(0, count($list)-1);
503
+ return $list[$x];
504
+ }
505
+
506
+ function indexOf($haystack, $needle) {
507
+ for ($index = 0; $index < count($haystack); $index++) {
508
+ if ($haystack[$index] == $needle) return $index + 1;
509
+ }
510
+ return 0;
511
+ }
512
+
513
+ // Tests the "list operation" blocks.
514
+ function test_operations_on_list() {
515
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
516
+ assertEquals(array_sum((array(3, 4, 5))), 12, 'sum');
517
+ assertEquals(min((array(3, 4, 5))), 3, 'min');
518
+ assertEquals(max((array(3, 4, 5))), 5, 'max');
519
+ assertEquals(math_mean(array(3, 4, 5)), 4, 'average');
520
+ assertEquals(math_median(array(3, 4, 5, 1)), 3.5, 'median');
521
+ assertEquals(math_modes(array(3, 4, 3)), array(3), 'modes');
522
+ assertEquals(math_modes(array(3, 4, 3, 1, 4)), array(3, 4), 'modes multiple');
523
+ assertEquals(math_standard_deviation(array(3, 3, 3)), 0, 'standard dev');
524
+ assertEquals(indexOf(array(3, 4, 5), math_random_list(array(3, 4, 5))) > 0, true, 'random');
525
+ }
526
+
527
+ // Tests the "mod" block.
528
+ function test_mod() {
529
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
530
+ assertEquals(42 % 5, 2, 'mod');
531
+ }
532
+
533
+ // Tests the "constrain" block.
534
+ function test_constraint() {
535
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
536
+ assertEquals(min(max(100, 0), 42), 42, 'constraint');
537
+ }
538
+
539
+ function math_random_int($a, $b) {
540
+ if ($a > $b) {
541
+ return rand($b, $a);
542
+ }
543
+ return rand($a, $b);
544
+ }
545
+
546
+ // Tests the "random integer" block.
547
+ function test_random_integer() {
548
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
549
+ $rand = math_random_int(5, 10);
550
+ assertEquals($rand >= 5 && $rand <= 10, true, 'randRange');
551
+ assertEquals(is_int($rand), true, 'randInteger');
552
+ }
553
+
554
+ // Tests the "random fraction" block.
555
+ function test_random_fraction() {
556
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
557
+ $rand = (float)rand()/(float)getrandmax();
558
+ assertEquals($rand >= 0 && $rand <= 1, true, 'randFloat');
559
+ }
560
+
561
+ // Describe this function...
562
+ function test_atan2() {
563
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
564
+ assertEquals(atan2(5, -5) / pi() * 180, 135, 'atan2');
565
+ assertEquals(atan2(-12, 0) / pi() * 180, -90, 'atan2');
566
+ }
567
+
568
+ // Checks that the number of calls is one in order
569
+ // to confirm that a function was only called once.
570
+ function check_number_of_calls($test_name) {
571
+ global $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
572
+ $test_name .= 'number of calls';
573
+ assertEquals($number_of_calls, 1, $test_name);
574
+ }
575
+
576
+ // Tests the "create text with" block with varying number of inputs.
577
+ function test_create_text() {
578
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
579
+ assertEquals('', '', 'no text');
580
+ assertEquals('Hello', 'Hello', 'create single');
581
+ assertEquals(-1, '-1', 'create single number');
582
+ assertEquals('K' . 9, 'K9', 'create double text');
583
+ assertEquals(4 . 2, '42', 'create double text numbers');
584
+ assertEquals(implode('', array(1,2,3)), '123', 'create triple');
585
+ assertEquals(implode('', array(1,true ? 0 : null,'M')), '10M', 'create order');
586
+ }
587
+
588
+ // Creates an empty string for use with the empty test.
589
+ function get_empty() {
590
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
591
+ return '';
592
+ }
593
+
594
+ // Tests the "is empty" block".
595
+ function test_empty_text() {
596
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
597
+ assertEquals(empty('Google'), false, 'not empty');
598
+ assertEquals(empty(''), true, 'empty');
599
+ assertEquals(empty(get_empty()), true, 'empty complex');
600
+ assertEquals(empty(true ? '' : null), true, 'empty order');
601
+ }
602
+
603
+ function length($value) {
604
+ if (is_string($value)) {
605
+ return strlen($value);
606
+ }
607
+ return count($value);
608
+ }
609
+
610
+ // Tests the "length" block.
611
+ function test_text_length() {
612
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
613
+ assertEquals(length(''), 0, 'zero length');
614
+ assertEquals(length('Google'), 6, 'non-zero length');
615
+ assertEquals(length(true ? 'car' : null), 3, 'length order');
616
+ }
617
+
618
+ // Tests the "append text" block with different types of parameters.
619
+ function test_append() {
620
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
621
+ $item = 'Miserable';
622
+ $item .= 'Failure';
623
+ assertEquals($item, 'MiserableFailure', 'append text');
624
+ $item = 12;
625
+ $item .= 34;
626
+ assertEquals($item, '1234', 'append number');
627
+ $item = 'Something ';
628
+ $item .= true ? 'Positive' : null;
629
+ assertEquals($item, 'Something Positive', 'append order');
630
+ }
631
+
632
+ function text_indexOf($text, $search) {
633
+ $pos = strpos($text, $search);
634
+ return $pos === false ? 0 : $pos + 1;
635
+ }
636
+
637
+ function text_lastIndexOf($text, $search) {
638
+ $pos = strrpos($text, $search);
639
+ return $pos === false ? 0 : $pos + 1;
640
+ }
641
+
642
+ // Tests the "find" block with a variable.
643
+ function test_find_text_simple() {
644
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
645
+ $text = 'Banana';
646
+ assertEquals(text_indexOf($text, 'an'), 2, 'find first simple');
647
+ assertEquals(text_lastIndexOf($text, 'an'), 4, 'find last simple');
648
+ assertEquals(text_indexOf($text, 'Peel'), 0, 'find none simple');
649
+ }
650
+
651
+ // Creates a string for use with the find test.
652
+ function get_fruit() {
653
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
654
+ $number_of_calls += 1;
655
+ return 'Banana';
656
+ }
657
+
658
+ // Tests the "find" block with a function call.
659
+ function test_find_text_complex() {
660
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
661
+ $number_of_calls = 0;
662
+ assertEquals(text_indexOf(get_fruit(), 'an'), 2, 'find first complex');
663
+ check_number_of_calls('find first complex');
664
+ $number_of_calls = 0;
665
+ assertEquals(text_indexOf(true ? get_fruit() : null, 'an'), 2, 'find first order complex');
666
+ check_number_of_calls('find first order complex');
667
+ $number_of_calls = 0;
668
+ assertEquals(text_lastIndexOf(get_fruit(), 'an'), 4, 'find last complex');
669
+ check_number_of_calls('find last complex');
670
+ $number_of_calls = 0;
671
+ assertEquals(text_lastIndexOf(true ? get_fruit() : null, 'an'), 4, 'find last order complex');
672
+ check_number_of_calls('find last order complex');
673
+ $number_of_calls = 0;
674
+ assertEquals(text_indexOf(get_fruit(), 'Peel'), 0, 'find none complex');
675
+ check_number_of_calls('find none complex');
676
+ $number_of_calls = 0;
677
+ assertEquals(text_indexOf(true ? get_fruit() : null, 'Peel'), 0, 'find none order complex');
678
+ check_number_of_calls('find none order complex');
679
+ }
680
+
681
+ function text_random_letter($text) {
682
+ return $text[rand(0, strlen($text) - 1)];
683
+ }
684
+
685
+ // Tests the "get letter" block with a variable.
686
+ function test_get_text_simple() {
687
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
688
+ $text = 'Blockly';
689
+ assertEquals(substr($text, 0, 1), 'B', 'get first simple');
690
+ assertEquals(substr($text, -1), 'y', 'get last simple');
691
+ assertEquals(text_indexOf($text, text_random_letter($text)) > 0, true, 'get random simple');
692
+ assertEquals(substr($text, 2, 1), 'o', 'get # simple');
693
+ assertEquals(substr($text, ((true ? 3 : null) - 1), 1), 'o', 'get # order simple');
694
+ assertEquals(substr($text, -3, 1), 'k', 'get #-end simple');
695
+ // The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
696
+ assertEquals(substr($text, (-(0 + 3)), 1), 'k', 'get #-end order simple');
697
+ }
698
+
699
+ // Creates a string for use with the get test.
700
+ function get_Blockly() {
701
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
702
+ $number_of_calls += 1;
703
+ return 'Blockly';
704
+ }
705
+
706
+ // Tests the "get letter" block with a function call.
707
+ function test_get_text_complex() {
708
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
709
+ $text = 'Blockly';
710
+ $number_of_calls = 0;
711
+ assertEquals(substr(get_Blockly(), 0, 1), 'B', 'get first complex');
712
+ check_number_of_calls('get first complex');
713
+ $number_of_calls = 0;
714
+ assertEquals(substr(true ? get_Blockly() : null, 0, 1), 'B', 'get first order complex');
715
+ check_number_of_calls('get first order complex');
716
+ $number_of_calls = 0;
717
+ assertEquals(substr(get_Blockly(), -1), 'y', 'get last complex');
718
+ check_number_of_calls('get last complex');
719
+ $number_of_calls = 0;
720
+ assertEquals(substr(true ? get_Blockly() : null, -1), 'y', 'get last order complex');
721
+ check_number_of_calls('get last order complex');
722
+ $number_of_calls = 0;
723
+ assertEquals(text_indexOf($text, text_random_letter(get_Blockly())) > 0, true, 'get random complex');
724
+ check_number_of_calls('get random complex');
725
+ $number_of_calls = 0;
726
+ assertEquals(text_indexOf($text, text_random_letter(true ? get_Blockly() : null)) > 0, true, 'get random order complex');
727
+ check_number_of_calls('get random order complex');
728
+ $number_of_calls = 0;
729
+ assertEquals(substr(get_Blockly(), 2, 1), 'o', 'get # complex');
730
+ check_number_of_calls('get # complex');
731
+ $number_of_calls = 0;
732
+ assertEquals(substr(true ? get_Blockly() : null, ((true ? 3 : null) - 1), 1), 'o', 'get # order complex');
733
+ check_number_of_calls('get # order complex');
734
+ $number_of_calls = 0;
735
+ assertEquals(substr(get_Blockly(), -3, 1), 'k', 'get #-end complex');
736
+ check_number_of_calls('get #-end complex');
737
+ $number_of_calls = 0;
738
+ // The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
739
+ assertEquals(substr(true ? get_Blockly() : null, (-(0 + 3)), 1), 'k', 'get #-end order complex');
740
+ check_number_of_calls('get #-end order complex');
741
+ }
742
+
743
+ // Creates a string for use with the substring test.
744
+ function get_numbers() {
745
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
746
+ $number_of_calls += 1;
747
+ return '123456789';
748
+ }
749
+
750
+ function text_get_substring($text, $where1, $at1, $where2, $at2) {
751
+ if ($where1 == 'FROM_END') {
752
+ $at1 = strlen($text) - 1 - $at1;
753
+ } else if ($where1 == 'FIRST') {
754
+ $at1 = 0;
755
+ } else if ($where1 != 'FROM_START') {
756
+ throw new Exception('Unhandled option (text_get_substring).');
757
+ }
758
+ $length = 0;
759
+ if ($where2 == 'FROM_START') {
760
+ $length = $at2 - $at1 + 1;
761
+ } else if ($where2 == 'FROM_END') {
762
+ $length = strlen($text) - $at1 - $at2;
763
+ } else if ($where2 == 'LAST') {
764
+ $length = strlen($text) - $at1;
765
+ } else {
766
+ throw new Exception('Unhandled option (text_get_substring).');
767
+ }
768
+ return substr($text, $at1, $length);
769
+ }
770
+
771
+ // Tests the "get substring" block with a variable.
772
+ function test_substring_simple() {
773
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
774
+ $text = '123456789';
775
+ assertEquals(text_get_substring($text, 'FROM_START', 1, 'FROM_START', 2), '23', 'substring # simple');
776
+ assertEquals(text_get_substring($text, 'FROM_START', ((true ? 2 : null) - 1), 'FROM_START', ((true ? 3 : null) - 1)), '23', 'substring # simple order');
777
+ assertEquals(text_get_substring($text, 'FROM_END', 2, 'FROM_END', 1), '78', 'substring #-end simple');
778
+ // The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
779
+ assertEquals(text_get_substring($text, 'FROM_END', ((0 + 3) - 1), 'FROM_END', ((0 + 2) - 1)), '78', 'substring #-end simple order');
780
+ assertEquals($text, $text, 'substring first-last simple');
781
+ assertEquals(text_get_substring($text, 'FROM_START', 1, 'FROM_END', 1), '2345678', 'substring # #-end simple');
782
+ assertEquals(text_get_substring($text, 'FROM_END', 6, 'FROM_START', 3), '34', 'substring #-end # simple');
783
+ assertEquals(text_get_substring($text, 'FIRST', 0, 'FROM_START', 3), '1234', 'substring first # simple');
784
+ assertEquals(text_get_substring($text, 'FIRST', 0, 'FROM_END', 1), '12345678', 'substring first #-end simple');
785
+ assertEquals(text_get_substring($text, 'FROM_START', 6, 'LAST', 0), '789', 'substring # last simple');
786
+ assertEquals(text_get_substring($text, 'FROM_END', 2, 'LAST', 0), '789', 'substring #-end last simple');
787
+ assertEquals(text_get_substring($text, 'FROM_START', 0, 'FROM_END', 0), '123456789', 'substring all with # #-end simple');
788
+ assertEquals(text_get_substring($text, 'FROM_END', 8, 'FROM_START', 8), '123456789', 'substring all with #-end # simple');
789
+ // Checks that the whole string is properly retrieved even if the value for start and end is not a simple number. This is especially important in generators where substring uses [x:length - y] for # #-end.
790
+ assertEquals(text_get_substring($text, 'FROM_START', ((0 + 1) - 1), 'FROM_END', ((0 + 1) - 1)), '123456789', 'substring all with # #-end math simple');
791
+ }
792
+
793
+ // Tests the "get substring" block with a function call.
794
+ function test_substring_complex() {
795
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
796
+ $number_of_calls = 0;
797
+ assertEquals(text_get_substring(get_numbers(), 'FROM_START', 1, 'FROM_START', 2), '23', 'substring # complex');
798
+ check_number_of_calls('substring # complex');
799
+ $number_of_calls = 0;
800
+ assertEquals(text_get_substring(true ? get_numbers() : null, 'FROM_START', ((true ? 2 : null) - 1), 'FROM_START', ((true ? 3 : null) - 1)), '23', 'substring # complex order');
801
+ check_number_of_calls('substring # complex order');
802
+ $number_of_calls = 0;
803
+ // The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
804
+ assertEquals(text_get_substring(get_numbers(), 'FROM_END', 2, 'FROM_END', 1), '78', 'substring #-end complex');
805
+ check_number_of_calls('substring #-end complex');
806
+ $number_of_calls = 0;
807
+ assertEquals(text_get_substring(true ? get_numbers() : null, 'FROM_END', ((0 + 3) - 1), 'FROM_END', ((0 + 2) - 1)), '78', 'substring #-end order order');
808
+ check_number_of_calls('substring #-end order order');
809
+ $number_of_calls = 0;
810
+ assertEquals(get_numbers(), $text, 'substring first-last');
811
+ check_number_of_calls('substring first-last');
812
+ $number_of_calls = 0;
813
+ assertEquals(text_get_substring(get_numbers(), 'FROM_START', 1, 'FROM_END', 1), '2345678', 'substring # #-end complex');
814
+ check_number_of_calls('substring # #-end complex');
815
+ $number_of_calls = 0;
816
+ assertEquals(text_get_substring(get_numbers(), 'FROM_END', 6, 'FROM_START', 3), '34', 'substring #-end # complex');
817
+ check_number_of_calls('substring #-end # complex');
818
+ $number_of_calls = 0;
819
+ assertEquals(text_get_substring(get_numbers(), 'FIRST', 0, 'FROM_START', 3), '1234', 'substring first # complex');
820
+ check_number_of_calls('substring first # complex');
821
+ $number_of_calls = 0;
822
+ assertEquals(text_get_substring(get_numbers(), 'FIRST', 0, 'FROM_END', 1), '12345678', 'substring first #-end complex');
823
+ check_number_of_calls('substring first #-end complex');
824
+ $number_of_calls = 0;
825
+ assertEquals(text_get_substring(get_numbers(), 'FROM_START', 6, 'LAST', 0), '789', 'substring # last complex');
826
+ check_number_of_calls('substring # last complex');
827
+ $number_of_calls = 0;
828
+ assertEquals(text_get_substring(get_numbers(), 'FROM_END', 2, 'LAST', 0), '789', 'substring #-end last complex');
829
+ check_number_of_calls('substring #-end last complex');
830
+ $number_of_calls = 0;
831
+ assertEquals(text_get_substring(get_numbers(), 'FROM_START', 0, 'FROM_END', 0), '123456789', 'substring all with # #-end complex');
832
+ check_number_of_calls('substring all with # #-end complex');
833
+ $number_of_calls = 0;
834
+ assertEquals(text_get_substring(get_numbers(), 'FROM_END', 8, 'FROM_START', 8), '123456789', 'substring all with #-end # complex');
835
+ check_number_of_calls('substring all with #-end # complex');
836
+ $number_of_calls = 0;
837
+ // Checks that the whole string is properly retrieved even if the value for start and end is not a simple number. This is especially important in generators where substring uses [x:length - y] for # #-end.
838
+ assertEquals(text_get_substring(get_numbers(), 'FROM_START', ((0 + 1) - 1), 'FROM_END', ((0 + 1) - 1)), '123456789', 'substring all with # #-end math complex');
839
+ check_number_of_calls('substring all with # #-end math complex');
840
+ }
841
+
842
+ // Tests the "change casing" block.
843
+ function test_case() {
844
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
845
+ $text = 'Hello World';
846
+ assertEquals(strtoupper($text), 'HELLO WORLD', 'uppercase');
847
+ assertEquals(strtoupper(true ? $text : null), 'HELLO WORLD', 'uppercase order');
848
+ $text = 'Hello World';
849
+ assertEquals(strtolower($text), 'hello world', 'lowercase');
850
+ assertEquals(strtolower(true ? $text : null), 'hello world', 'lowercase order');
851
+ $text = 'heLLo WorlD';
852
+ assertEquals(ucwords(strtolower($text)), 'Hello World', 'titlecase');
853
+ assertEquals(ucwords(strtolower(true ? $text : null)), 'Hello World', 'titlecase order');
854
+ }
855
+
856
+ // Tests the "trim" block.
857
+ function test_trim() {
858
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
859
+ $text = ' abc def ';
860
+ assertEquals(trim($text), 'abc def', 'trim both');
861
+ assertEquals(trim(true ? $text : null), 'abc def', 'trim both order');
862
+ assertEquals(ltrim($text), 'abc def ', 'trim left');
863
+ assertEquals(ltrim(true ? $text : null), 'abc def ', 'trim left order');
864
+ assertEquals(rtrim($text), ' abc def', 'trim right');
865
+ assertEquals(rtrim(true ? $text : null), ' abc def', 'trim right order');
866
+ }
867
+
868
+ // Tests the "trim" block.
869
+ function test_count_text() {
870
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
871
+ $text = 'woolloomooloo';
872
+ assertEquals(strlen('o') === 0 ? strlen($text) + 1 : substr_count($text, 'o'), 8, 'len 1');
873
+ assertEquals(strlen('oo') === 0 ? strlen($text) + 1 : substr_count($text, 'oo'), 4, 'len 2');
874
+ assertEquals(strlen('loo') === 0 ? strlen($text) + 1 : substr_count($text, 'loo'), 2, 'len 3');
875
+ assertEquals(strlen('wool') === 0 ? strlen($text) + 1 : substr_count($text, 'wool'), 1, 'start');
876
+ assertEquals(strlen('chicken') === 0 ? strlen($text) + 1 : substr_count($text, 'chicken'), 0, 'missing');
877
+ assertEquals(strlen('') === 0 ? strlen($text) + 1 : substr_count($text, ''), 14, 'empty needle');
878
+ assertEquals(strlen('chicken') === 0 ? strlen('') + 1 : substr_count('', 'chicken'), 0, 'empty source');
879
+ }
880
+
881
+ // Tests the "trim" block.
882
+ function test_text_reverse() {
883
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
884
+ assertEquals(strrev(''), '', 'empty string');
885
+ assertEquals(strrev('a'), 'a', 'len 1');
886
+ assertEquals(strrev('ab'), 'ba', 'len 2');
887
+ assertEquals(strrev('woolloomooloo'), 'ooloomoolloow', 'longer');
888
+ }
889
+
890
+ // Tests the "trim" block.
891
+ function test_replace() {
892
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
893
+ assertEquals(str_replace('oo', '123', 'woolloomooloo'), 'w123ll123m123l123', 'replace all instances 1');
894
+ assertEquals(str_replace('.oo', 'X', 'woolloomooloo'), 'woolloomooloo', 'literal string replacement');
895
+ assertEquals(str_replace('abc', 'X', 'woolloomooloo'), 'woolloomooloo', 'not found');
896
+ assertEquals(str_replace('o', '', 'woolloomooloo'), 'wllml', 'empty replacement 1');
897
+ assertEquals(str_replace('aaaaa', '', 'aaaaa'), '', 'empty replacement 2');
898
+ assertEquals(str_replace('a', '', 'aaaaa'), '', 'empty replacement 3');
899
+ assertEquals(str_replace('a', 'chicken', ''), '', 'empty source');
900
+ }
901
+
902
+ // Checks that the number of calls is one in order
903
+ // to confirm that a function was only called once.
904
+ function check_number_of_calls2($test_name) {
905
+ global $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
906
+ $test_name .= 'number of calls';
907
+ assertEquals($number_of_calls, 1, $test_name);
908
+ }
909
+
910
+ function lists_repeat($value, $count) {
911
+ $array = array();
912
+ for ($index = 0; $index < $count; $index++) {
913
+ $array[] = $value;
914
+ }
915
+ return $array;
916
+ }
917
+
918
+ // Tests the "create list with" and "create empty list" blocks.
919
+ function test_create_lists() {
920
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
921
+ assertEquals(array(), array(), 'create empty');
922
+ assertEquals(array(true, 'love'), array(true, 'love'), 'create items');
923
+ assertEquals(lists_repeat('Eject', 3), array('Eject', 'Eject', 'Eject'), 'create repeated');
924
+ assertEquals(lists_repeat('Eject', 0 + 3), array('Eject', 'Eject', 'Eject'), 'create repeated order');
925
+ }
926
+
927
+ // Creates an empty list for use with the empty test.
928
+ function get_empty_list() {
929
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
930
+ return array();
931
+ }
932
+
933
+ // Tests the "is empty" block.
934
+ function test_lists_empty() {
935
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
936
+ assertEquals(empty((array(0))), false, 'not empty');
937
+ assertEquals(empty((array())), true, 'empty');
938
+ assertEquals(empty((get_empty_list())), true, 'empty complex');
939
+ assertEquals(empty((true ? array() : null)), true, 'empty order');
940
+ }
941
+
942
+ // Tests the "length" block.
943
+ function test_lists_length() {
944
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
945
+ assertEquals(length(array()), 0, 'zero length');
946
+ assertEquals(length(array('cat')), 1, 'one length');
947
+ assertEquals(length(array('cat', true, array())), 3, 'three length');
948
+ assertEquals(length(true ? array('cat', true) : null), 2, 'two length order');
949
+ }
950
+
951
+ function lastIndexOf($haystack, $needle) {
952
+ $last = 0;
953
+ for ($index = 0; $index < count($haystack); $index++) {
954
+ if ($haystack[$index] == $needle) $last = $index + 1;
955
+ }
956
+ return $last;
957
+ }
958
+
959
+ // Tests the "find" block with a variable.
960
+ function test_find_lists_simple() {
961
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
962
+ $list2 = array('Alice', 'Eve', 'Bob', 'Eve');
963
+ assertEquals(indexOf($list2, 'Eve'), 2, 'find first simple');
964
+ assertEquals(lastIndexOf($list2, 'Eve'), 4, 'find last simple');
965
+ assertEquals(indexOf($list2, 'Dave'), 0, 'find none simple');
966
+ }
967
+
968
+ // Creates a list for use with the find test.
969
+ function get_names() {
970
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
971
+ $number_of_calls += 1;
972
+ return array('Alice', 'Eve', 'Bob', 'Eve');
973
+ }
974
+
975
+ // Tests the "find" block with a function call.
976
+ function test_find_lists_complex() {
977
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
978
+ $number_of_calls = 0;
979
+ assertEquals(indexOf(get_names(), 'Eve'), 2, 'find first complex');
980
+ check_number_of_calls('find first complex');
981
+ $number_of_calls = 0;
982
+ assertEquals(indexOf((true ? get_names() : null), 'Eve'), 2, 'find first order complex');
983
+ check_number_of_calls('find first order complex');
984
+ $number_of_calls = 0;
985
+ assertEquals(lastIndexOf(get_names(), 'Eve'), 4, 'find last complex');
986
+ check_number_of_calls('find last complex');
987
+ $number_of_calls = 0;
988
+ assertEquals(lastIndexOf((true ? get_names() : null), 'Eve'), 4, 'find last order complex');
989
+ check_number_of_calls('find last order complex');
990
+ $number_of_calls = 0;
991
+ assertEquals(indexOf(get_names(), 'Dave'), 0, 'find none complex');
992
+ check_number_of_calls('find none complex');
993
+ $number_of_calls = 0;
994
+ assertEquals(indexOf((true ? get_names() : null), 'Dave'), 0, 'find none order complex');
995
+ check_number_of_calls('find none order complex');
996
+ }
997
+
998
+ function lists_get_random_item($list) {
999
+ return $list[rand(0,count($list)-1)];
1000
+ }
1001
+
1002
+ // Tests the "get" block with a variable.
1003
+ function test_get_lists_simple() {
1004
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1005
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1006
+ assertEquals($list2[0], 'Kirk', 'get first simple');
1007
+ assertEquals(end($list2), 'McCoy', 'get last simple');
1008
+ assertEquals(indexOf($list2, lists_get_random_item($list2)) > 0, true, 'get random simple');
1009
+ assertEquals($list2[1], 'Spock', 'get # simple');
1010
+ assertEquals($list2[((true ? 2 : null) - 1)], 'Spock', 'get # order simple');
1011
+ assertEquals(array_slice($list2, -3, 1)[0], 'Kirk', 'get #-end simple');
1012
+ // The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
1013
+ assertEquals(array_slice($list2, (-(0 + 3)), 1)[0], 'Kirk', 'get #-end order simple');
1014
+ }
1015
+
1016
+ // Tests the "get" block with create list call.
1017
+ function test_get_lists_create_list() {
1018
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1019
+ assertEquals(array('Kirk', 'Spock', 'McCoy')[0], 'Kirk', 'get first create list');
1020
+ assertEquals(end(array('Kirk', 'Spock', 'McCoy')), 'McCoy', 'get last simple');
1021
+ assertEquals(indexOf(array('Kirk', 'Spock', 'McCoy'), lists_get_random_item(array('Kirk', 'Spock', 'McCoy'))) > 0, true, 'get random simple');
1022
+ assertEquals(array('Kirk', 'Spock', 'McCoy')[1], 'Spock', 'get # simple');
1023
+ assertEquals(array('Kirk', 'Spock', 'McCoy')[((true ? 2 : null) - 1)], 'Spock', 'get # order simple');
1024
+ assertEquals(array_slice(array('Kirk', 'Spock', 'McCoy'), -3, 1)[0], 'Kirk', 'get #-end simple');
1025
+ // The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
1026
+ assertEquals(array_slice(array('Kirk', 'Spock', 'McCoy'), (-(0 + 3)), 1)[0], 'Kirk', 'get #-end order simple');
1027
+ }
1028
+
1029
+ // Creates a list for use with the get test.
1030
+ function get_star_wars() {
1031
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1032
+ $number_of_calls += 1;
1033
+ return array('Kirk', 'Spock', 'McCoy');
1034
+ }
1035
+
1036
+ // Tests the "get" block with a function call.
1037
+ function test_get_lists_complex() {
1038
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1039
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1040
+ $number_of_calls = 0;
1041
+ assertEquals(get_star_wars()[0], 'Kirk', 'get first complex');
1042
+ check_number_of_calls('get first complex');
1043
+ $number_of_calls = 0;
1044
+ assertEquals((true ? get_star_wars() : null)[0], 'Kirk', 'get first order complex');
1045
+ check_number_of_calls('get first order complex');
1046
+ $number_of_calls = 0;
1047
+ assertEquals(end(get_star_wars()), 'McCoy', 'get last complex');
1048
+ check_number_of_calls('get last complex');
1049
+ $number_of_calls = 0;
1050
+ assertEquals(end(true ? get_star_wars() : null), 'McCoy', 'get last order complex');
1051
+ check_number_of_calls('get last order complex');
1052
+ $number_of_calls = 0;
1053
+ assertEquals(indexOf($list2, lists_get_random_item(get_star_wars())) > 0, true, 'get random complex');
1054
+ check_number_of_calls('get random complex');
1055
+ $number_of_calls = 0;
1056
+ assertEquals(indexOf($list2, lists_get_random_item(true ? get_star_wars() : null)) > 0, true, 'get random order complex');
1057
+ check_number_of_calls('get random order complex');
1058
+ $number_of_calls = 0;
1059
+ assertEquals(get_star_wars()[1], 'Spock', 'get # complex');
1060
+ check_number_of_calls('get # complex');
1061
+ $number_of_calls = 0;
1062
+ assertEquals((true ? get_star_wars() : null)[((true ? 2 : null) - 1)], 'Spock', 'get # order complex');
1063
+ check_number_of_calls('get # order complex');
1064
+ $number_of_calls = 0;
1065
+ assertEquals(array_slice(get_star_wars(), -3, 1)[0], 'Kirk', 'get #-end complex');
1066
+ check_number_of_calls('get #-end complex');
1067
+ $number_of_calls = 0;
1068
+ // The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
1069
+ assertEquals(array_slice(true ? get_star_wars() : null, (-(0 + 3)), 1)[0], 'Kirk', 'get #-end order complex');
1070
+ check_number_of_calls('get #-end order complex');
1071
+ }
1072
+
1073
+ function lists_get_remove_random_item(&$list) {
1074
+ $x = rand(0,count($list)-1);
1075
+ unset($list[$x]);
1076
+ return array_values($list);
1077
+ }
1078
+
1079
+ // Tests the "get and remove" block.
1080
+ function test_getRemove() {
1081
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1082
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1083
+ assertEquals(array_shift($list2), 'Kirk', 'getremove first');
1084
+ assertEquals($list2, array('Spock', 'McCoy'), 'getremove first list');
1085
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1086
+ assertEquals(array_shift(true ? $list2 : null), 'Kirk', 'getremove first order');
1087
+ assertEquals($list2, array('Spock', 'McCoy'), 'getremove first order list');
1088
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1089
+ assertEquals(array_pop($list2), 'McCoy', 'getremove last');
1090
+ assertEquals($list2, array('Kirk', 'Spock'), 'getremove last list');
1091
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1092
+ assertEquals(array_pop(true ? $list2 : null), 'McCoy', 'getremove last order');
1093
+ assertEquals($list2, array('Kirk', 'Spock'), 'getremove last order list');
1094
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1095
+ assertEquals(indexOf($list2, lists_get_remove_random_item($list2)) == 0, true, 'getremove random');
1096
+ assertEquals(length($list2), 2, 'getremove random list');
1097
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1098
+ assertEquals(indexOf($list2, lists_get_remove_random_item(true ? $list2 : null)) == 0, true, 'getremove random order');
1099
+ assertEquals(length($list2), 2, 'getremove random order list');
1100
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1101
+ assertEquals(array_splice($list2, 1, 1)[0], 'Spock', 'getremove #');
1102
+ assertEquals($list2, array('Kirk', 'McCoy'), 'getremove # list');
1103
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1104
+ assertEquals(array_splice(true ? $list2 : null, ((true ? 2 : null) - 1), 1)[0], 'Spock', 'getremove # order');
1105
+ assertEquals($list2, array('Kirk', 'McCoy'), 'getremove # order list');
1106
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1107
+ assertEquals(array_splice($list2, count($list2) - 3, 1)[0], 'Kirk', 'getremove #-end');
1108
+ assertEquals($list2, array('Spock', 'McCoy'), 'getremove #-end list');
1109
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1110
+ // The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
1111
+ assertEquals(array_splice(true ? $list2 : null, count(true ? $list2 : null) - (0 + 3), 1)[0], 'Kirk', 'getremove #-end order');
1112
+ assertEquals($list2, array('Spock', 'McCoy'), 'getremove #-end order list');
1113
+ }
1114
+
1115
+ function lists_remove_random_item(&$list) {
1116
+ unset($list[rand(0,count($list)-1)]);
1117
+ }
1118
+
1119
+ // Tests the "remove" block.
1120
+ function test_remove() {
1121
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1122
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1123
+ array_shift($list2);
1124
+ assertEquals($list2, array('Spock', 'McCoy'), 'remove first list');
1125
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1126
+ array_shift(true ? $list2 : null);
1127
+ assertEquals($list2, array('Spock', 'McCoy'), 'remove first order list');
1128
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1129
+ array_pop($list2);
1130
+ assertEquals($list2, array('Kirk', 'Spock'), 'remove last list');
1131
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1132
+ array_pop(true ? $list2 : null);
1133
+ assertEquals($list2, array('Kirk', 'Spock'), 'remove last order list');
1134
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1135
+ lists_remove_random_item($list2);
1136
+ assertEquals(length($list2), 2, 'remove random list');
1137
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1138
+ lists_remove_random_item(true ? $list2 : null);
1139
+ assertEquals(length($list2), 2, 'remove random order list');
1140
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1141
+ array_splice($list2, 1, 1);
1142
+ assertEquals($list2, array('Kirk', 'McCoy'), 'remove # list');
1143
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1144
+ array_splice(true ? $list2 : null, ((true ? 2 : null) - 1), 1);
1145
+ assertEquals($list2, array('Kirk', 'McCoy'), 'remove # order list');
1146
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1147
+ array_splice($list2, count($list2) - 3, 1)[0];
1148
+ assertEquals($list2, array('Spock', 'McCoy'), 'remove #-end list');
1149
+ $list2 = array('Kirk', 'Spock', 'McCoy');
1150
+ // The order for index for #-end is addition because this will catch
1151
+ // errors in generators where most perform the operation ... - index.
1152
+ array_splice(true ? $list2 : null, count(true ? $list2 : null) - (0 + 3), 1)[0];
1153
+ assertEquals($list2, array('Spock', 'McCoy'), 'remove #-end order list');
1154
+ }
1155
+
1156
+ function lists_set_last_item(&$list, $value) {
1157
+ $list[count($list) - 1] = $value;
1158
+ }
1159
+
1160
+ function lists_set_from_end(&$list, $at, $value) {
1161
+ $list[count($list) - $at] = $value;
1162
+ }
1163
+
1164
+ // Tests the "set" block.
1165
+ function test_set() {
1166
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1167
+ $list2 = array('Picard', 'Riker', 'Crusher');
1168
+ $list2[0] = 'Jean-Luc';
1169
+ assertEquals($list2, array('Jean-Luc', 'Riker', 'Crusher'), 'set first list');
1170
+ $list2 = array('Picard', 'Riker', 'Crusher');
1171
+ (true ? $list2 : null)[0] = 'Jean-Luc';
1172
+ assertEquals($list2, array('Jean-Luc', 'Riker', 'Crusher'), 'set first order list');
1173
+ $list2 = array('Picard', 'Riker', 'Crusher');
1174
+ lists_set_last_item($list2, 'Beverly');
1175
+ assertEquals($list2, array('Picard', 'Riker', 'Beverly'), 'set last list');
1176
+ $list2 = array('Picard', 'Riker', 'Crusher');
1177
+ lists_set_last_item(true ? $list2 : null, 'Beverly');
1178
+ assertEquals($list2, array('Picard', 'Riker', 'Beverly'), 'set last order list');
1179
+ $list2 = array('Picard', 'Riker', 'Crusher');
1180
+ $tmp_x = rand(0, count($list2)-1);
1181
+ $list2[$tmp_x] = 'Data';
1182
+ assertEquals(length($list2), 3, 'set random list');
1183
+ $list2 = array('Picard', 'Riker', 'Crusher');
1184
+ $tmp_list = &(true ? $list2 : null);
1185
+ $tmp_x2 = rand(0, count($tmp_list)-1);
1186
+ $tmp_list[$tmp_x2] = 'Data';
1187
+ assertEquals(length($list2), 3, 'set random order list');
1188
+ $list2 = array('Picard', 'Riker', 'Crusher');
1189
+ $list2[2] = 'Pulaski';
1190
+ assertEquals($list2, array('Picard', 'Riker', 'Pulaski'), 'set # list');
1191
+ $list2 = array('Picard', 'Riker', 'Crusher');
1192
+ (true ? $list2 : null)[((true ? 3 : null) - 1)] = 'Pulaski';
1193
+ assertEquals($list2, array('Picard', 'Riker', 'Pulaski'), 'set # order list');
1194
+ $list2 = array('Picard', 'Riker', 'Crusher');
1195
+ lists_set_from_end($list2, 1, 'Pulaski');
1196
+ assertEquals($list2, array('Picard', 'Riker', 'Pulaski'), 'set #-end list');
1197
+ $list2 = array('Picard', 'Riker', 'Crusher');
1198
+ // The order for index for #-end is addition because this will catch
1199
+ // errors in generators where most perform the operation ... - index.
1200
+ lists_set_from_end(true ? $list2 : null, 0 + 2, 'Pulaski');
1201
+ assertEquals($list2, array('Picard', 'Pulaski', 'Crusher'), 'set #-end order list');
1202
+ }
1203
+
1204
+ function lists_insert_from_end(&$list, $at, $value) {
1205
+ return array_splice($list, count($list) - $at, 0, $value);
1206
+ }
1207
+
1208
+ // Tests the "insert" block.
1209
+ function test_insert() {
1210
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1211
+ $list2 = array('Picard', 'Riker', 'Crusher');
1212
+ array_unshift($list2, 'Data');
1213
+ assertEquals($list2, array('Data', 'Picard', 'Riker', 'Crusher'), 'insert first list');
1214
+ $list2 = array('Picard', 'Riker', 'Crusher');
1215
+ array_unshift(true ? $list2 : null, 'Data');
1216
+ assertEquals($list2, array('Data', 'Picard', 'Riker', 'Crusher'), 'insert first order list');
1217
+ $list2 = array('Picard', 'Riker', 'Crusher');
1218
+ array_push($list2, 'Data');
1219
+ assertEquals($list2, array('Picard', 'Riker', 'Crusher', 'Data'), 'insert last list');
1220
+ $list2 = array('Picard', 'Riker', 'Crusher');
1221
+ array_push(true ? $list2 : null, 'Data');
1222
+ assertEquals($list2, array('Picard', 'Riker', 'Crusher', 'Data'), 'insert last order list');
1223
+ $list2 = array('Picard', 'Riker', 'Crusher');
1224
+ $tmp_x3 = rand(0, count($list2)-1);
1225
+ array_splice($list2, $tmp_x3, 0, 'Data');
1226
+ assertEquals(length($list2), 4, 'insert random list');
1227
+ $list2 = array('Picard', 'Riker', 'Crusher');
1228
+ $tmp_list2 = &(true ? $list2 : null);
1229
+ $tmp_x4 = rand(0, count($tmp_list2)-1);
1230
+ array_splice($tmp_list2, $tmp_x4, 0, 'Data');
1231
+ assertEquals(length($list2), 4, 'insert random order list');
1232
+ $list2 = array('Picard', 'Riker', 'Crusher');
1233
+ array_splice($list2, 2, 0, 'Data');
1234
+ assertEquals($list2, array('Picard', 'Riker', 'Data', 'Crusher'), 'insert # list');
1235
+ $list2 = array('Picard', 'Riker', 'Crusher');
1236
+ array_splice(true ? $list2 : null, ((true ? 3 : null) - 1), 0, 'Data');
1237
+ assertEquals($list2, array('Picard', 'Riker', 'Data', 'Crusher'), 'insert # order list');
1238
+ $list2 = array('Picard', 'Riker', 'Crusher');
1239
+ lists_insert_from_end($list2, 1, 'Data');
1240
+ assertEquals($list2, array('Picard', 'Riker', 'Data', 'Crusher'), 'insert #-end list');
1241
+ $list2 = array('Picard', 'Riker', 'Crusher');
1242
+ // The order for index for #-end is addition because this will catch
1243
+ // errors in generators where most perform the operation ... - index.
1244
+ lists_insert_from_end(true ? $list2 : null, 0 + 2, 'Data');
1245
+ assertEquals($list2, array('Picard', 'Data', 'Riker', 'Crusher'), 'insert #-end order list');
1246
+ }
1247
+
1248
+ // Tests the "get sub-list" block with a variable.
1249
+ function test_sublist_simple() {
1250
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1251
+ $list2 = array('Columbia', 'Challenger', 'Discovery', 'Atlantis', 'Endeavour');
1252
+ assertEquals(array_slice($list2, 1, 2 - 1 + 1), array('Challenger', 'Discovery'), 'sublist # simple');
1253
+ assertEquals(array_slice($list2, ((true ? 2 : null) - 1), ((true ? 3 : null) - 1) - ((true ? 2 : null) - 1) + 1), array('Challenger', 'Discovery'), 'sublist # simple order');
1254
+ assertEquals(array_slice($list2, count($list2) - 3, count($list2) - 1 - (count($list2) - 3)), array('Discovery', 'Atlantis'), 'sublist #-end simple');
1255
+ // The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
1256
+ assertEquals(array_slice($list2, count($list2) - (0 + 3), count($list2) - ((0 + 2) - 1) - (count($list2) - (0 + 3))), array('Discovery', 'Atlantis'), 'sublist #-end simple order');
1257
+ assertEquals($list2, $list2, 'sublist first-last simple');
1258
+ $changing_list = array('Columbia', 'Challenger', 'Discovery', 'Atlantis', 'Endeavour');
1259
+ $list_copy = $changing_list;
1260
+ lists_remove_random_item($changing_list);
1261
+ assertEquals($list_copy, $list2, 'sublist first-last simple copy check');
1262
+ assertEquals(array_slice($list2, 1, count($list2) - 1 - 1), array('Challenger', 'Discovery', 'Atlantis'), 'sublist # #-end simple');
1263
+ assertEquals(array_slice($list2, count($list2) - 3, 3 - (count($list2) - 3) + 1), array('Discovery', 'Atlantis'), 'sublist #-end # simple');
1264
+ assertEquals(array_slice($list2, 0, 3 - 0 + 1), array('Columbia', 'Challenger', 'Discovery', 'Atlantis'), 'sublist first # simple');
1265
+ assertEquals(array_slice($list2, 0, count($list2) - 3 - 0), array('Columbia', 'Challenger'), 'sublist first #-end simple');
1266
+ assertEquals(array_slice($list2, 3, count($list2) - 3), array('Atlantis', 'Endeavour'), 'sublist # last simple');
1267
+ assertEquals(array_slice($list2, count($list2) - 4, count($list2) - (count($list2) - 4)), array('Challenger', 'Discovery', 'Atlantis', 'Endeavour'), 'sublist #-end last simple');
1268
+ assertEquals(array_slice($list2, 0, count($list2) - 0 - 0), $list2, 'sublist all with # #-end simple');
1269
+ assertEquals(array_slice($list2, count($list2) - 5, 4 - (count($list2) - 5) + 1), $list2, 'sublist all with #-end # simple');
1270
+ // Checks that the whole list is properly retrieved even if the value for start and end is not a simple number. This is especially important in generators where sublist uses [x:length - y] for # #-end.
1271
+ assertEquals(array_slice($list2, ((0 + 1) - 1), count($list2) - ((0 + 1) - 1) - ((0 + 1) - 1)), $list2, 'sublist all with # #-end math simple');
1272
+ }
1273
+
1274
+ // Creates a list for use with the sublist test.
1275
+ function get_space_shuttles() {
1276
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1277
+ $number_of_calls += 1;
1278
+ return array('Columbia', 'Challenger', 'Discovery', 'Atlantis', 'Endeavour');
1279
+ }
1280
+
1281
+ function lists_get_sublist($list, $where1, $at1, $where2, $at2) {
1282
+ if ($where1 == 'FROM_END') {
1283
+ $at1 = count($list) - 1 - $at1;
1284
+ } else if ($where1 == 'FIRST') {
1285
+ $at1 = 0;
1286
+ } else if ($where1 != 'FROM_START') {
1287
+ throw new Exception('Unhandled option (lists_get_sublist).');
1288
+ }
1289
+ $length = 0;
1290
+ if ($where2 == 'FROM_START') {
1291
+ $length = $at2 - $at1 + 1;
1292
+ } else if ($where2 == 'FROM_END') {
1293
+ $length = count($list) - $at1 - $at2;
1294
+ } else if ($where2 == 'LAST') {
1295
+ $length = count($list) - $at1;
1296
+ } else {
1297
+ throw new Exception('Unhandled option (lists_get_sublist).');
1298
+ }
1299
+ return array_slice($list, $at1, $length);
1300
+ }
1301
+
1302
+ // Tests the "get sub-list" block with a function call.
1303
+ function test_sublist_complex() {
1304
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1305
+ $number_of_calls = 0;
1306
+ assertEquals(array_slice(get_space_shuttles(), 1, 2 - 1 + 1), array('Challenger', 'Discovery'), 'sublist # start complex');
1307
+ check_number_of_calls('sublist # start complex');
1308
+ $number_of_calls = 0;
1309
+ assertEquals(array_slice(true ? get_space_shuttles() : null, ((true ? 2 : null) - 1), ((true ? 3 : null) - 1) - ((true ? 2 : null) - 1) + 1), array('Challenger', 'Discovery'), 'sublist # start order complex');
1310
+ check_number_of_calls('sublist # start order complex');
1311
+ $number_of_calls = 0;
1312
+ // The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
1313
+ assertEquals(lists_get_sublist(get_space_shuttles(), 'FROM_END', 2, 'FROM_END', 1), array('Discovery', 'Atlantis'), 'sublist # end complex');
1314
+ assertEquals($number_of_calls, 1, 'sublist # end complex number of calls');
1315
+ $number_of_calls = 0;
1316
+ assertEquals(lists_get_sublist(true ? get_space_shuttles() : null, 'FROM_END', ((0 + 3) - 1), 'FROM_END', ((0 + 2) - 1)), array('Discovery', 'Atlantis'), 'sublist # end order complex');
1317
+ check_number_of_calls('sublist # end order complex');
1318
+ $number_of_calls = 0;
1319
+ assertEquals(get_space_shuttles(), $list2, 'sublist first-last complex');
1320
+ check_number_of_calls('sublist first-last complex');
1321
+ $number_of_calls = 0;
1322
+ assertEquals(lists_get_sublist(get_space_shuttles(), 'FROM_START', 1, 'FROM_END', 1), array('Challenger', 'Discovery', 'Atlantis'), 'sublist # #-end complex');
1323
+ check_number_of_calls('sublist # #-end complex');
1324
+ $number_of_calls = 0;
1325
+ assertEquals(lists_get_sublist(get_space_shuttles(), 'FROM_END', 2, 'FROM_START', 3), array('Discovery', 'Atlantis'), 'sublist #-end # complex');
1326
+ check_number_of_calls('sublist #-end # complex');
1327
+ $number_of_calls = 0;
1328
+ assertEquals(array_slice(get_space_shuttles(), 0, 3 - 0 + 1), array('Columbia', 'Challenger', 'Discovery', 'Atlantis'), 'sublist first # complex');
1329
+ check_number_of_calls('sublist first # complex');
1330
+ $number_of_calls = 0;
1331
+ assertEquals(lists_get_sublist(get_space_shuttles(), 'FIRST', 0, 'FROM_END', 3), array('Columbia', 'Challenger'), 'sublist first #-end complex');
1332
+ check_number_of_calls('sublist first #-end complex');
1333
+ $number_of_calls = 0;
1334
+ assertEquals(lists_get_sublist(get_space_shuttles(), 'FROM_START', 3, 'LAST', 0), array('Atlantis', 'Endeavour'), 'sublist # last complex');
1335
+ check_number_of_calls('sublist # last complex');
1336
+ $number_of_calls = 0;
1337
+ assertEquals(lists_get_sublist(get_space_shuttles(), 'FROM_END', 3, 'LAST', 0), array('Challenger', 'Discovery', 'Atlantis', 'Endeavour'), 'sublist #-end last simple');
1338
+ check_number_of_calls('sublist #-end last simple');
1339
+ $number_of_calls = 0;
1340
+ assertEquals(lists_get_sublist(get_space_shuttles(), 'FROM_START', 0, 'FROM_END', 0), $list2, 'sublist all with # #-end complex');
1341
+ check_number_of_calls('sublist all with # #-end complex');
1342
+ $number_of_calls = 0;
1343
+ assertEquals(lists_get_sublist(get_space_shuttles(), 'FROM_END', 4, 'FROM_START', 4), $list2, 'sublist all with #-end # complex');
1344
+ check_number_of_calls('sublist all with #-end # complex');
1345
+ $number_of_calls = 0;
1346
+ // Checks that the whole list is properly retrieved even if the value for start and end is not a simple number. This is especially important in generators where sublist uses [x:length - y] for # #-end.
1347
+ assertEquals(lists_get_sublist(get_space_shuttles(), 'FROM_START', ((0 + 1) - 1), 'FROM_END', ((0 + 1) - 1)), $list2, 'sublist all with # #-end math complex');
1348
+ check_number_of_calls('sublist all with # #-end math complex');
1349
+ }
1350
+
1351
+ // Tests the "join" block.
1352
+ function test_join() {
1353
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1354
+ $list2 = array('Vulcan', 'Klingon', 'Borg');
1355
+ assertEquals(implode(',', $list2), 'Vulcan,Klingon,Borg', 'join');
1356
+ assertEquals(implode(',', true ? $list2 : null), 'Vulcan,Klingon,Borg', 'join order');
1357
+ }
1358
+
1359
+ // Tests the "split" block.
1360
+ function test_split() {
1361
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1362
+ $text = 'Vulcan,Klingon,Borg';
1363
+ assertEquals(explode(',', $text), array('Vulcan', 'Klingon', 'Borg'), 'split');
1364
+ assertEquals(explode(',', true ? $text : null), array('Vulcan', 'Klingon', 'Borg'), 'split order');
1365
+ }
1366
+
1367
+ function lists_sort($list, $type, $direction) {
1368
+ $sortCmpFuncs = array(
1369
+ 'NUMERIC' => 'strnatcasecmp',
1370
+ 'TEXT' => 'strcmp',
1371
+ 'IGNORE_CASE' => 'strcasecmp'
1372
+ );
1373
+ $sortCmp = $sortCmpFuncs[$type];
1374
+ $list2 = $list;
1375
+ usort($list2, $sortCmp);
1376
+ if ($direction == -1) {
1377
+ $list2 = array_reverse($list2);
1378
+ }
1379
+ return $list2;
1380
+ }
1381
+
1382
+ // Tests the "alphabetic sort" block.
1383
+ function test_sort_alphabetic() {
1384
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1385
+ $list2 = array('Vulcan', 'klingon', 'Borg');
1386
+ assertEquals(lists_sort($list2, "TEXT", 1), array('Borg', 'Vulcan', 'klingon'), 'sort alphabetic ascending');
1387
+ assertEquals(lists_sort(true ? $list2 : null, "TEXT", 1), array('Borg', 'Vulcan', 'klingon'), 'sort alphabetic ascending order');
1388
+ }
1389
+
1390
+ // Tests the "alphabetic sort ignore case" block.
1391
+ function test_sort_ignoreCase() {
1392
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1393
+ $list2 = array('Vulcan', 'klingon', 'Borg');
1394
+ assertEquals(lists_sort($list2, "IGNORE_CASE", 1), array('Borg', 'klingon', 'Vulcan'), 'sort ignore case ascending');
1395
+ assertEquals(lists_sort(true ? $list2 : null, "IGNORE_CASE", 1), array('Borg', 'klingon', 'Vulcan'), 'sort ignore case ascending order');
1396
+ }
1397
+
1398
+ // Tests the "numeric sort" block.
1399
+ function test_sort_numeric() {
1400
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1401
+ $list2 = array(8, 18, -1);
1402
+ assertEquals(lists_sort($list2, "NUMERIC", -1), array(18, 8, -1), 'sort numeric descending');
1403
+ assertEquals(lists_sort(true ? $list2 : null, "NUMERIC", -1), array(18, 8, -1), 'sort numeric descending order');
1404
+ }
1405
+
1406
+ // Tests the "list reverse" block.
1407
+ function test_lists_reverse() {
1408
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1409
+ $list2 = array(8, 18, -1, 64);
1410
+ assertEquals(array_reverse($list2), array(64, -1, 18, 8), 'reverse a copy');
1411
+ assertEquals($list2, array(8, 18, -1, 64), 'reverse a copy original');
1412
+ $list2 = array();
1413
+ assertEquals(array_reverse($list2), array(), 'empty list');
1414
+ }
1415
+
1416
+ // Describe this function...
1417
+ function test_procedure() {
1418
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1419
+ procedure_1(8, 2);
1420
+ assertEquals($proc_z, 4, 'procedure with global');
1421
+ $proc_w = false;
1422
+ procedure_2(false);
1423
+ assertEquals($proc_w, true, 'procedure no return');
1424
+ $proc_w = false;
1425
+ procedure_2(true);
1426
+ assertEquals($proc_w, false, 'procedure return');
1427
+ }
1428
+
1429
+ // Describe this function...
1430
+ function procedure_1($proc_x, $proc_y) {
1431
+ global $test_name, $naked, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1432
+ $proc_z = $proc_x / $proc_y;
1433
+ }
1434
+
1435
+ // Describe this function...
1436
+ function procedure_2($proc_x) {
1437
+ global $test_name, $naked, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1438
+ if ($proc_x) {
1439
+ return;
1440
+ }
1441
+ $proc_w = true;
1442
+ }
1443
+
1444
+ // Describe this function...
1445
+ function test_function() {
1446
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1447
+ assertEquals(function_1(2, 3), -1, 'function with arguments');
1448
+ assertEquals($func_z, 'side effect', 'function with side effect');
1449
+ $func_a = 'unchanged';
1450
+ $func_c = 'global';
1451
+ assertEquals(function_2(2), '3global', 'function with global');
1452
+ assertEquals($func_a, 'unchanged', 'function with scope');
1453
+ assertEquals(function_3(true), true, 'function return');
1454
+ assertEquals(function_3(false), false, 'function no return');
1455
+ }
1456
+
1457
+ // Describe this function...
1458
+ function function_1($func_x, $func_y) {
1459
+ global $test_name, $naked, $proc_x, $proc_y, $func_a, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1460
+ $func_z = 'side effect';
1461
+ return $func_x - $func_y;
1462
+ }
1463
+
1464
+ // Describe this function...
1465
+ function function_2($func_a) {
1466
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1467
+ $func_a += 1;
1468
+ return $func_a . $func_c;
1469
+ }
1470
+
1471
+ // Describe this function...
1472
+ function function_3($func_a) {
1473
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $n, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1474
+ if ($func_a) {
1475
+ return true;
1476
+ }
1477
+ return false;
1478
+ }
1479
+
1480
+ // Describe this function...
1481
+ function recurse($n) {
1482
+ global $test_name, $naked, $proc_x, $proc_y, $func_x, $func_y, $func_a, $ok, $log, $count, $varToChange, $rand, $item, $text, $number_of_calls, $list2, $proc_z, $func_z, $x, $proc_w, $func_c, $if2, $loglist, $changing_list, $list_copy, $unittestResults;
1483
+ if ($n > 0) {
1484
+ $text = implode('', array(recurse($n - 1),$n,recurse($n - 1)));
1485
+ } else {
1486
+ $text = '-';
1487
+ }
1488
+ return $text;
1489
+ }
1490
+
1491
+
1492
+ $unittestResults = array();
1493
+ print("\n====================\n\nRunning suite: Logic\n");
1494
+ assertEquals(true, true, 'True');
1495
+ assertEquals(false, false, 'False');
1496
+ assertEquals(!false, true, 'Not true');
1497
+ assertEquals(!true, false, 'Not false');
1498
+ test_if();
1499
+ test_ifelse();
1500
+ test_equalities();
1501
+ test_and();
1502
+ test_or();
1503
+ test_ternary();
1504
+ print(unittest_report());
1505
+ $unittestResults = null;
1506
+
1507
+ $unittestResults = array();
1508
+ print("\n====================\n\nRunning suite: Loops 1\n");
1509
+ test_repeat();
1510
+ test_repeat_ext();
1511
+ test_while();
1512
+ test_foreach();
1513
+ print(unittest_report());
1514
+ $unittestResults = null;
1515
+
1516
+ $unittestResults = array();
1517
+ print("\n====================\n\nRunning suite: Loops 2\n");
1518
+ test_count_loops();
1519
+ test_count_by();
1520
+ print(unittest_report());
1521
+ $unittestResults = null;
1522
+
1523
+ $unittestResults = array();
1524
+ print("\n====================\n\nRunning suite: Loops 3\n");
1525
+ test_break();
1526
+ test_continue();
1527
+ print(unittest_report());
1528
+ $unittestResults = null;
1529
+
1530
+ $unittestResults = array();
1531
+ print("\n====================\n\nRunning suite: Math\n");
1532
+ test_arithmetic();
1533
+ test_single();
1534
+ test_trig();
1535
+ test_constant();
1536
+ test_change();
1537
+ test_number_properties();
1538
+ test_round();
1539
+ test_operations_on_list();
1540
+ test_constraint();
1541
+ test_mod();
1542
+ test_random_integer();
1543
+ test_random_fraction();
1544
+ test_atan2();
1545
+ print(unittest_report());
1546
+ $unittestResults = null;
1547
+
1548
+ $unittestResults = array();
1549
+ print("\n====================\n\nRunning suite: Text\n");
1550
+ test_text_length();
1551
+ test_empty_text();
1552
+ test_create_text();
1553
+ test_append();
1554
+ test_find_text_simple();
1555
+ test_find_text_complex();
1556
+ test_get_text_simple();
1557
+ test_get_text_complex();
1558
+ test_substring_simple();
1559
+ test_substring_complex();
1560
+ test_case();
1561
+ test_trim();
1562
+ test_count_text();
1563
+ test_text_reverse();
1564
+ test_replace();
1565
+ print(unittest_report());
1566
+ $unittestResults = null;
1567
+
1568
+ $unittestResults = array();
1569
+ print("\n====================\n\nRunning suite: Lists\n");
1570
+ test_create_lists();
1571
+ test_lists_empty();
1572
+ test_lists_length();
1573
+ test_find_lists_simple();
1574
+ test_find_lists_complex();
1575
+ test_get_lists_simple();
1576
+ test_get_lists_create_list();
1577
+ test_get_lists_complex();
1578
+ test_getRemove();
1579
+ test_remove();
1580
+ test_set();
1581
+ test_insert();
1582
+ test_sublist_simple();
1583
+ test_sublist_complex();
1584
+ test_join();
1585
+ test_split();
1586
+ test_sort_alphabetic();
1587
+ test_sort_ignoreCase();
1588
+ test_sort_numeric();
1589
+ test_lists_reverse();
1590
+ print(unittest_report());
1591
+ $unittestResults = null;
1592
+
1593
+ $unittestResults = array();
1594
+ print("\n====================\n\nRunning suite: Variables\n");
1595
+ $item = 123;
1596
+ assertEquals($item, 123, 'variable');
1597
+ $if2 = 123;
1598
+ assertEquals($if2, 123, 'reserved variable');
1599
+ print(unittest_report());
1600
+ $unittestResults = null;
1601
+
1602
+ // Intentionally non-connected variable.
1603
+ $naked;
1604
+
1605
+ $unittestResults = array();
1606
+ print("\n====================\n\nRunning suite: Functions\n");
1607
+ test_procedure();
1608
+ test_function();
1609
+ assertEquals(recurse(3), '-1-2-1-3-1-2-1-', 'test recurse');
1610
+ print(unittest_report());
1611
+ $unittestResults = null;