scratch-blocks 1.1.206 → 2.0.0-beta.1

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 (1295) hide show
  1. package/.husky/commit-msg +0 -3
  2. package/CHANGELOG.md +111 -833
  3. package/TODO.md +16 -0
  4. package/blockly-rc/.eslintignore +28 -0
  5. package/blockly-rc/.eslintrc.js +187 -0
  6. package/blockly-rc/.gitattributes +1 -0
  7. package/blockly-rc/.github/CODEOWNERS +1 -0
  8. package/blockly-rc/.github/CONTRIBUTING.md +46 -0
  9. package/blockly-rc/.github/ISSUE_TEMPLATE/bug_report.yaml +58 -0
  10. package/blockly-rc/.github/ISSUE_TEMPLATE/config.yml +7 -0
  11. package/blockly-rc/.github/ISSUE_TEMPLATE/documentation.yaml +38 -0
  12. package/blockly-rc/.github/ISSUE_TEMPLATE/feature_request.yaml +39 -0
  13. package/blockly-rc/.github/PULL_REQUEST_TEMPLATE.md +42 -0
  14. package/blockly-rc/.github/dependabot.yml +27 -0
  15. package/blockly-rc/.github/release.yml +32 -0
  16. package/blockly-rc/.github/workflows/appengine_deploy.yml +54 -0
  17. package/blockly-rc/.github/workflows/assign_reviewers.yml +41 -0
  18. package/blockly-rc/.github/workflows/browser_test.yml +55 -0
  19. package/blockly-rc/.github/workflows/build.yml +86 -0
  20. package/blockly-rc/.github/workflows/conventional-label.yml +17 -0
  21. package/blockly-rc/.github/workflows/develop_freeze.yml +26 -0
  22. package/blockly-rc/.github/workflows/tag_module_cleanup.yml +37 -0
  23. package/blockly-rc/.github/workflows/welcome_new_contributors.yml +36 -0
  24. package/blockly-rc/.prettierignore +30 -0
  25. package/blockly-rc/.prettierrc.js +13 -0
  26. package/blockly-rc/CHANGELOG.md +77 -0
  27. package/blockly-rc/LICENSE +202 -0
  28. package/blockly-rc/README.md +80 -0
  29. package/blockly-rc/_config.yml +1 -0
  30. package/blockly-rc/api-extractor.json +385 -0
  31. package/blockly-rc/appengine/.gcloudignore +20 -0
  32. package/blockly-rc/appengine/README.txt +42 -0
  33. package/blockly-rc/appengine/add_timestamps.py +69 -0
  34. package/blockly-rc/appengine/app.yaml +104 -0
  35. package/blockly-rc/appengine/apple-touch-icon.png +0 -0
  36. package/blockly-rc/appengine/blockly_compressed.js +11 -0
  37. package/blockly-rc/appengine/expiration.py +52 -0
  38. package/blockly-rc/appengine/favicon.ico +0 -0
  39. package/blockly-rc/appengine/index.yaml +11 -0
  40. package/blockly-rc/appengine/main.py +39 -0
  41. package/blockly-rc/appengine/redirect.html +107 -0
  42. package/blockly-rc/appengine/requirements.txt +1 -0
  43. package/blockly-rc/appengine/robots.txt +2 -0
  44. package/blockly-rc/appengine/storage.js +190 -0
  45. package/blockly-rc/appengine/storage.py +125 -0
  46. package/blockly-rc/blocks/blocks.ts +44 -0
  47. package/blockly-rc/blocks/lists.ts +1085 -0
  48. package/blockly-rc/blocks/logic.ts +712 -0
  49. package/blockly-rc/blocks/loops.ts +408 -0
  50. package/blockly-rc/blocks/math.ts +591 -0
  51. package/blockly-rc/blocks/procedures.ts +1364 -0
  52. package/blockly-rc/blocks/text.ts +1007 -0
  53. package/blockly-rc/blocks/variables.ts +183 -0
  54. package/blockly-rc/blocks/variables_dynamic.ts +194 -0
  55. package/blockly-rc/core/any_aliases.ts +8 -0
  56. package/blockly-rc/core/block.ts +2523 -0
  57. package/blockly-rc/core/block_animations.ts +225 -0
  58. package/blockly-rc/core/block_flyout_inflater.ts +262 -0
  59. package/blockly-rc/core/block_svg.ts +1768 -0
  60. package/blockly-rc/core/blockly.ts +605 -0
  61. package/blockly-rc/core/blockly_options.ts +71 -0
  62. package/blockly-rc/core/blocks.ts +18 -0
  63. package/blockly-rc/core/browser_events.ts +244 -0
  64. package/blockly-rc/core/bubbles/bubble.ts +658 -0
  65. package/blockly-rc/core/bubbles/mini_workspace_bubble.ts +280 -0
  66. package/blockly-rc/core/bubbles/text_bubble.ts +103 -0
  67. package/blockly-rc/core/bubbles/textinput_bubble.ts +344 -0
  68. package/blockly-rc/core/bubbles.ts +12 -0
  69. package/blockly-rc/core/bump_objects.ts +192 -0
  70. package/blockly-rc/core/button_flyout_inflater.ts +63 -0
  71. package/blockly-rc/core/clipboard/block_paster.ts +142 -0
  72. package/blockly-rc/core/clipboard/registry.ts +31 -0
  73. package/blockly-rc/core/clipboard/workspace_comment_paster.ts +94 -0
  74. package/blockly-rc/core/clipboard.ts +113 -0
  75. package/blockly-rc/core/comments/comment_view.ts +899 -0
  76. package/blockly-rc/core/comments/rendered_workspace_comment.ts +297 -0
  77. package/blockly-rc/core/comments/workspace_comment.ts +237 -0
  78. package/blockly-rc/core/comments.ts +9 -0
  79. package/blockly-rc/core/common.ts +305 -0
  80. package/blockly-rc/core/component_manager.ts +235 -0
  81. package/blockly-rc/core/config.ts +65 -0
  82. package/blockly-rc/core/connection.ts +793 -0
  83. package/blockly-rc/core/connection_checker.ts +348 -0
  84. package/blockly-rc/core/connection_db.ts +297 -0
  85. package/blockly-rc/core/connection_type.ts +21 -0
  86. package/blockly-rc/core/constants.ts +23 -0
  87. package/blockly-rc/core/contextmenu.ts +268 -0
  88. package/blockly-rc/core/contextmenu_items.ts +700 -0
  89. package/blockly-rc/core/contextmenu_registry.ts +194 -0
  90. package/blockly-rc/core/css.ts +481 -0
  91. package/blockly-rc/core/delete_area.ts +77 -0
  92. package/blockly-rc/core/dialog.ts +121 -0
  93. package/blockly-rc/core/drag_target.ts +97 -0
  94. package/blockly-rc/core/dragging/block_drag_strategy.ts +454 -0
  95. package/blockly-rc/core/dragging/bubble_drag_strategy.ts +52 -0
  96. package/blockly-rc/core/dragging/comment_drag_strategy.ts +91 -0
  97. package/blockly-rc/core/dragging/dragger.ts +163 -0
  98. package/blockly-rc/core/dragging.ts +12 -0
  99. package/blockly-rc/core/dropdowndiv.ts +768 -0
  100. package/blockly-rc/core/events/events.ts +163 -0
  101. package/blockly-rc/core/events/events_abstract.ts +130 -0
  102. package/blockly-rc/core/events/events_block_base.ts +88 -0
  103. package/blockly-rc/core/events/events_block_change.ts +259 -0
  104. package/blockly-rc/core/events/events_block_create.ts +185 -0
  105. package/blockly-rc/core/events/events_block_delete.ts +182 -0
  106. package/blockly-rc/core/events/events_block_drag.ts +116 -0
  107. package/blockly-rc/core/events/events_block_field_intermediate_change.ts +167 -0
  108. package/blockly-rc/core/events/events_block_move.ts +307 -0
  109. package/blockly-rc/core/events/events_bubble_open.ts +120 -0
  110. package/blockly-rc/core/events/events_click.ts +110 -0
  111. package/blockly-rc/core/events/events_comment_base.ts +126 -0
  112. package/blockly-rc/core/events/events_comment_change.ts +161 -0
  113. package/blockly-rc/core/events/events_comment_collapse.ts +103 -0
  114. package/blockly-rc/core/events/events_comment_create.ts +118 -0
  115. package/blockly-rc/core/events/events_comment_delete.ts +117 -0
  116. package/blockly-rc/core/events/events_comment_drag.ts +99 -0
  117. package/blockly-rc/core/events/events_comment_move.ts +207 -0
  118. package/blockly-rc/core/events/events_comment_resize.ts +174 -0
  119. package/blockly-rc/core/events/events_marker_move.ts +134 -0
  120. package/blockly-rc/core/events/events_selected.ts +98 -0
  121. package/blockly-rc/core/events/events_theme_change.ts +84 -0
  122. package/blockly-rc/core/events/events_toolbox_item_select.ts +96 -0
  123. package/blockly-rc/core/events/events_trashcan_open.ts +88 -0
  124. package/blockly-rc/core/events/events_ui_base.ts +47 -0
  125. package/blockly-rc/core/events/events_var_base.ts +89 -0
  126. package/blockly-rc/core/events/events_var_create.ts +129 -0
  127. package/blockly-rc/core/events/events_var_delete.ts +124 -0
  128. package/blockly-rc/core/events/events_var_rename.ts +133 -0
  129. package/blockly-rc/core/events/events_var_type_change.ts +122 -0
  130. package/blockly-rc/core/events/events_viewport.ts +149 -0
  131. package/blockly-rc/core/events/utils.ts +595 -0
  132. package/blockly-rc/core/events/workspace_events.ts +46 -0
  133. package/blockly-rc/core/extensions.ts +491 -0
  134. package/blockly-rc/core/field.ts +1471 -0
  135. package/blockly-rc/core/field_checkbox.ts +271 -0
  136. package/blockly-rc/core/field_dropdown.ts +857 -0
  137. package/blockly-rc/core/field_image.ts +297 -0
  138. package/blockly-rc/core/field_input.ts +755 -0
  139. package/blockly-rc/core/field_label.ts +150 -0
  140. package/blockly-rc/core/field_label_serializable.ts +73 -0
  141. package/blockly-rc/core/field_number.ts +381 -0
  142. package/blockly-rc/core/field_registry.ts +115 -0
  143. package/blockly-rc/core/field_textinput.ts +117 -0
  144. package/blockly-rc/core/field_variable.ts +651 -0
  145. package/blockly-rc/core/flyout_base.ts +968 -0
  146. package/blockly-rc/core/flyout_button.ts +416 -0
  147. package/blockly-rc/core/flyout_horizontal.ts +374 -0
  148. package/blockly-rc/core/flyout_metrics_manager.ts +90 -0
  149. package/blockly-rc/core/flyout_separator.ts +61 -0
  150. package/blockly-rc/core/flyout_vertical.ts +353 -0
  151. package/blockly-rc/core/generator.ts +611 -0
  152. package/blockly-rc/core/gesture.ts +1191 -0
  153. package/blockly-rc/core/grid.ts +252 -0
  154. package/blockly-rc/core/icons/comment_icon.ts +435 -0
  155. package/blockly-rc/core/icons/exceptions.ts +23 -0
  156. package/blockly-rc/core/icons/icon.ts +147 -0
  157. package/blockly-rc/core/icons/icon_types.ts +32 -0
  158. package/blockly-rc/core/icons/mutator_icon.ts +354 -0
  159. package/blockly-rc/core/icons/registry.ts +33 -0
  160. package/blockly-rc/core/icons/warning_icon.ts +219 -0
  161. package/blockly-rc/core/icons.ts +24 -0
  162. package/blockly-rc/core/inject.ts +428 -0
  163. package/blockly-rc/core/inputs/align.ts +14 -0
  164. package/blockly-rc/core/inputs/dummy_input.ts +26 -0
  165. package/blockly-rc/core/inputs/end_row_input.ts +31 -0
  166. package/blockly-rc/core/inputs/input.ts +318 -0
  167. package/blockly-rc/core/inputs/input_types.ts +27 -0
  168. package/blockly-rc/core/inputs/statement_input.ts +34 -0
  169. package/blockly-rc/core/inputs/value_input.ts +30 -0
  170. package/blockly-rc/core/inputs.ts +23 -0
  171. package/blockly-rc/core/insertion_marker_manager.ts +742 -0
  172. package/blockly-rc/core/insertion_marker_previewer.ts +254 -0
  173. package/blockly-rc/core/interfaces/i_ast_node_location.ts +12 -0
  174. package/blockly-rc/core/interfaces/i_ast_node_location_svg.ts +28 -0
  175. package/blockly-rc/core/interfaces/i_ast_node_location_with_block.ts +22 -0
  176. package/blockly-rc/core/interfaces/i_autohideable.ts +22 -0
  177. package/blockly-rc/core/interfaces/i_bounded_element.ts +30 -0
  178. package/blockly-rc/core/interfaces/i_bubble.ts +63 -0
  179. package/blockly-rc/core/interfaces/i_collapsible_toolbox_item.ts +33 -0
  180. package/blockly-rc/core/interfaces/i_comment_icon.ts +47 -0
  181. package/blockly-rc/core/interfaces/i_component.ts +19 -0
  182. package/blockly-rc/core/interfaces/i_connection_checker.ts +100 -0
  183. package/blockly-rc/core/interfaces/i_connection_previewer.ts +50 -0
  184. package/blockly-rc/core/interfaces/i_contextmenu.ts +16 -0
  185. package/blockly-rc/core/interfaces/i_copyable.ts +31 -0
  186. package/blockly-rc/core/interfaces/i_deletable.ts +34 -0
  187. package/blockly-rc/core/interfaces/i_delete_area.ts +28 -0
  188. package/blockly-rc/core/interfaces/i_drag_target.ts +69 -0
  189. package/blockly-rc/core/interfaces/i_draggable.ts +72 -0
  190. package/blockly-rc/core/interfaces/i_dragger.ts +35 -0
  191. package/blockly-rc/core/interfaces/i_flyout.ts +189 -0
  192. package/blockly-rc/core/interfaces/i_flyout_inflater.ts +41 -0
  193. package/blockly-rc/core/interfaces/i_has_bubble.ts +20 -0
  194. package/blockly-rc/core/interfaces/i_icon.ts +114 -0
  195. package/blockly-rc/core/interfaces/i_keyboard_accessible.ts +21 -0
  196. package/blockly-rc/core/interfaces/i_legacy_procedure_blocks.ts +50 -0
  197. package/blockly-rc/core/interfaces/i_metrics_manager.ts +149 -0
  198. package/blockly-rc/core/interfaces/i_movable.ts +19 -0
  199. package/blockly-rc/core/interfaces/i_observable.ts +24 -0
  200. package/blockly-rc/core/interfaces/i_parameter_model.ts +51 -0
  201. package/blockly-rc/core/interfaces/i_paster.ts +25 -0
  202. package/blockly-rc/core/interfaces/i_positionable.ts +33 -0
  203. package/blockly-rc/core/interfaces/i_procedure_block.ts +27 -0
  204. package/blockly-rc/core/interfaces/i_procedure_map.ts +18 -0
  205. package/blockly-rc/core/interfaces/i_procedure_model.ts +71 -0
  206. package/blockly-rc/core/interfaces/i_registrable.ts +12 -0
  207. package/blockly-rc/core/interfaces/i_rendered_element.ts +22 -0
  208. package/blockly-rc/core/interfaces/i_selectable.ts +34 -0
  209. package/blockly-rc/core/interfaces/i_selectable_toolbox_item.ts +63 -0
  210. package/blockly-rc/core/interfaces/i_serializable.ts +28 -0
  211. package/blockly-rc/core/interfaces/i_serializer.ts +55 -0
  212. package/blockly-rc/core/interfaces/i_styleable.ts +26 -0
  213. package/blockly-rc/core/interfaces/i_toolbox.ts +112 -0
  214. package/blockly-rc/core/interfaces/i_toolbox_item.ts +81 -0
  215. package/blockly-rc/core/interfaces/i_variable_backed_parameter_model.ts +23 -0
  216. package/blockly-rc/core/interfaces/i_variable_map.ts +65 -0
  217. package/blockly-rc/core/interfaces/i_variable_model.ts +57 -0
  218. package/blockly-rc/core/internal_constants.ts +47 -0
  219. package/blockly-rc/core/keyboard_nav/ast_node.ts +884 -0
  220. package/blockly-rc/core/keyboard_nav/basic_cursor.ts +223 -0
  221. package/blockly-rc/core/keyboard_nav/cursor.ts +138 -0
  222. package/blockly-rc/core/keyboard_nav/marker.ts +113 -0
  223. package/blockly-rc/core/keyboard_nav/tab_navigate_cursor.ts +46 -0
  224. package/blockly-rc/core/label_flyout_inflater.ts +59 -0
  225. package/blockly-rc/core/layer_manager.ts +186 -0
  226. package/blockly-rc/core/layers.ts +17 -0
  227. package/blockly-rc/core/main.ts +31 -0
  228. package/blockly-rc/core/marker_manager.ts +189 -0
  229. package/blockly-rc/core/menu.ts +463 -0
  230. package/blockly-rc/core/menuitem.ts +221 -0
  231. package/blockly-rc/core/metrics_manager.ts +486 -0
  232. package/blockly-rc/core/msg.ts +27 -0
  233. package/blockly-rc/core/names.ts +275 -0
  234. package/blockly-rc/core/observable_procedure_map.ts +66 -0
  235. package/blockly-rc/core/options.ts +377 -0
  236. package/blockly-rc/core/positionable_helpers.ts +186 -0
  237. package/blockly-rc/core/procedures.ts +510 -0
  238. package/blockly-rc/core/registry.ts +400 -0
  239. package/blockly-rc/core/render_management.ts +193 -0
  240. package/blockly-rc/core/rendered_connection.ts +571 -0
  241. package/blockly-rc/core/renderers/common/block_rendering.ts +120 -0
  242. package/blockly-rc/core/renderers/common/constants.ts +1198 -0
  243. package/blockly-rc/core/renderers/common/drawer.ts +518 -0
  244. package/blockly-rc/core/renderers/common/i_path_object.ts +137 -0
  245. package/blockly-rc/core/renderers/common/info.ts +767 -0
  246. package/blockly-rc/core/renderers/common/marker_svg.ts +765 -0
  247. package/blockly-rc/core/renderers/common/path_object.ts +324 -0
  248. package/blockly-rc/core/renderers/common/renderer.ts +281 -0
  249. package/blockly-rc/core/renderers/geras/constants.ts +46 -0
  250. package/blockly-rc/core/renderers/geras/drawer.ts +167 -0
  251. package/blockly-rc/core/renderers/geras/geras.ts +31 -0
  252. package/blockly-rc/core/renderers/geras/highlight_constants.ts +342 -0
  253. package/blockly-rc/core/renderers/geras/highlighter.ts +313 -0
  254. package/blockly-rc/core/renderers/geras/info.ts +478 -0
  255. package/blockly-rc/core/renderers/geras/measurables/inline_input.ts +37 -0
  256. package/blockly-rc/core/renderers/geras/measurables/statement_input.ts +36 -0
  257. package/blockly-rc/core/renderers/geras/path_object.ts +135 -0
  258. package/blockly-rc/core/renderers/geras/renderer.ts +124 -0
  259. package/blockly-rc/core/renderers/measurables/base.ts +41 -0
  260. package/blockly-rc/core/renderers/measurables/bottom_row.ts +104 -0
  261. package/blockly-rc/core/renderers/measurables/connection.ts +43 -0
  262. package/blockly-rc/core/renderers/measurables/external_value_input.ts +53 -0
  263. package/blockly-rc/core/renderers/measurables/field.ts +50 -0
  264. package/blockly-rc/core/renderers/measurables/hat.ts +33 -0
  265. package/blockly-rc/core/renderers/measurables/icon.ts +42 -0
  266. package/blockly-rc/core/renderers/measurables/in_row_spacer.ts +29 -0
  267. package/blockly-rc/core/renderers/measurables/inline_input.ts +63 -0
  268. package/blockly-rc/core/renderers/measurables/input_connection.ts +57 -0
  269. package/blockly-rc/core/renderers/measurables/input_row.ts +67 -0
  270. package/blockly-rc/core/renderers/measurables/jagged_edge.ts +28 -0
  271. package/blockly-rc/core/renderers/measurables/next_connection.ts +34 -0
  272. package/blockly-rc/core/renderers/measurables/output_connection.ts +43 -0
  273. package/blockly-rc/core/renderers/measurables/previous_connection.ts +34 -0
  274. package/blockly-rc/core/renderers/measurables/round_corner.ts +34 -0
  275. package/blockly-rc/core/renderers/measurables/row.ts +191 -0
  276. package/blockly-rc/core/renderers/measurables/spacer_row.ts +44 -0
  277. package/blockly-rc/core/renderers/measurables/square_corner.ts +32 -0
  278. package/blockly-rc/core/renderers/measurables/statement_input.ts +41 -0
  279. package/blockly-rc/core/renderers/measurables/top_row.ts +110 -0
  280. package/blockly-rc/core/renderers/measurables/types.ts +319 -0
  281. package/blockly-rc/core/renderers/thrasos/info.ts +328 -0
  282. package/blockly-rc/core/renderers/thrasos/renderer.ts +40 -0
  283. package/blockly-rc/core/renderers/thrasos/thrasos.ts +14 -0
  284. package/blockly-rc/core/renderers/zelos/constants.ts +877 -0
  285. package/blockly-rc/core/renderers/zelos/drawer.ts +274 -0
  286. package/blockly-rc/core/renderers/zelos/info.ts +652 -0
  287. package/blockly-rc/core/renderers/zelos/marker_svg.ts +145 -0
  288. package/blockly-rc/core/renderers/zelos/measurables/bottom_row.ts +44 -0
  289. package/blockly-rc/core/renderers/zelos/measurables/inputs.ts +41 -0
  290. package/blockly-rc/core/renderers/zelos/measurables/row_elements.ts +29 -0
  291. package/blockly-rc/core/renderers/zelos/measurables/top_row.ts +50 -0
  292. package/blockly-rc/core/renderers/zelos/path_object.ts +209 -0
  293. package/blockly-rc/core/renderers/zelos/renderer.ts +143 -0
  294. package/blockly-rc/core/renderers/zelos/zelos.ts +33 -0
  295. package/blockly-rc/core/scrollbar.ts +898 -0
  296. package/blockly-rc/core/scrollbar_pair.ts +349 -0
  297. package/blockly-rc/core/separator_flyout_inflater.ts +69 -0
  298. package/blockly-rc/core/serialization/blocks.ts +868 -0
  299. package/blockly-rc/core/serialization/exceptions.ts +112 -0
  300. package/blockly-rc/core/serialization/priorities.ts +25 -0
  301. package/blockly-rc/core/serialization/procedures.ts +158 -0
  302. package/blockly-rc/core/serialization/registry.ts +30 -0
  303. package/blockly-rc/core/serialization/variables.ts +68 -0
  304. package/blockly-rc/core/serialization/workspace_comments.ts +143 -0
  305. package/blockly-rc/core/serialization/workspaces.ts +94 -0
  306. package/blockly-rc/core/serialization.ts +32 -0
  307. package/blockly-rc/core/shortcut_items.ts +338 -0
  308. package/blockly-rc/core/shortcut_registry.ts +368 -0
  309. package/blockly-rc/core/sprites.ts +15 -0
  310. package/blockly-rc/core/theme/classic.ts +40 -0
  311. package/blockly-rc/core/theme/themes.ts +12 -0
  312. package/blockly-rc/core/theme/zelos.ts +80 -0
  313. package/blockly-rc/core/theme.ts +232 -0
  314. package/blockly-rc/core/theme_manager.ts +192 -0
  315. package/blockly-rc/core/toolbox/category.ts +739 -0
  316. package/blockly-rc/core/toolbox/collapsible_category.ts +288 -0
  317. package/blockly-rc/core/toolbox/separator.ts +105 -0
  318. package/blockly-rc/core/toolbox/toolbox.ts +1134 -0
  319. package/blockly-rc/core/toolbox/toolbox_item.ts +152 -0
  320. package/blockly-rc/core/tooltip.ts +466 -0
  321. package/blockly-rc/core/touch.ts +155 -0
  322. package/blockly-rc/core/trashcan.ts +748 -0
  323. package/blockly-rc/core/utils/aria.ts +144 -0
  324. package/blockly-rc/core/utils/array.ts +24 -0
  325. package/blockly-rc/core/utils/colour.ts +265 -0
  326. package/blockly-rc/core/utils/coordinate.ts +129 -0
  327. package/blockly-rc/core/utils/deprecation.ts +47 -0
  328. package/blockly-rc/core/utils/dom.ts +356 -0
  329. package/blockly-rc/core/utils/idgenerator.ts +70 -0
  330. package/blockly-rc/core/utils/keycodes.ts +154 -0
  331. package/blockly-rc/core/utils/math.ts +50 -0
  332. package/blockly-rc/core/utils/metrics.ts +86 -0
  333. package/blockly-rc/core/utils/object.ts +28 -0
  334. package/blockly-rc/core/utils/parsing.ts +287 -0
  335. package/blockly-rc/core/utils/rect.ts +69 -0
  336. package/blockly-rc/core/utils/size.ts +62 -0
  337. package/blockly-rc/core/utils/string.ts +289 -0
  338. package/blockly-rc/core/utils/style.ts +219 -0
  339. package/blockly-rc/core/utils/svg.ts +84 -0
  340. package/blockly-rc/core/utils/svg_math.ts +208 -0
  341. package/blockly-rc/core/utils/svg_paths.ts +133 -0
  342. package/blockly-rc/core/utils/toolbox.ts +419 -0
  343. package/blockly-rc/core/utils/useragent.ts +86 -0
  344. package/blockly-rc/core/utils/xml.ts +165 -0
  345. package/blockly-rc/core/utils.ts +59 -0
  346. package/blockly-rc/core/variable_map.ts +437 -0
  347. package/blockly-rc/core/variable_model.ts +149 -0
  348. package/blockly-rc/core/variables.ts +773 -0
  349. package/blockly-rc/core/variables_dynamic.ts +142 -0
  350. package/blockly-rc/core/widgetdiv.ts +319 -0
  351. package/blockly-rc/core/workspace.ts +957 -0
  352. package/blockly-rc/core/workspace_audio.ts +171 -0
  353. package/blockly-rc/core/workspace_dragger.ts +97 -0
  354. package/blockly-rc/core/workspace_svg.ts +2519 -0
  355. package/blockly-rc/core/xml.ts +1133 -0
  356. package/blockly-rc/core/zoom_controls.ts +492 -0
  357. package/blockly-rc/demos/blockfactory/analytics.js +195 -0
  358. package/blockly-rc/demos/blockfactory/app_controller.js +726 -0
  359. package/blockly-rc/demos/blockfactory/block_definition_extractor.js +742 -0
  360. package/blockly-rc/demos/blockfactory/block_exporter_controller.js +311 -0
  361. package/blockly-rc/demos/blockfactory/block_exporter_tools.js +212 -0
  362. package/blockly-rc/demos/blockfactory/block_exporter_view.js +101 -0
  363. package/blockly-rc/demos/blockfactory/block_library_controller.js +325 -0
  364. package/blockly-rc/demos/blockfactory/block_library_storage.js +149 -0
  365. package/blockly-rc/demos/blockfactory/block_library_view.js +178 -0
  366. package/blockly-rc/demos/blockfactory/block_option.js +151 -0
  367. package/blockly-rc/demos/blockfactory/blocks.js +916 -0
  368. package/blockly-rc/demos/blockfactory/cp.css +46 -0
  369. package/blockly-rc/demos/blockfactory/cp.js +179 -0
  370. package/blockly-rc/demos/blockfactory/factory.css +586 -0
  371. package/blockly-rc/demos/blockfactory/factory.js +337 -0
  372. package/blockly-rc/demos/blockfactory/factory_utils.js +1036 -0
  373. package/blockly-rc/demos/blockfactory/icon.png +0 -0
  374. package/blockly-rc/demos/blockfactory/index.html +767 -0
  375. package/blockly-rc/demos/blockfactory/link.png +0 -0
  376. package/blockly-rc/demos/blockfactory/standard_categories.js +384 -0
  377. package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_controller.js +1332 -0
  378. package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_generator.js +224 -0
  379. package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_init.js +541 -0
  380. package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_model.js +548 -0
  381. package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_view.js +424 -0
  382. package/blockly-rc/demos/code/code.js +626 -0
  383. package/blockly-rc/demos/code/icon.png +0 -0
  384. package/blockly-rc/demos/code/icons.png +0 -0
  385. package/blockly-rc/demos/code/index.html +359 -0
  386. package/blockly-rc/demos/code/msg/ar.js +24 -0
  387. package/blockly-rc/demos/code/msg/be-tarask.js +24 -0
  388. package/blockly-rc/demos/code/msg/br.js +24 -0
  389. package/blockly-rc/demos/code/msg/ca.js +24 -0
  390. package/blockly-rc/demos/code/msg/cs.js +24 -0
  391. package/blockly-rc/demos/code/msg/da.js +24 -0
  392. package/blockly-rc/demos/code/msg/de.js +24 -0
  393. package/blockly-rc/demos/code/msg/el.js +24 -0
  394. package/blockly-rc/demos/code/msg/en.js +24 -0
  395. package/blockly-rc/demos/code/msg/es.js +24 -0
  396. package/blockly-rc/demos/code/msg/et.js +24 -0
  397. package/blockly-rc/demos/code/msg/fa.js +24 -0
  398. package/blockly-rc/demos/code/msg/fr.js +24 -0
  399. package/blockly-rc/demos/code/msg/he.js +24 -0
  400. package/blockly-rc/demos/code/msg/hr.js +24 -0
  401. package/blockly-rc/demos/code/msg/hrx.js +24 -0
  402. package/blockly-rc/demos/code/msg/hu.js +24 -0
  403. package/blockly-rc/demos/code/msg/ia.js +24 -0
  404. package/blockly-rc/demos/code/msg/is.js +24 -0
  405. package/blockly-rc/demos/code/msg/it.js +24 -0
  406. package/blockly-rc/demos/code/msg/ja.js +24 -0
  407. package/blockly-rc/demos/code/msg/kab.js +24 -0
  408. package/blockly-rc/demos/code/msg/ko.js +24 -0
  409. package/blockly-rc/demos/code/msg/mk.js +24 -0
  410. package/blockly-rc/demos/code/msg/ms.js +24 -0
  411. package/blockly-rc/demos/code/msg/nb.js +24 -0
  412. package/blockly-rc/demos/code/msg/nl.js +24 -0
  413. package/blockly-rc/demos/code/msg/oc.js +24 -0
  414. package/blockly-rc/demos/code/msg/pl.js +24 -0
  415. package/blockly-rc/demos/code/msg/pms.js +24 -0
  416. package/blockly-rc/demos/code/msg/pt-br.js +24 -0
  417. package/blockly-rc/demos/code/msg/ro.js +24 -0
  418. package/blockly-rc/demos/code/msg/ru.js +24 -0
  419. package/blockly-rc/demos/code/msg/sc.js +24 -0
  420. package/blockly-rc/demos/code/msg/sk.js +24 -0
  421. package/blockly-rc/demos/code/msg/sr.js +24 -0
  422. package/blockly-rc/demos/code/msg/sv.js +24 -0
  423. package/blockly-rc/demos/code/msg/ta.js +24 -0
  424. package/blockly-rc/demos/code/msg/th.js +24 -0
  425. package/blockly-rc/demos/code/msg/tlh.js +24 -0
  426. package/blockly-rc/demos/code/msg/tr.js +24 -0
  427. package/blockly-rc/demos/code/msg/uk.js +24 -0
  428. package/blockly-rc/demos/code/msg/vi.js +24 -0
  429. package/blockly-rc/demos/code/msg/zh-hans.js +24 -0
  430. package/blockly-rc/demos/code/msg/zh-hant.js +24 -0
  431. package/blockly-rc/demos/code/style.css +184 -0
  432. package/blockly-rc/demos/index.html +68 -0
  433. package/blockly-rc/demos/minimap/icon.png +0 -0
  434. package/blockly-rc/demos/minimap/index.html +91 -0
  435. package/blockly-rc/demos/minimap/minimap.js +302 -0
  436. package/blockly-rc/demos/mobile/README.md +53 -0
  437. package/blockly-rc/demos/mobile/android/README.md +45 -0
  438. package/blockly-rc/demos/mobile/android/app/build.gradle +64 -0
  439. package/blockly-rc/demos/mobile/android/app/proguard-rules.pro +21 -0
  440. package/blockly-rc/demos/mobile/android/app/src/androidTest/java/com/example/blocklywebview/ExampleInstrumentedTest.java +26 -0
  441. package/blockly-rc/demos/mobile/android/app/src/main/AndroidManifest.xml +21 -0
  442. package/blockly-rc/demos/mobile/android/app/src/main/java/com/google/blockly/android/webview/BlocklyWebViewFragment.java +40 -0
  443. package/blockly-rc/demos/mobile/android/app/src/main/java/com/google/blockly/android/webview/JsDialogHelper.java +150 -0
  444. package/blockly-rc/demos/mobile/android/app/src/main/java/com/google/blockly/android/webview/WebChromeClient.java +32 -0
  445. package/blockly-rc/demos/mobile/android/app/src/main/java/com/google/blockly/android/webview/demo/MainActivity.java +18 -0
  446. package/blockly-rc/demos/mobile/android/app/src/main/res/drawable/ic_launcher_background.xml +74 -0
  447. package/blockly-rc/demos/mobile/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
  448. package/blockly-rc/demos/mobile/android/app/src/main/res/layout/activity_main.xml +17 -0
  449. package/blockly-rc/demos/mobile/android/app/src/main/res/layout/js_prompt.xml +37 -0
  450. package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
  451. package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
  452. package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  453. package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  454. package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  455. package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  456. package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  457. package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  458. package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  459. package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  460. package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  461. package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  462. package/blockly-rc/demos/mobile/android/app/src/main/res/values/colors.xml +6 -0
  463. package/blockly-rc/demos/mobile/android/app/src/main/res/values/js_dialog_helper.xml +7 -0
  464. package/blockly-rc/demos/mobile/android/app/src/main/res/values/strings.xml +3 -0
  465. package/blockly-rc/demos/mobile/android/app/src/main/res/values/styles.xml +11 -0
  466. package/blockly-rc/demos/mobile/android/app/src/test/java/com/example/blocklywebview/ExampleUnitTest.java +17 -0
  467. package/blockly-rc/demos/mobile/android/build.gradle +27 -0
  468. package/blockly-rc/demos/mobile/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  469. package/blockly-rc/demos/mobile/android/gradle/wrapper/gradle-wrapper.properties +6 -0
  470. package/blockly-rc/demos/mobile/android/gradle.properties +13 -0
  471. package/blockly-rc/demos/mobile/android/gradlew +172 -0
  472. package/blockly-rc/demos/mobile/android/gradlew.bat +84 -0
  473. package/blockly-rc/demos/mobile/android/settings.gradle +1 -0
  474. package/blockly-rc/demos/mobile/html/index.html +31 -0
  475. package/blockly-rc/demos/mobile/html/ln_resources.sh +22 -0
  476. package/blockly-rc/demos/mobile/html/toolbox_standard.js +333 -0
  477. package/blockly-rc/demos/mobile/ios/Blockly WebView/AppDelegate.swift +46 -0
  478. package/blockly-rc/demos/mobile/ios/Blockly WebView/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  479. package/blockly-rc/demos/mobile/ios/Blockly WebView/Assets.xcassets/Contents.json +6 -0
  480. package/blockly-rc/demos/mobile/ios/Blockly WebView/Base.lproj/LaunchScreen.storyboard +25 -0
  481. package/blockly-rc/demos/mobile/ios/Blockly WebView/Base.lproj/Main.storyboard +44 -0
  482. package/blockly-rc/demos/mobile/ios/Blockly WebView/Info.plist +45 -0
  483. package/blockly-rc/demos/mobile/ios/Blockly WebView/ViewController.swift +110 -0
  484. package/blockly-rc/demos/mobile/ios/Blockly WebView.xcodeproj/project.pbxproj +390 -0
  485. package/blockly-rc/demos/mobile/ios/Blockly WebView.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  486. package/blockly-rc/demos/mobile/ios/Blockly WebView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  487. package/blockly-rc/demos/mobile/ios/cp_resources.sh +21 -0
  488. package/blockly-rc/demos/storage/icon.png +0 -0
  489. package/blockly-rc/demos/storage/index.html +104 -0
  490. package/blockly-rc/generators/dart/dart_generator.ts +321 -0
  491. package/blockly-rc/generators/dart/lists.ts +525 -0
  492. package/blockly-rc/generators/dart/logic.ts +155 -0
  493. package/blockly-rc/generators/dart/loops.ts +217 -0
  494. package/blockly-rc/generators/dart/math.ts +559 -0
  495. package/blockly-rc/generators/dart/procedures.ts +138 -0
  496. package/blockly-rc/generators/dart/text.ts +405 -0
  497. package/blockly-rc/generators/dart/variables.ts +32 -0
  498. package/blockly-rc/generators/dart/variables_dynamic.ts +17 -0
  499. package/blockly-rc/generators/dart.ts +50 -0
  500. package/blockly-rc/generators/javascript/javascript_generator.ts +346 -0
  501. package/blockly-rc/generators/javascript/lists.ts +465 -0
  502. package/blockly-rc/generators/javascript/logic.ts +153 -0
  503. package/blockly-rc/generators/javascript/loops.ts +245 -0
  504. package/blockly-rc/generators/javascript/math.ts +450 -0
  505. package/blockly-rc/generators/javascript/procedures.ts +142 -0
  506. package/blockly-rc/generators/javascript/text.ts +418 -0
  507. package/blockly-rc/generators/javascript/variables.ts +32 -0
  508. package/blockly-rc/generators/javascript/variables_dynamic.ts +17 -0
  509. package/blockly-rc/generators/javascript.ts +46 -0
  510. package/blockly-rc/generators/lua/lists.ts +445 -0
  511. package/blockly-rc/generators/lua/logic.ts +142 -0
  512. package/blockly-rc/generators/lua/loops.ts +192 -0
  513. package/blockly-rc/generators/lua/lua_generator.ts +225 -0
  514. package/blockly-rc/generators/lua/math.ts +473 -0
  515. package/blockly-rc/generators/lua/procedures.ts +144 -0
  516. package/blockly-rc/generators/lua/text.ts +380 -0
  517. package/blockly-rc/generators/lua/variables.ts +31 -0
  518. package/blockly-rc/generators/lua/variables_dynamic.ts +17 -0
  519. package/blockly-rc/generators/lua.ts +44 -0
  520. package/blockly-rc/generators/php/lists.ts +585 -0
  521. package/blockly-rc/generators/php/logic.ts +155 -0
  522. package/blockly-rc/generators/php/loops.ts +218 -0
  523. package/blockly-rc/generators/php/math.ts +408 -0
  524. package/blockly-rc/generators/php/php_generator.ts +320 -0
  525. package/blockly-rc/generators/php/procedures.ts +159 -0
  526. package/blockly-rc/generators/php/text.ts +315 -0
  527. package/blockly-rc/generators/php/variables.ts +32 -0
  528. package/blockly-rc/generators/php/variables_dynamic.ts +17 -0
  529. package/blockly-rc/generators/php.ts +46 -0
  530. package/blockly-rc/generators/python/lists.ts +398 -0
  531. package/blockly-rc/generators/python/logic.ts +148 -0
  532. package/blockly-rc/generators/python/loops.ts +251 -0
  533. package/blockly-rc/generators/python/math.ts +434 -0
  534. package/blockly-rc/generators/python/procedures.ts +159 -0
  535. package/blockly-rc/generators/python/python_generator.ts +355 -0
  536. package/blockly-rc/generators/python/text.ts +338 -0
  537. package/blockly-rc/generators/python/variables.ts +31 -0
  538. package/blockly-rc/generators/python/variables_dynamic.ts +17 -0
  539. package/blockly-rc/generators/python.ts +51 -0
  540. package/blockly-rc/gulpfile.js +54 -0
  541. package/blockly-rc/jsconfig.json +7 -0
  542. package/blockly-rc/media/1x1.gif +0 -0
  543. package/blockly-rc/media/click.mp3 +0 -0
  544. package/blockly-rc/media/click.ogg +0 -0
  545. package/blockly-rc/media/click.wav +0 -0
  546. package/blockly-rc/media/delete-icon.svg +1 -0
  547. package/blockly-rc/media/delete.mp3 +0 -0
  548. package/blockly-rc/media/delete.ogg +0 -0
  549. package/blockly-rc/media/delete.wav +0 -0
  550. package/blockly-rc/media/disconnect.mp3 +0 -0
  551. package/blockly-rc/media/disconnect.ogg +0 -0
  552. package/blockly-rc/media/disconnect.wav +0 -0
  553. package/blockly-rc/media/dropdown-arrow.svg +1 -0
  554. package/blockly-rc/media/foldout-icon.svg +1 -0
  555. package/blockly-rc/media/handclosed.cur +0 -0
  556. package/blockly-rc/media/handdelete.cur +0 -0
  557. package/blockly-rc/media/handopen.cur +0 -0
  558. package/blockly-rc/media/pilcrow.png +0 -0
  559. package/blockly-rc/media/quote0.png +0 -0
  560. package/blockly-rc/media/quote1.png +0 -0
  561. package/blockly-rc/media/resize-handle.svg +3 -0
  562. package/blockly-rc/media/sprites.png +0 -0
  563. package/blockly-rc/media/sprites.svg +74 -0
  564. package/blockly-rc/msg/json/README.md +33 -0
  565. package/blockly-rc/msg/json/ab.json +222 -0
  566. package/blockly-rc/msg/json/ace.json +7 -0
  567. package/blockly-rc/msg/json/af.json +34 -0
  568. package/blockly-rc/msg/json/am.json +30 -0
  569. package/blockly-rc/msg/json/ar.json +355 -0
  570. package/blockly-rc/msg/json/ast.json +10 -0
  571. package/blockly-rc/msg/json/az.json +332 -0
  572. package/blockly-rc/msg/json/ba.json +211 -0
  573. package/blockly-rc/msg/json/bcc.json +290 -0
  574. package/blockly-rc/msg/json/be-tarask.json +334 -0
  575. package/blockly-rc/msg/json/be.json +324 -0
  576. package/blockly-rc/msg/json/bg.json +345 -0
  577. package/blockly-rc/msg/json/bn.json +189 -0
  578. package/blockly-rc/msg/json/br.json +334 -0
  579. package/blockly-rc/msg/json/bs.json +166 -0
  580. package/blockly-rc/msg/json/ca.json +341 -0
  581. package/blockly-rc/msg/json/cdo.json +6 -0
  582. package/blockly-rc/msg/json/ce.json +326 -0
  583. package/blockly-rc/msg/json/constants.json +12 -0
  584. package/blockly-rc/msg/json/cs.json +343 -0
  585. package/blockly-rc/msg/json/da.json +346 -0
  586. package/blockly-rc/msg/json/de.json +369 -0
  587. package/blockly-rc/msg/json/diq.json +258 -0
  588. package/blockly-rc/msg/json/dtp.json +198 -0
  589. package/blockly-rc/msg/json/dty.json +97 -0
  590. package/blockly-rc/msg/json/ee.json +160 -0
  591. package/blockly-rc/msg/json/el.json +356 -0
  592. package/blockly-rc/msg/json/en-gb.json +199 -0
  593. package/blockly-rc/msg/json/en.json +400 -0
  594. package/blockly-rc/msg/json/eo.json +337 -0
  595. package/blockly-rc/msg/json/es.json +358 -0
  596. package/blockly-rc/msg/json/et.json +326 -0
  597. package/blockly-rc/msg/json/eu.json +219 -0
  598. package/blockly-rc/msg/json/fa.json +341 -0
  599. package/blockly-rc/msg/json/fi.json +350 -0
  600. package/blockly-rc/msg/json/fo.json +46 -0
  601. package/blockly-rc/msg/json/fr.json +373 -0
  602. package/blockly-rc/msg/json/frr.json +6 -0
  603. package/blockly-rc/msg/json/gl.json +338 -0
  604. package/blockly-rc/msg/json/gn.json +54 -0
  605. package/blockly-rc/msg/json/gor.json +87 -0
  606. package/blockly-rc/msg/json/ha.json +313 -0
  607. package/blockly-rc/msg/json/hak.json +17 -0
  608. package/blockly-rc/msg/json/he.json +354 -0
  609. package/blockly-rc/msg/json/hi.json +318 -0
  610. package/blockly-rc/msg/json/hr.json +327 -0
  611. package/blockly-rc/msg/json/hrx.json +287 -0
  612. package/blockly-rc/msg/json/hsb.json +128 -0
  613. package/blockly-rc/msg/json/hu.json +349 -0
  614. package/blockly-rc/msg/json/hy.json +337 -0
  615. package/blockly-rc/msg/json/ia.json +337 -0
  616. package/blockly-rc/msg/json/id.json +335 -0
  617. package/blockly-rc/msg/json/ig.json +323 -0
  618. package/blockly-rc/msg/json/inh.json +80 -0
  619. package/blockly-rc/msg/json/is.json +331 -0
  620. package/blockly-rc/msg/json/it.json +346 -0
  621. package/blockly-rc/msg/json/ja.json +361 -0
  622. package/blockly-rc/msg/json/ka.json +14 -0
  623. package/blockly-rc/msg/json/kab.json +323 -0
  624. package/blockly-rc/msg/json/kbd-cyrl.json +84 -0
  625. package/blockly-rc/msg/json/km.json +29 -0
  626. package/blockly-rc/msg/json/kn.json +332 -0
  627. package/blockly-rc/msg/json/ko.json +372 -0
  628. package/blockly-rc/msg/json/ksh.json +43 -0
  629. package/blockly-rc/msg/json/ku-latn.json +41 -0
  630. package/blockly-rc/msg/json/ky.json +71 -0
  631. package/blockly-rc/msg/json/la.json +6 -0
  632. package/blockly-rc/msg/json/lb.json +156 -0
  633. package/blockly-rc/msg/json/lki.json +282 -0
  634. package/blockly-rc/msg/json/lo.json +92 -0
  635. package/blockly-rc/msg/json/lrc.json +123 -0
  636. package/blockly-rc/msg/json/lt.json +321 -0
  637. package/blockly-rc/msg/json/lv.json +324 -0
  638. package/blockly-rc/msg/json/mg.json +58 -0
  639. package/blockly-rc/msg/json/mk.json +178 -0
  640. package/blockly-rc/msg/json/ml.json +35 -0
  641. package/blockly-rc/msg/json/mnw.json +90 -0
  642. package/blockly-rc/msg/json/ms.json +300 -0
  643. package/blockly-rc/msg/json/my.json +57 -0
  644. package/blockly-rc/msg/json/mzn.json +6 -0
  645. package/blockly-rc/msg/json/nb.json +330 -0
  646. package/blockly-rc/msg/json/ne.json +247 -0
  647. package/blockly-rc/msg/json/nl.json +357 -0
  648. package/blockly-rc/msg/json/oc.json +194 -0
  649. package/blockly-rc/msg/json/olo.json +37 -0
  650. package/blockly-rc/msg/json/pa.json +69 -0
  651. package/blockly-rc/msg/json/pl.json +357 -0
  652. package/blockly-rc/msg/json/pms.json +324 -0
  653. package/blockly-rc/msg/json/ps.json +50 -0
  654. package/blockly-rc/msg/json/pt-br.json +369 -0
  655. package/blockly-rc/msg/json/pt.json +358 -0
  656. package/blockly-rc/msg/json/qqq.json +406 -0
  657. package/blockly-rc/msg/json/ro.json +333 -0
  658. package/blockly-rc/msg/json/ru.json +363 -0
  659. package/blockly-rc/msg/json/sc.json +283 -0
  660. package/blockly-rc/msg/json/sco.json +11 -0
  661. package/blockly-rc/msg/json/sd.json +158 -0
  662. package/blockly-rc/msg/json/shn.json +109 -0
  663. package/blockly-rc/msg/json/si.json +16 -0
  664. package/blockly-rc/msg/json/sk.json +332 -0
  665. package/blockly-rc/msg/json/skr-arab.json +117 -0
  666. package/blockly-rc/msg/json/sl.json +355 -0
  667. package/blockly-rc/msg/json/smn.json +133 -0
  668. package/blockly-rc/msg/json/sq.json +343 -0
  669. package/blockly-rc/msg/json/sr-latn.json +324 -0
  670. package/blockly-rc/msg/json/sr.json +348 -0
  671. package/blockly-rc/msg/json/sv.json +347 -0
  672. package/blockly-rc/msg/json/sw.json +12 -0
  673. package/blockly-rc/msg/json/synonyms.json +22 -0
  674. package/blockly-rc/msg/json/ta.json +306 -0
  675. package/blockly-rc/msg/json/tcy.json +316 -0
  676. package/blockly-rc/msg/json/tdd.json +109 -0
  677. package/blockly-rc/msg/json/te.json +101 -0
  678. package/blockly-rc/msg/json/th.json +333 -0
  679. package/blockly-rc/msg/json/ti.json +50 -0
  680. package/blockly-rc/msg/json/tl.json +129 -0
  681. package/blockly-rc/msg/json/tlh.json +179 -0
  682. package/blockly-rc/msg/json/tr.json +369 -0
  683. package/blockly-rc/msg/json/ug-arab.json +132 -0
  684. package/blockly-rc/msg/json/uk.json +345 -0
  685. package/blockly-rc/msg/json/ur.json +117 -0
  686. package/blockly-rc/msg/json/uz.json +36 -0
  687. package/blockly-rc/msg/json/vi.json +345 -0
  688. package/blockly-rc/msg/json/xmf.json +96 -0
  689. package/blockly-rc/msg/json/yo.json +316 -0
  690. package/blockly-rc/msg/json/zgh.json +83 -0
  691. package/blockly-rc/msg/json/zh-hans.json +372 -0
  692. package/blockly-rc/msg/json/zh-hant.json +362 -0
  693. package/blockly-rc/msg/messages.js +1616 -0
  694. package/blockly-rc/package-lock.json +12324 -0
  695. package/blockly-rc/package.json +149 -0
  696. package/blockly-rc/patches/@microsoft+api-documenter+7.22.4.patch +81 -0
  697. package/blockly-rc/scripts/goog_module/convert-file.sh +406 -0
  698. package/blockly-rc/scripts/gulpfiles/appengine_tasks.js +195 -0
  699. package/blockly-rc/scripts/gulpfiles/build_tasks.js +752 -0
  700. package/blockly-rc/scripts/gulpfiles/config.js +41 -0
  701. package/blockly-rc/scripts/gulpfiles/docs_tasks.js +147 -0
  702. package/blockly-rc/scripts/gulpfiles/git_tasks.js +181 -0
  703. package/blockly-rc/scripts/gulpfiles/helper_tasks.js +19 -0
  704. package/blockly-rc/scripts/gulpfiles/package_tasks.js +262 -0
  705. package/blockly-rc/scripts/gulpfiles/release_tasks.js +183 -0
  706. package/blockly-rc/scripts/gulpfiles/test_tasks.js +405 -0
  707. package/blockly-rc/scripts/helpers.js +74 -0
  708. package/blockly-rc/scripts/i18n/common.py +233 -0
  709. package/blockly-rc/scripts/i18n/create_messages.py +167 -0
  710. package/blockly-rc/scripts/i18n/dedup_json.py +72 -0
  711. package/blockly-rc/scripts/i18n/js_to_json.py +135 -0
  712. package/blockly-rc/scripts/i18n/tests.py +46 -0
  713. package/blockly-rc/scripts/migration/cjs2esm +162 -0
  714. package/blockly-rc/scripts/migration/js2ts +168 -0
  715. package/blockly-rc/scripts/migration/renamings.json5 +1599 -0
  716. package/blockly-rc/scripts/package/README.md +93 -0
  717. package/blockly-rc/scripts/package/core-node.js +31 -0
  718. package/blockly-rc/scripts/package/index.js +23 -0
  719. package/blockly-rc/scripts/package/templates/umd-msg.template +16 -0
  720. package/blockly-rc/scripts/package/templates/umd.template +13 -0
  721. package/blockly-rc/scripts/themes/blockStyles_example.json +11 -0
  722. package/blockly-rc/scripts/themes/create_blockStyles.py +181 -0
  723. package/blockly-rc/scripts/tsick.js +86 -0
  724. package/blockly-rc/tests/.eslintrc.json +10 -0
  725. package/blockly-rc/tests/browser/.eslintrc.json +29 -0
  726. package/blockly-rc/tests/browser/.mocharc.js +6 -0
  727. package/blockly-rc/tests/browser/test/basic_block_factory_test.mjs +44 -0
  728. package/blockly-rc/tests/browser/test/basic_block_test.mjs +39 -0
  729. package/blockly-rc/tests/browser/test/basic_playground_test.mjs +198 -0
  730. package/blockly-rc/tests/browser/test/block_undo_test.mjs +50 -0
  731. package/blockly-rc/tests/browser/test/delete_blocks_test.mjs +211 -0
  732. package/blockly-rc/tests/browser/test/extensive_test.mjs +195 -0
  733. package/blockly-rc/tests/browser/test/field_edits_test.mjs +61 -0
  734. package/blockly-rc/tests/browser/test/hooks.mjs +23 -0
  735. package/blockly-rc/tests/browser/test/mutator_test.mjs +88 -0
  736. package/blockly-rc/tests/browser/test/procedure_test.mjs +109 -0
  737. package/blockly-rc/tests/browser/test/test_setup.mjs +589 -0
  738. package/blockly-rc/tests/browser/test/toolbox_drag_test.mjs +207 -0
  739. package/blockly-rc/tests/browser/test/workspace_comment_test.mjs +224 -0
  740. package/blockly-rc/tests/compile/index.html +43 -0
  741. package/blockly-rc/tests/compile/main.js +53 -0
  742. package/blockly-rc/tests/compile/test_blocks.js +47 -0
  743. package/blockly-rc/tests/compile/webdriver.js +81 -0
  744. package/blockly-rc/tests/generators/functions.xml +561 -0
  745. package/blockly-rc/tests/generators/golden/generated.dart +1604 -0
  746. package/blockly-rc/tests/generators/golden/generated.js +1552 -0
  747. package/blockly-rc/tests/generators/golden/generated.lua +1828 -0
  748. package/blockly-rc/tests/generators/golden/generated.php +1611 -0
  749. package/blockly-rc/tests/generators/golden/generated.py +1407 -0
  750. package/blockly-rc/tests/generators/index.html +405 -0
  751. package/blockly-rc/tests/generators/lists.xml +8675 -0
  752. package/blockly-rc/tests/generators/logic.xml +1019 -0
  753. package/blockly-rc/tests/generators/loops1.xml +345 -0
  754. package/blockly-rc/tests/generators/loops2.xml +891 -0
  755. package/blockly-rc/tests/generators/loops3.xml +735 -0
  756. package/blockly-rc/tests/generators/math.xml +2077 -0
  757. package/blockly-rc/tests/generators/text.xml +4651 -0
  758. package/blockly-rc/tests/generators/unittest.js +103 -0
  759. package/blockly-rc/tests/generators/unittest_dart.js +163 -0
  760. package/blockly-rc/tests/generators/unittest_javascript.js +167 -0
  761. package/blockly-rc/tests/generators/unittest_lua.js +165 -0
  762. package/blockly-rc/tests/generators/unittest_php.js +154 -0
  763. package/blockly-rc/tests/generators/unittest_python.js +138 -0
  764. package/blockly-rc/tests/generators/variables.xml +68 -0
  765. package/blockly-rc/tests/generators/webdriver.js +123 -0
  766. package/blockly-rc/tests/media/200px.png +0 -0
  767. package/blockly-rc/tests/media/30px.png +0 -0
  768. package/blockly-rc/tests/media/50px.png +0 -0
  769. package/blockly-rc/tests/media/a.png +0 -0
  770. package/blockly-rc/tests/media/arrow.png +0 -0
  771. package/blockly-rc/tests/media/b.png +0 -0
  772. package/blockly-rc/tests/media/c.png +0 -0
  773. package/blockly-rc/tests/media/d.png +0 -0
  774. package/blockly-rc/tests/media/e.png +0 -0
  775. package/blockly-rc/tests/media/f.png +0 -0
  776. package/blockly-rc/tests/media/g.png +0 -0
  777. package/blockly-rc/tests/media/h.png +0 -0
  778. package/blockly-rc/tests/media/i.png +0 -0
  779. package/blockly-rc/tests/media/j.png +0 -0
  780. package/blockly-rc/tests/media/k.png +0 -0
  781. package/blockly-rc/tests/media/l.png +0 -0
  782. package/blockly-rc/tests/media/m.png +0 -0
  783. package/blockly-rc/tests/migration/renamings.schema.json +59 -0
  784. package/blockly-rc/tests/migration/validate-renamings.mjs +60 -0
  785. package/blockly-rc/tests/mocha/.eslintrc.json +21 -0
  786. package/blockly-rc/tests/mocha/.mocharc.js +6 -0
  787. package/blockly-rc/tests/mocha/astnode_test.js +850 -0
  788. package/blockly-rc/tests/mocha/block_json_test.js +777 -0
  789. package/blockly-rc/tests/mocha/block_test.js +2743 -0
  790. package/blockly-rc/tests/mocha/blocks/lists_test.js +196 -0
  791. package/blockly-rc/tests/mocha/blocks/logic_ternary_test.js +320 -0
  792. package/blockly-rc/tests/mocha/blocks/loops_test.js +56 -0
  793. package/blockly-rc/tests/mocha/blocks/procedures_test.js +2495 -0
  794. package/blockly-rc/tests/mocha/blocks/variables_test.js +311 -0
  795. package/blockly-rc/tests/mocha/clipboard_test.js +136 -0
  796. package/blockly-rc/tests/mocha/comment_deserialization_test.js +122 -0
  797. package/blockly-rc/tests/mocha/comment_test.js +170 -0
  798. package/blockly-rc/tests/mocha/comment_view_test.js +188 -0
  799. package/blockly-rc/tests/mocha/connection_checker_test.js +666 -0
  800. package/blockly-rc/tests/mocha/connection_db_test.js +362 -0
  801. package/blockly-rc/tests/mocha/connection_test.js +3738 -0
  802. package/blockly-rc/tests/mocha/contextmenu_items_test.js +488 -0
  803. package/blockly-rc/tests/mocha/contextmenu_test.js +71 -0
  804. package/blockly-rc/tests/mocha/cursor_test.js +134 -0
  805. package/blockly-rc/tests/mocha/dropdowndiv_test.js +116 -0
  806. package/blockly-rc/tests/mocha/event_block_change_test.js +126 -0
  807. package/blockly-rc/tests/mocha/event_block_create_test.js +109 -0
  808. package/blockly-rc/tests/mocha/event_block_delete_test.js +55 -0
  809. package/blockly-rc/tests/mocha/event_block_drag_test.js +36 -0
  810. package/blockly-rc/tests/mocha/event_block_field_intermediate_change_test.js +67 -0
  811. package/blockly-rc/tests/mocha/event_block_move_test.js +39 -0
  812. package/blockly-rc/tests/mocha/event_bubble_open_test.js +42 -0
  813. package/blockly-rc/tests/mocha/event_click_test.js +40 -0
  814. package/blockly-rc/tests/mocha/event_comment_change_test.js +39 -0
  815. package/blockly-rc/tests/mocha/event_comment_collapse_test.js +34 -0
  816. package/blockly-rc/tests/mocha/event_comment_create_test.js +38 -0
  817. package/blockly-rc/tests/mocha/event_comment_delete_test.js +38 -0
  818. package/blockly-rc/tests/mocha/event_comment_drag_test.js +35 -0
  819. package/blockly-rc/tests/mocha/event_comment_move_test.js +40 -0
  820. package/blockly-rc/tests/mocha/event_comment_resize_test.js +38 -0
  821. package/blockly-rc/tests/mocha/event_marker_move_test.js +44 -0
  822. package/blockly-rc/tests/mocha/event_selected_test.js +41 -0
  823. package/blockly-rc/tests/mocha/event_test.js +1578 -0
  824. package/blockly-rc/tests/mocha/event_theme_change_test.js +36 -0
  825. package/blockly-rc/tests/mocha/event_toolbox_item_select_test.js +64 -0
  826. package/blockly-rc/tests/mocha/event_trashcan_open_test.js +36 -0
  827. package/blockly-rc/tests/mocha/event_var_create_test.js +54 -0
  828. package/blockly-rc/tests/mocha/event_var_delete_test.js +54 -0
  829. package/blockly-rc/tests/mocha/event_var_rename_test.js +39 -0
  830. package/blockly-rc/tests/mocha/event_var_type_change_test.js +43 -0
  831. package/blockly-rc/tests/mocha/event_viewport_test.js +39 -0
  832. package/blockly-rc/tests/mocha/extensions_test.js +613 -0
  833. package/blockly-rc/tests/mocha/field_checkbox_test.js +299 -0
  834. package/blockly-rc/tests/mocha/field_colour_test.js +395 -0
  835. package/blockly-rc/tests/mocha/field_dropdown_test.js +282 -0
  836. package/blockly-rc/tests/mocha/field_image_test.js +241 -0
  837. package/blockly-rc/tests/mocha/field_label_serializable_test.js +252 -0
  838. package/blockly-rc/tests/mocha/field_label_test.js +226 -0
  839. package/blockly-rc/tests/mocha/field_number_test.js +505 -0
  840. package/blockly-rc/tests/mocha/field_registry_test.js +116 -0
  841. package/blockly-rc/tests/mocha/field_test.js +822 -0
  842. package/blockly-rc/tests/mocha/field_textinput_test.js +297 -0
  843. package/blockly-rc/tests/mocha/field_variable_test.js +611 -0
  844. package/blockly-rc/tests/mocha/flyout_test.js +638 -0
  845. package/blockly-rc/tests/mocha/generator_test.js +233 -0
  846. package/blockly-rc/tests/mocha/gesture_test.js +97 -0
  847. package/blockly-rc/tests/mocha/icon_test.js +369 -0
  848. package/blockly-rc/tests/mocha/index.html +229 -0
  849. package/blockly-rc/tests/mocha/input_test.js +296 -0
  850. package/blockly-rc/tests/mocha/insertion_marker_manager_test.js +443 -0
  851. package/blockly-rc/tests/mocha/insertion_marker_test.js +432 -0
  852. package/blockly-rc/tests/mocha/jso_deserialization_test.js +849 -0
  853. package/blockly-rc/tests/mocha/jso_serialization_test.js +1067 -0
  854. package/blockly-rc/tests/mocha/json_test.js +315 -0
  855. package/blockly-rc/tests/mocha/keydown_test.js +364 -0
  856. package/blockly-rc/tests/mocha/layering_test.js +95 -0
  857. package/blockly-rc/tests/mocha/metrics_test.js +671 -0
  858. package/blockly-rc/tests/mocha/mutator_test.js +87 -0
  859. package/blockly-rc/tests/mocha/names_test.js +97 -0
  860. package/blockly-rc/tests/mocha/old_workspace_comment_test.js +256 -0
  861. package/blockly-rc/tests/mocha/procedure_map_test.js +57 -0
  862. package/blockly-rc/tests/mocha/registry_test.js +281 -0
  863. package/blockly-rc/tests/mocha/render_management_test.js +127 -0
  864. package/blockly-rc/tests/mocha/serializer_test.js +2104 -0
  865. package/blockly-rc/tests/mocha/shortcut_registry_test.js +450 -0
  866. package/blockly-rc/tests/mocha/test_helpers/block_definitions.js +204 -0
  867. package/blockly-rc/tests/mocha/test_helpers/code_generation.js +115 -0
  868. package/blockly-rc/tests/mocha/test_helpers/common.js +106 -0
  869. package/blockly-rc/tests/mocha/test_helpers/events.js +290 -0
  870. package/blockly-rc/tests/mocha/test_helpers/fields.js +310 -0
  871. package/blockly-rc/tests/mocha/test_helpers/icon_mocks.js +81 -0
  872. package/blockly-rc/tests/mocha/test_helpers/procedures.js +302 -0
  873. package/blockly-rc/tests/mocha/test_helpers/serialization.js +124 -0
  874. package/blockly-rc/tests/mocha/test_helpers/setup_teardown.js +209 -0
  875. package/blockly-rc/tests/mocha/test_helpers/toolbox_definitions.js +271 -0
  876. package/blockly-rc/tests/mocha/test_helpers/user_input.js +62 -0
  877. package/blockly-rc/tests/mocha/test_helpers/variables.js +23 -0
  878. package/blockly-rc/tests/mocha/test_helpers/warnings.js +83 -0
  879. package/blockly-rc/tests/mocha/test_helpers/workspace.js +1691 -0
  880. package/blockly-rc/tests/mocha/theme_test.js +307 -0
  881. package/blockly-rc/tests/mocha/toolbox_test.js +761 -0
  882. package/blockly-rc/tests/mocha/tooltip_test.js +276 -0
  883. package/blockly-rc/tests/mocha/touch_test.js +109 -0
  884. package/blockly-rc/tests/mocha/trashcan_test.js +375 -0
  885. package/blockly-rc/tests/mocha/utils_test.js +536 -0
  886. package/blockly-rc/tests/mocha/variable_map_test.js +509 -0
  887. package/blockly-rc/tests/mocha/variable_model_test.js +85 -0
  888. package/blockly-rc/tests/mocha/webdriver.js +96 -0
  889. package/blockly-rc/tests/mocha/widget_div_test.js +272 -0
  890. package/blockly-rc/tests/mocha/workspace_comment_test.js +171 -0
  891. package/blockly-rc/tests/mocha/workspace_svg_test.js +414 -0
  892. package/blockly-rc/tests/mocha/workspace_test.js +27 -0
  893. package/blockly-rc/tests/mocha/xml_test.js +951 -0
  894. package/blockly-rc/tests/mocha/zoom_controls_test.js +81 -0
  895. package/blockly-rc/tests/multi_playground.html +482 -0
  896. package/blockly-rc/tests/node/.eslintrc.json +12 -0
  897. package/blockly-rc/tests/node/.mocharc.js +6 -0
  898. package/blockly-rc/tests/node/run_node_test.mjs +72 -0
  899. package/blockly-rc/tests/playground.html +1280 -0
  900. package/blockly-rc/tests/playgrounds/advanced_playground.html +158 -0
  901. package/blockly-rc/tests/playgrounds/iframe.html +40 -0
  902. package/blockly-rc/tests/playgrounds/screenshot.js +123 -0
  903. package/blockly-rc/tests/scripts/check_metadata.sh +166 -0
  904. package/blockly-rc/tests/scripts/compile_typings.sh +32 -0
  905. package/blockly-rc/tests/scripts/load.mjs +140 -0
  906. package/blockly-rc/tests/scripts/setup_linux_env.sh +7 -0
  907. package/blockly-rc/tests/scripts/update_metadata.sh +46 -0
  908. package/blockly-rc/tests/themes/test_themes.js +62 -0
  909. package/blockly-rc/tests/typescript/README.md +4 -0
  910. package/blockly-rc/tests/typescript/src/field/different_user_input.ts +81 -0
  911. package/blockly-rc/tests/typescript/src/generators/dart.ts +24 -0
  912. package/blockly-rc/tests/typescript/src/generators/javascript.ts +28 -0
  913. package/blockly-rc/tests/typescript/src/generators/lua.ts +24 -0
  914. package/blockly-rc/tests/typescript/src/generators/php.ts +24 -0
  915. package/blockly-rc/tests/typescript/src/generators/python.ts +24 -0
  916. package/blockly-rc/tests/typescript/src/generators.ts +31 -0
  917. package/blockly-rc/tests/typescript/src/msg.ts +20 -0
  918. package/blockly-rc/tests/typescript/tsconfig.json +20 -0
  919. package/blockly-rc/tests/xml/README.txt +11 -0
  920. package/blockly-rc/tests/xml/blockly.xsd +178 -0
  921. package/blockly-rc/tests/xml/invalid.xml +6 -0
  922. package/blockly-rc/tests/xml/toolbox.xml +311 -0
  923. package/blockly-rc/tests/xml/workspace.xml +114 -0
  924. package/blockly-rc/tsconfig.json +37 -0
  925. package/blockly-rc/tsdoc.json +35 -0
  926. package/blockly-rc/typings/README.md +5 -0
  927. package/blockly-rc/typings/blocks.d.ts +17 -0
  928. package/blockly-rc/typings/core.d.ts +7 -0
  929. package/blockly-rc/typings/dart.d.ts +7 -0
  930. package/blockly-rc/typings/index.d.ts +10 -0
  931. package/blockly-rc/typings/javascript.d.ts +7 -0
  932. package/blockly-rc/typings/lua.d.ts +7 -0
  933. package/blockly-rc/typings/msg/ab.d.ts +8 -0
  934. package/blockly-rc/typings/msg/ace.d.ts +8 -0
  935. package/blockly-rc/typings/msg/af.d.ts +8 -0
  936. package/blockly-rc/typings/msg/am.d.ts +8 -0
  937. package/blockly-rc/typings/msg/ar.d.ts +8 -0
  938. package/blockly-rc/typings/msg/ast.d.ts +8 -0
  939. package/blockly-rc/typings/msg/az.d.ts +8 -0
  940. package/blockly-rc/typings/msg/ba.d.ts +8 -0
  941. package/blockly-rc/typings/msg/bcc.d.ts +8 -0
  942. package/blockly-rc/typings/msg/be-tarask.d.ts +8 -0
  943. package/blockly-rc/typings/msg/be.d.ts +8 -0
  944. package/blockly-rc/typings/msg/bg.d.ts +8 -0
  945. package/blockly-rc/typings/msg/bn.d.ts +8 -0
  946. package/blockly-rc/typings/msg/br.d.ts +8 -0
  947. package/blockly-rc/typings/msg/bs.d.ts +8 -0
  948. package/blockly-rc/typings/msg/ca.d.ts +8 -0
  949. package/blockly-rc/typings/msg/cdo.d.ts +8 -0
  950. package/blockly-rc/typings/msg/ce.d.ts +8 -0
  951. package/blockly-rc/typings/msg/cs.d.ts +8 -0
  952. package/blockly-rc/typings/msg/da.d.ts +8 -0
  953. package/blockly-rc/typings/msg/de.d.ts +8 -0
  954. package/blockly-rc/typings/msg/diq.d.ts +8 -0
  955. package/blockly-rc/typings/msg/dtp.d.ts +8 -0
  956. package/blockly-rc/typings/msg/dty.d.ts +8 -0
  957. package/blockly-rc/typings/msg/ee.d.ts +8 -0
  958. package/blockly-rc/typings/msg/el.d.ts +8 -0
  959. package/blockly-rc/typings/msg/en-gb.d.ts +8 -0
  960. package/blockly-rc/typings/msg/en.d.ts +8 -0
  961. package/blockly-rc/typings/msg/eo.d.ts +8 -0
  962. package/blockly-rc/typings/msg/es.d.ts +8 -0
  963. package/blockly-rc/typings/msg/et.d.ts +8 -0
  964. package/blockly-rc/typings/msg/eu.d.ts +8 -0
  965. package/blockly-rc/typings/msg/fa.d.ts +8 -0
  966. package/blockly-rc/typings/msg/fi.d.ts +8 -0
  967. package/blockly-rc/typings/msg/fo.d.ts +8 -0
  968. package/blockly-rc/typings/msg/fr.d.ts +8 -0
  969. package/blockly-rc/typings/msg/frr.d.ts +8 -0
  970. package/blockly-rc/typings/msg/gl.d.ts +8 -0
  971. package/blockly-rc/typings/msg/gn.d.ts +8 -0
  972. package/blockly-rc/typings/msg/gor.d.ts +8 -0
  973. package/blockly-rc/typings/msg/ha.d.ts +8 -0
  974. package/blockly-rc/typings/msg/hak.d.ts +8 -0
  975. package/blockly-rc/typings/msg/he.d.ts +8 -0
  976. package/blockly-rc/typings/msg/hi.d.ts +8 -0
  977. package/blockly-rc/typings/msg/hr.d.ts +8 -0
  978. package/blockly-rc/typings/msg/hrx.d.ts +8 -0
  979. package/blockly-rc/typings/msg/hsb.d.ts +8 -0
  980. package/blockly-rc/typings/msg/hu.d.ts +8 -0
  981. package/blockly-rc/typings/msg/hy.d.ts +8 -0
  982. package/blockly-rc/typings/msg/ia.d.ts +8 -0
  983. package/blockly-rc/typings/msg/id.d.ts +8 -0
  984. package/blockly-rc/typings/msg/ig.d.ts +8 -0
  985. package/blockly-rc/typings/msg/inh.d.ts +8 -0
  986. package/blockly-rc/typings/msg/is.d.ts +8 -0
  987. package/blockly-rc/typings/msg/it.d.ts +8 -0
  988. package/blockly-rc/typings/msg/ja.d.ts +8 -0
  989. package/blockly-rc/typings/msg/ka.d.ts +8 -0
  990. package/blockly-rc/typings/msg/kab.d.ts +8 -0
  991. package/blockly-rc/typings/msg/kbd-cyrl.d.ts +8 -0
  992. package/blockly-rc/typings/msg/km.d.ts +8 -0
  993. package/blockly-rc/typings/msg/kn.d.ts +8 -0
  994. package/blockly-rc/typings/msg/ko.d.ts +8 -0
  995. package/blockly-rc/typings/msg/ksh.d.ts +8 -0
  996. package/blockly-rc/typings/msg/ku-latn.d.ts +8 -0
  997. package/blockly-rc/typings/msg/ky.d.ts +8 -0
  998. package/blockly-rc/typings/msg/la.d.ts +8 -0
  999. package/blockly-rc/typings/msg/lb.d.ts +8 -0
  1000. package/blockly-rc/typings/msg/lki.d.ts +8 -0
  1001. package/blockly-rc/typings/msg/lo.d.ts +8 -0
  1002. package/blockly-rc/typings/msg/lrc.d.ts +8 -0
  1003. package/blockly-rc/typings/msg/lt.d.ts +8 -0
  1004. package/blockly-rc/typings/msg/lv.d.ts +8 -0
  1005. package/blockly-rc/typings/msg/mg.d.ts +8 -0
  1006. package/blockly-rc/typings/msg/mk.d.ts +8 -0
  1007. package/blockly-rc/typings/msg/ml.d.ts +8 -0
  1008. package/blockly-rc/typings/msg/mnw.d.ts +8 -0
  1009. package/blockly-rc/typings/msg/ms.d.ts +8 -0
  1010. package/blockly-rc/typings/msg/msg.d.ts +440 -0
  1011. package/blockly-rc/typings/msg/my.d.ts +8 -0
  1012. package/blockly-rc/typings/msg/mzn.d.ts +8 -0
  1013. package/blockly-rc/typings/msg/nb.d.ts +8 -0
  1014. package/blockly-rc/typings/msg/ne.d.ts +8 -0
  1015. package/blockly-rc/typings/msg/nl.d.ts +8 -0
  1016. package/blockly-rc/typings/msg/oc.d.ts +8 -0
  1017. package/blockly-rc/typings/msg/olo.d.ts +8 -0
  1018. package/blockly-rc/typings/msg/pa.d.ts +8 -0
  1019. package/blockly-rc/typings/msg/pl.d.ts +8 -0
  1020. package/blockly-rc/typings/msg/pms.d.ts +8 -0
  1021. package/blockly-rc/typings/msg/ps.d.ts +8 -0
  1022. package/blockly-rc/typings/msg/pt-br.d.ts +8 -0
  1023. package/blockly-rc/typings/msg/pt.d.ts +8 -0
  1024. package/blockly-rc/typings/msg/ro.d.ts +8 -0
  1025. package/blockly-rc/typings/msg/ru.d.ts +8 -0
  1026. package/blockly-rc/typings/msg/sc.d.ts +8 -0
  1027. package/blockly-rc/typings/msg/sco.d.ts +8 -0
  1028. package/blockly-rc/typings/msg/sd.d.ts +8 -0
  1029. package/blockly-rc/typings/msg/shn.d.ts +8 -0
  1030. package/blockly-rc/typings/msg/si.d.ts +8 -0
  1031. package/blockly-rc/typings/msg/sk.d.ts +8 -0
  1032. package/blockly-rc/typings/msg/skr-arab.d.ts +8 -0
  1033. package/blockly-rc/typings/msg/sl.d.ts +8 -0
  1034. package/blockly-rc/typings/msg/smn.d.ts +8 -0
  1035. package/blockly-rc/typings/msg/sq.d.ts +8 -0
  1036. package/blockly-rc/typings/msg/sr-latn.d.ts +8 -0
  1037. package/blockly-rc/typings/msg/sr.d.ts +8 -0
  1038. package/blockly-rc/typings/msg/sv.d.ts +8 -0
  1039. package/blockly-rc/typings/msg/sw.d.ts +8 -0
  1040. package/blockly-rc/typings/msg/ta.d.ts +8 -0
  1041. package/blockly-rc/typings/msg/tcy.d.ts +8 -0
  1042. package/blockly-rc/typings/msg/tdd.d.ts +8 -0
  1043. package/blockly-rc/typings/msg/te.d.ts +8 -0
  1044. package/blockly-rc/typings/msg/th.d.ts +8 -0
  1045. package/blockly-rc/typings/msg/ti.d.ts +8 -0
  1046. package/blockly-rc/typings/msg/tl.d.ts +8 -0
  1047. package/blockly-rc/typings/msg/tlh.d.ts +8 -0
  1048. package/blockly-rc/typings/msg/tr.d.ts +8 -0
  1049. package/blockly-rc/typings/msg/ug-arab.d.ts +8 -0
  1050. package/blockly-rc/typings/msg/uk.d.ts +8 -0
  1051. package/blockly-rc/typings/msg/ur.d.ts +8 -0
  1052. package/blockly-rc/typings/msg/uz.d.ts +8 -0
  1053. package/blockly-rc/typings/msg/vi.d.ts +8 -0
  1054. package/blockly-rc/typings/msg/xmf.d.ts +8 -0
  1055. package/blockly-rc/typings/msg/yo.d.ts +8 -0
  1056. package/blockly-rc/typings/msg/zgh.d.ts +8 -0
  1057. package/blockly-rc/typings/msg/zh-hans.d.ts +8 -0
  1058. package/blockly-rc/typings/msg/zh-hant.d.ts +8 -0
  1059. package/blockly-rc/typings/php.d.ts +7 -0
  1060. package/blockly-rc/typings/python.d.ts +7 -0
  1061. package/blockly-rc/typings/templates/blockly-header.template +11 -0
  1062. package/blockly-rc/typings/templates/blockly-interfaces.template +83 -0
  1063. package/blockly-rc/typings/templates/msg.template +15 -0
  1064. package/blockly-rc/typings/tsconfig.json +23 -0
  1065. package/continuous-toolbox.d.ts +1 -0
  1066. package/dist/main.js +2 -0
  1067. package/dist/main.js.LICENSE.txt +163 -0
  1068. package/media/delete-icon.svg +10 -0
  1069. package/media/resize-handle.svg +3 -0
  1070. package/msg/scratch_msgs.js +184 -164
  1071. package/package.json +25 -40
  1072. package/release.config.js +8 -0
  1073. package/src/block_reporting.js +31 -0
  1074. package/src/blocks/colour.js +56 -0
  1075. package/src/blocks/control.js +492 -0
  1076. package/src/blocks/data.js +690 -0
  1077. package/src/blocks/event.js +305 -0
  1078. package/src/blocks/looks.js +537 -0
  1079. package/src/blocks/math.js +137 -0
  1080. package/src/blocks/matrix.js +47 -0
  1081. package/src/blocks/motion.js +513 -0
  1082. package/src/blocks/note.js +48 -0
  1083. package/src/blocks/operators.js +463 -0
  1084. package/src/blocks/procedures.js +1009 -0
  1085. package/src/blocks/sensing.js +441 -0
  1086. package/src/blocks/sound.js +205 -0
  1087. package/src/blocks/text.js +45 -0
  1088. package/src/blocks/vertical_extensions.js +309 -0
  1089. package/src/categories.js +15 -0
  1090. package/src/checkable_continuous_flyout.js +138 -0
  1091. package/src/checkbox_bubble.js +282 -0
  1092. package/src/colours.js +77 -0
  1093. package/src/constants.js +63 -0
  1094. package/src/context_menu_items.js +150 -0
  1095. package/src/css.js +1197 -0
  1096. package/src/data_category.js +556 -0
  1097. package/src/events/events_block_comment_base.js +35 -0
  1098. package/src/events/events_block_comment_change.js +43 -0
  1099. package/src/events/events_block_comment_collapse.js +43 -0
  1100. package/src/events/events_block_comment_create.js +52 -0
  1101. package/src/events/events_block_comment_delete.js +27 -0
  1102. package/src/events/events_block_comment_move.js +54 -0
  1103. package/src/events/events_block_comment_resize.js +52 -0
  1104. package/src/events/events_block_drag_end.js +33 -0
  1105. package/src/events/events_block_drag_outside.js +30 -0
  1106. package/src/events/events_scratch_variable_create.js +67 -0
  1107. package/src/fields/field_angle.js +433 -0
  1108. package/src/fields/field_colour_slider.js +388 -0
  1109. package/src/fields/field_dropdown.js +42 -0
  1110. package/src/fields/field_matrix.js +634 -0
  1111. package/src/fields/field_note.js +937 -0
  1112. package/src/fields/field_number.js +380 -0
  1113. package/src/fields/field_textinput_removable.js +107 -0
  1114. package/src/fields/field_variable.js +171 -0
  1115. package/src/fields/field_variable_getter.js +109 -0
  1116. package/src/fields/field_vertical_separator.js +139 -0
  1117. package/src/flyout_checkbox_icon.js +88 -0
  1118. package/src/glows.js +98 -0
  1119. package/src/index.ts +137 -0
  1120. package/src/procedures.js +425 -0
  1121. package/src/recyclable_block_flyout_inflater.js +194 -0
  1122. package/src/renderer/bowler_hat.js +17 -0
  1123. package/src/renderer/constants.js +45 -0
  1124. package/src/renderer/drawer.js +51 -0
  1125. package/src/renderer/path_object.js +35 -0
  1126. package/src/renderer/render_info.js +98 -0
  1127. package/src/renderer/renderer.js +74 -0
  1128. package/src/scratch_block_paster.js +46 -0
  1129. package/src/scratch_blocks_utils.js +148 -0
  1130. package/src/scratch_comment_bubble.js +169 -0
  1131. package/src/scratch_comment_icon.js +195 -0
  1132. package/src/scratch_connection_checker.js +29 -0
  1133. package/src/scratch_continuous_category.js +80 -0
  1134. package/src/scratch_continuous_toolbox.js +78 -0
  1135. package/src/scratch_dragger.js +142 -0
  1136. package/src/scratch_variable_map.js +25 -0
  1137. package/src/scratch_variable_model.js +24 -0
  1138. package/src/shadows.js +61 -0
  1139. package/src/status_indicator_label.js +186 -0
  1140. package/src/status_indicator_label_flyout_inflater.js +42 -0
  1141. package/src/variables.js +355 -0
  1142. package/temp-use-blockly-v12-rc.sh +26 -0
  1143. package/tsconfig.json +13 -0
  1144. package/blockly_compressed_horizontal.js +0 -2255
  1145. package/blockly_compressed_vertical.js +0 -2283
  1146. package/blockly_uncompressed_horizontal.js +0 -1210
  1147. package/blockly_uncompressed_vertical.js +0 -1210
  1148. package/blocks_common/colour.js +0 -61
  1149. package/blocks_common/math.js +0 -159
  1150. package/blocks_common/matrix.js +0 -54
  1151. package/blocks_common/note.js +0 -58
  1152. package/blocks_common/text.js +0 -57
  1153. package/blocks_compressed.js +0 -36
  1154. package/blocks_compressed_horizontal.js +0 -67
  1155. package/blocks_compressed_vertical.js +0 -208
  1156. package/blocks_horizontal/control.js +0 -212
  1157. package/blocks_horizontal/default_toolbox.js +0 -139
  1158. package/blocks_horizontal/event.js +0 -190
  1159. package/blocks_horizontal/wedo.js +0 -325
  1160. package/blocks_vertical/control.js +0 -532
  1161. package/blocks_vertical/data.js +0 -666
  1162. package/blocks_vertical/default_toolbox.js +0 -564
  1163. package/blocks_vertical/event.js +0 -329
  1164. package/blocks_vertical/extensions.js +0 -294
  1165. package/blocks_vertical/looks.js +0 -591
  1166. package/blocks_vertical/motion.js +0 -587
  1167. package/blocks_vertical/operators.js +0 -470
  1168. package/blocks_vertical/procedures.js +0 -973
  1169. package/blocks_vertical/sensing.js +0 -539
  1170. package/blocks_vertical/sound.js +0 -246
  1171. package/blocks_vertical/vertical_extensions.js +0 -266
  1172. package/build/gen_blocks.js +0 -1
  1173. package/build/test_expect.js +0 -1
  1174. package/build/test_input.js +0 -1
  1175. package/build.py +0 -636
  1176. package/cleanup.sh +0 -101
  1177. package/core/block.js +0 -1837
  1178. package/core/block_animations.js +0 -107
  1179. package/core/block_drag_surface.js +0 -299
  1180. package/core/block_dragger.js +0 -421
  1181. package/core/block_events.js +0 -531
  1182. package/core/block_render_svg_horizontal.js +0 -890
  1183. package/core/block_render_svg_vertical.js +0 -1732
  1184. package/core/block_svg.js +0 -1316
  1185. package/core/blockly.js +0 -622
  1186. package/core/blocks.js +0 -37
  1187. package/core/bubble.js +0 -664
  1188. package/core/bubble_dragger.js +0 -285
  1189. package/core/colours.js +0 -160
  1190. package/core/comment.js +0 -293
  1191. package/core/comment_events.js +0 -539
  1192. package/core/connection.js +0 -766
  1193. package/core/connection_db.js +0 -300
  1194. package/core/constants.js +0 -387
  1195. package/core/contextmenu.js +0 -519
  1196. package/core/css.js +0 -1351
  1197. package/core/data_category.js +0 -490
  1198. package/core/dragged_connection_manager.js +0 -260
  1199. package/core/dropdowndiv.js +0 -408
  1200. package/core/events.js +0 -429
  1201. package/core/events_abstract.js +0 -113
  1202. package/core/extensions.js +0 -450
  1203. package/core/field.js +0 -807
  1204. package/core/field_angle.js +0 -398
  1205. package/core/field_checkbox.js +0 -133
  1206. package/core/field_colour.js +0 -253
  1207. package/core/field_colour_slider.js +0 -387
  1208. package/core/field_date.js +0 -353
  1209. package/core/field_dropdown.js +0 -483
  1210. package/core/field_iconmenu.js +0 -309
  1211. package/core/field_image.js +0 -193
  1212. package/core/field_label.js +0 -136
  1213. package/core/field_label_serializable.js +0 -125
  1214. package/core/field_matrix.js +0 -566
  1215. package/core/field_note.js +0 -850
  1216. package/core/field_number.js +0 -366
  1217. package/core/field_numberdropdown.js +0 -77
  1218. package/core/field_textdropdown.js +0 -164
  1219. package/core/field_textinput.js +0 -675
  1220. package/core/field_textinput_removable.js +0 -105
  1221. package/core/field_variable.js +0 -385
  1222. package/core/field_variable_getter.js +0 -185
  1223. package/core/field_vertical_separator.js +0 -161
  1224. package/core/flyout_base.js +0 -923
  1225. package/core/flyout_button.js +0 -322
  1226. package/core/flyout_dragger.js +0 -83
  1227. package/core/flyout_extension_category_header.js +0 -159
  1228. package/core/flyout_horizontal.js +0 -475
  1229. package/core/flyout_vertical.js +0 -770
  1230. package/core/generator.js +0 -426
  1231. package/core/gesture.js +0 -1011
  1232. package/core/grid.js +0 -227
  1233. package/core/icon.js +0 -205
  1234. package/core/inject.js +0 -491
  1235. package/core/input.js +0 -285
  1236. package/core/insertion_marker_manager.js +0 -678
  1237. package/core/msg.js +0 -62
  1238. package/core/mutator.js +0 -426
  1239. package/core/names.js +0 -198
  1240. package/core/options.js +0 -244
  1241. package/core/procedures.js +0 -577
  1242. package/core/rendered_connection.js +0 -417
  1243. package/core/scratch_block_comment.js +0 -653
  1244. package/core/scratch_blocks_utils.js +0 -244
  1245. package/core/scratch_bubble.js +0 -696
  1246. package/core/scratch_events.js +0 -131
  1247. package/core/scratch_msgs.js +0 -85
  1248. package/core/scrollbar.js +0 -875
  1249. package/core/toolbox.js +0 -801
  1250. package/core/tooltip.js +0 -337
  1251. package/core/touch.js +0 -226
  1252. package/core/trashcan.js +0 -343
  1253. package/core/ui_events.js +0 -91
  1254. package/core/ui_menu_utils.js +0 -68
  1255. package/core/utils.js +0 -948
  1256. package/core/variable_events.js +0 -259
  1257. package/core/variable_map.js +0 -415
  1258. package/core/variable_model.js +0 -116
  1259. package/core/variables.js +0 -674
  1260. package/core/warning.js +0 -199
  1261. package/core/widgetdiv.js +0 -344
  1262. package/core/workspace.js +0 -673
  1263. package/core/workspace_audio.js +0 -170
  1264. package/core/workspace_comment.js +0 -432
  1265. package/core/workspace_comment_render_svg.js +0 -723
  1266. package/core/workspace_comment_svg.js +0 -611
  1267. package/core/workspace_drag_surface_svg.js +0 -195
  1268. package/core/workspace_dragger.js +0 -132
  1269. package/core/workspace_svg.js +0 -2267
  1270. package/core/xml.js +0 -919
  1271. package/core/zoom_controls.js +0 -301
  1272. package/dist/horizontal.js +0 -222
  1273. package/dist/vertical.js +0 -222
  1274. package/dist/web/horizontal.js +0 -232
  1275. package/dist/web/vertical.js +0 -232
  1276. package/local_build.sh +0 -70
  1277. package/pack/scratch-blocks-1.1.206.tgz +0 -0
  1278. package/pull_from_blockly.sh +0 -151
  1279. package/shim/blockly_compressed_horizontal-blocks_compressed.js +0 -1
  1280. package/shim/blockly_compressed_horizontal.Blockly.js +0 -1
  1281. package/shim/blockly_compressed_horizontal.goog.js +0 -1
  1282. package/shim/blockly_compressed_horizontal.js +0 -1
  1283. package/shim/blockly_compressed_vertical-blocks_compressed.js +0 -1
  1284. package/shim/blockly_compressed_vertical.Blockly.js +0 -1
  1285. package/shim/blockly_compressed_vertical.goog.js +0 -1
  1286. package/shim/blockly_compressed_vertical.js +0 -1
  1287. package/shim/blocks_compressed_horizontal-blockly_compressed_horizontal-messages.js +0 -1
  1288. package/shim/blocks_compressed_horizontal.js +0 -1
  1289. package/shim/blocks_compressed_vertical-blockly_compressed_vertical-messages.js +0 -1
  1290. package/shim/blocks_compressed_vertical.js +0 -1
  1291. package/shim/gh-pages.js +0 -1
  1292. package/shim/horizontal.js +0 -1
  1293. package/shim/index.js +0 -17
  1294. package/shim/vertical.js +0 -1
  1295. /package/media/{comment-arrow-down.svg → foldout-icon.svg} +0 -0
@@ -0,0 +1,2104 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2021 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import {assert} from '../../node_modules/chai/chai.js';
8
+ import * as Blockly from '../../build/src/core/blockly.js';
9
+ import {
10
+ TestCase,
11
+ TestSuite,
12
+ runTestCases,
13
+ runTestSuites,
14
+ } from './test_helpers/common.js';
15
+ import {
16
+ sharedTestSetup,
17
+ sharedTestTeardown,
18
+ workspaceTeardown,
19
+ } from './test_helpers/setup_teardown.js';
20
+
21
+ // TODO: Move this into samples as part of the dev-tools package.
22
+ // TODO: Fix up typing of SerializerTestCase & SerializerTestSuite to match
23
+ // decision in google/blockly-samples#819.
24
+ /**
25
+ * Constructs a serializer test.
26
+ * @param {string} title The title of this testcase.
27
+ * @param {string} xml The XML to use for the round-trip test.
28
+ * @constructor
29
+ * @implements {TestCase}
30
+ */
31
+ function SerializerTestCase(title, xml) {
32
+ this.title = title;
33
+ this.xml = xml;
34
+ }
35
+ SerializerTestCase.prototype = new TestCase();
36
+
37
+ /**
38
+ * The XML we want to ensure round-trips through the serializer.
39
+ */
40
+ SerializerTestCase.prototype.xml = '';
41
+
42
+ /**
43
+ * Constructs a serializer test suite.
44
+ * @param {string} title The title of this test suite.
45
+ * @extends {TestSuite<SerializerTestCase, SerializerTestSuite>}
46
+ */
47
+ function SerializerTestSuite(title) {
48
+ this.title = title;
49
+ }
50
+ SerializerTestSuite.prototype = new TestSuite();
51
+
52
+ const Serializer = new SerializerTestSuite('Serializer');
53
+
54
+ // TODO: Make sure all of these properties are documented ad exported properly.
55
+ Serializer.Empty = new SerializerTestCase(
56
+ 'Empty',
57
+ '<xml xmlns="https://developers.google.com/blockly/xml"></xml>',
58
+ );
59
+ Serializer.Data = new SerializerTestCase(
60
+ 'Data',
61
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
62
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
63
+ '<data>test data</data>' +
64
+ '</block>' +
65
+ '</xml>',
66
+ );
67
+ Serializer.testCases = [Serializer.Empty, Serializer.Data];
68
+
69
+ Serializer.Attributes = new SerializerTestSuite('Attributes');
70
+ Serializer.Attributes.Basic = new SerializerTestCase(
71
+ 'Basic',
72
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
73
+ '<block type="logic_negate" id="id******************" x="42" y="42"></block>' +
74
+ '</xml>',
75
+ );
76
+ Serializer.Attributes.Collapsed = new SerializerTestCase(
77
+ 'Collapsed',
78
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
79
+ '<block type="logic_negate" id="id******************" collapsed="true" x="42" y="42"></block>' +
80
+ '</xml>',
81
+ );
82
+ Serializer.Attributes.Disabled = new SerializerTestCase(
83
+ 'Disabled',
84
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
85
+ '<block type="logic_negate" id="id******************" disabled-reasons="test%20reason,another%20reason" x="42" y="42"></block>' +
86
+ '</xml>',
87
+ );
88
+ Serializer.Attributes.DisabledWithEncodedComma = new SerializerTestCase(
89
+ 'DisabledWithEncodedComma',
90
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
91
+ '<block type="logic_negate" id="id******************" disabled-reasons="test%2Creason" x="42" y="42"></block>' +
92
+ '</xml>',
93
+ );
94
+ Serializer.Attributes.NotDeletable = new SerializerTestCase(
95
+ 'Deletable',
96
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
97
+ '<block type="logic_negate" id="id******************" deletable="false" x="42" y="42"></block>' +
98
+ '</xml>',
99
+ );
100
+ Serializer.Attributes.NotMovable = new SerializerTestCase(
101
+ 'Movable',
102
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
103
+ '<block type="logic_negate" id="id******************" movable="false" x="42" y="42"></block>' +
104
+ '</xml>',
105
+ );
106
+ Serializer.Attributes.NotEditable = new SerializerTestCase(
107
+ 'Editable',
108
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
109
+ '<block type="logic_negate" id="id******************" editable="false" x="42" y="42"></block>' +
110
+ '</xml>',
111
+ );
112
+ Serializer.Attributes.testCases = [
113
+ Serializer.Attributes.Basic,
114
+ Serializer.Attributes.Collapsed,
115
+ Serializer.Attributes.Disabled,
116
+ Serializer.Attributes.DisabledWithEncodedComma,
117
+ Serializer.Attributes.NotDeletable,
118
+ Serializer.Attributes.NotMovable,
119
+ Serializer.Attributes.NotEditable,
120
+ ];
121
+
122
+ Serializer.Attributes.Inline = new SerializerTestSuite('Inline');
123
+ Serializer.Attributes.Inline.True = new SerializerTestCase(
124
+ 'True',
125
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
126
+ '<block type="logic_negate" id="id******************" inline="true" x="42" y="42"></block>' +
127
+ '</xml>',
128
+ );
129
+ Serializer.Attributes.Inline.False = new SerializerTestCase(
130
+ 'False',
131
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
132
+ '<block type="logic_negate" id="id******************" inline="false" x="42" y="42"></block>' +
133
+ '</xml>',
134
+ );
135
+ Serializer.Attributes.Inline.testCases = [
136
+ Serializer.Attributes.Inline.True,
137
+ Serializer.Attributes.Inline.False,
138
+ ];
139
+
140
+ Serializer.Attributes.Coordinates = new SerializerTestSuite('Coordinates');
141
+ Serializer.Attributes.Coordinates.Simple = new SerializerTestCase(
142
+ 'Simple',
143
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
144
+ '<block type="logic_negate" id="id******************" x="42" y="42"></block>' +
145
+ '</xml>',
146
+ );
147
+ Serializer.Attributes.Coordinates.Negative = new SerializerTestCase(
148
+ 'Negative',
149
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
150
+ '<block type="logic_negate" id="id******************" x="-42" y="-42"></block>' +
151
+ '</xml>',
152
+ );
153
+ Serializer.Attributes.Coordinates.Zero = new SerializerTestCase(
154
+ 'Zero',
155
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
156
+ '<block type="logic_negate" id="id******************" x="0" y="0"></block>' +
157
+ '</xml>',
158
+ );
159
+ Serializer.Attributes.Coordinates.testCases = [
160
+ Serializer.Attributes.Coordinates.Simple,
161
+ Serializer.Attributes.Coordinates.Negative,
162
+ Serializer.Attributes.Coordinates.Zero,
163
+ ];
164
+
165
+ Serializer.Attributes.Id = new SerializerTestSuite('Ids');
166
+
167
+ Serializer.Attributes.Id.Length = new SerializerTestSuite('Length');
168
+ Serializer.Attributes.Id.Length.Short = new SerializerTestCase(
169
+ 'Short',
170
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
171
+ '<block type="logic_negate" id="id******************" x="42" y="42"></block>' +
172
+ '</xml>',
173
+ );
174
+ Serializer.Attributes.Id.Length.Long = new SerializerTestCase(
175
+ 'Long',
176
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
177
+ '<block type="logic_negate" id="id***********************" x="42" y="42">' +
178
+ '</block>' +
179
+ '</xml>',
180
+ );
181
+ Serializer.Attributes.Id.Length.testCases = [
182
+ Serializer.Attributes.Id.Length.Short,
183
+ Serializer.Attributes.Id.Length.Long,
184
+ ];
185
+
186
+ Serializer.Attributes.Id.Chars = new SerializerTestSuite('Chars');
187
+ Serializer.Attributes.Id.Chars.Symbols = new SerializerTestCase(
188
+ 'Symbols',
189
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
190
+ '<block type="logic_negate" id="!#$%()*+,-./:;=?@[]^" x="42" y="42"></block>' +
191
+ '<block type="logic_negate" id="_`{|}~!!!!!!!!!!!!!!" x="42" y="42"></block>' +
192
+ '</xml>',
193
+ );
194
+ Serializer.Attributes.Id.Chars.Uppercase = new SerializerTestCase(
195
+ 'Uppercase',
196
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
197
+ '<block type="logic_negate" id="ABCDEFGHIJKLMNOPQRST" x="42" y="42"></block>' +
198
+ '<block type="logic_negate" id="TUVWXYZAAAAAAAAAAAAA" x="42" y="42"></block>' +
199
+ '</xml>',
200
+ );
201
+ Serializer.Attributes.Id.Chars.Lowercase = new SerializerTestCase(
202
+ 'Lowercase',
203
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
204
+ '<block type="logic_negate" id="abcdefghijklmnopqrst" x="42" y="42"></block>' +
205
+ '<block type="logic_negate" id="tuvwxyzaaaaaaaaaaaaa" x="42" y="42"></block>' +
206
+ '</xml>',
207
+ );
208
+ Serializer.Attributes.Id.Chars.Numbers = new SerializerTestCase(
209
+ 'Numbers',
210
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
211
+ '<block type="logic_negate" id="01234567890000000000" x="42" y="42"></block>' +
212
+ '</xml>',
213
+ );
214
+ Serializer.Attributes.Id.Chars.testCases = [
215
+ Serializer.Attributes.Id.Chars.Symbols,
216
+ Serializer.Attributes.Id.Chars.Uppercase,
217
+ Serializer.Attributes.Id.Chars.Lowercase,
218
+ Serializer.Attributes.Id.Chars.Numbers,
219
+ ];
220
+
221
+ Serializer.Attributes.Id.testSuites = [
222
+ Serializer.Attributes.Id.Length,
223
+ Serializer.Attributes.Id.Chars,
224
+ ];
225
+
226
+ Serializer.Attributes.testSuites = [
227
+ Serializer.Attributes.Inline,
228
+ Serializer.Attributes.Coordinates,
229
+ Serializer.Attributes.Id,
230
+ ];
231
+
232
+ Serializer.Fields = new SerializerTestSuite('Fields');
233
+
234
+ Serializer.Fields.Checkbox = new SerializerTestSuite('Checkbox');
235
+ Serializer.Fields.Checkbox.True = new SerializerTestCase(
236
+ 'True',
237
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
238
+ '<block type="test_fields_checkbox" id="id******************" x="42" y="42">' +
239
+ '<field name="CHECKBOX">TRUE</field>' +
240
+ '</block>' +
241
+ '</xml>',
242
+ );
243
+ Serializer.Fields.Checkbox.False = new SerializerTestCase(
244
+ 'False',
245
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
246
+ '<block type="test_fields_checkbox" id="id******************" x="42" y="42">' +
247
+ '<field name="CHECKBOX">FALSE</field>' +
248
+ '</block>' +
249
+ '</xml>',
250
+ );
251
+ Serializer.Fields.Checkbox.testCases = [
252
+ Serializer.Fields.Checkbox.True,
253
+ Serializer.Fields.Checkbox.False,
254
+ ];
255
+
256
+ Serializer.Fields.Dropdown = new SerializerTestSuite('Dropdown');
257
+ Serializer.Fields.Dropdown.Default = new SerializerTestCase(
258
+ 'Default',
259
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
260
+ '<block type="test_dropdowns_long" id="id******************" x="42" y="42">' +
261
+ '<field name="FIELDNAME">ITEM1</field>' +
262
+ '</block>' +
263
+ '</xml>',
264
+ );
265
+ Serializer.Fields.Dropdown.NotDefault = new SerializerTestCase(
266
+ 'NotDefault',
267
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
268
+ '<block type="test_dropdowns_long" id="id******************" x="42" y="42">' +
269
+ '<field name="FIELDNAME">ITEM32</field>' +
270
+ '</block>' +
271
+ '</xml>',
272
+ );
273
+ Serializer.Fields.Dropdown.Dynamic = new SerializerTestCase(
274
+ 'Dynamic',
275
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
276
+ '<block type="test_dropdowns_dynamic_random" id="id******************" x="42" y="42">' +
277
+ '<field name="OPTIONS">0</field>' +
278
+ '</block>' +
279
+ '</xml>',
280
+ );
281
+ Serializer.Fields.Dropdown.testCases = [
282
+ Serializer.Fields.Dropdown.Default,
283
+ Serializer.Fields.Dropdown.NotDefault,
284
+ Serializer.Fields.Dropdown.Dynamic,
285
+ ];
286
+
287
+ Serializer.Fields.LabelSerializable = new SerializerTestSuite(
288
+ 'LabelSerializable',
289
+ );
290
+ Serializer.Fields.LabelSerializable.Simple = new SerializerTestCase(
291
+ 'Simple',
292
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
293
+ '<block type="test_fields_label_serializable" id="id******************" x="42" y="42">' +
294
+ '<field name="LABEL">test</field>' +
295
+ '</block>' +
296
+ '</xml>',
297
+ );
298
+ Serializer.Fields.LabelSerializable.Symbols = new SerializerTestCase(
299
+ 'Symbols',
300
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
301
+ '<block type="test_fields_label_serializable" id="id******************" x="42" y="42">' +
302
+ '<field name="LABEL">~`!@#$%^*()_+-={[}]|\\:;,.?/</field>' +
303
+ '</block>' +
304
+ '</xml>',
305
+ );
306
+ Serializer.Fields.LabelSerializable.EscapedSymbols = new SerializerTestCase(
307
+ 'EscapedSymbols',
308
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
309
+ '<block type="test_fields_label_serializable" id="id******************" x="42" y="42">' +
310
+ '<field name="LABEL">&amp;&lt;&gt;</field>' +
311
+ '</block>' +
312
+ '</xml>',
313
+ );
314
+ Serializer.Fields.LabelSerializable.SingleQuotes = new SerializerTestCase(
315
+ 'SingleQuotes',
316
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
317
+ '<block type="test_fields_label_serializable" id="id******************" x="42" y="42">' +
318
+ '<field name="LABEL">\'test\'</field>' +
319
+ '</block>' +
320
+ '</xml>',
321
+ );
322
+ Serializer.Fields.LabelSerializable.DoubleQuotes = new SerializerTestCase(
323
+ 'DoubleQuotes',
324
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
325
+ '<block type="test_fields_label_serializable" id="id******************" x="42" y="42">' +
326
+ '<field name="LABEL">"test"</field>' +
327
+ '</block>' +
328
+ '</xml>',
329
+ );
330
+ Serializer.Fields.LabelSerializable.Numbers = new SerializerTestCase(
331
+ 'Numbers',
332
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
333
+ '<block type="test_fields_label_serializable" id="id******************" x="42" y="42">' +
334
+ '<field name="LABEL">1234567890a123a123a</field>' +
335
+ '</block>' +
336
+ '</xml>',
337
+ );
338
+ Serializer.Fields.LabelSerializable.Emoji = new SerializerTestCase(
339
+ 'Emoji',
340
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
341
+ '<block type="test_fields_label_serializable" id="id******************" x="42" y="42">' +
342
+ '<field name="LABEL">😀👋🏿👋🏾👋🏽👋🏼👋🏻😀❤❤❤</field>' +
343
+ '</block>' +
344
+ '</xml>',
345
+ );
346
+ Serializer.Fields.LabelSerializable.Russian = new SerializerTestCase(
347
+ 'Russian',
348
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
349
+ '<block type="test_fields_label_serializable" id="id******************" x="42" y="42">' +
350
+ '<field name="LABEL">ты любопытный кот</field>' +
351
+ '</block>' +
352
+ '</xml>',
353
+ );
354
+ Serializer.Fields.LabelSerializable.Japanese = new SerializerTestCase(
355
+ 'Japanese',
356
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
357
+ '<block type="test_fields_label_serializable" id="id******************" x="42" y="42">' +
358
+ '<field name="LABEL">あなたは好奇心旺盛な猫です</field>' +
359
+ '</block>' +
360
+ '</xml>',
361
+ );
362
+ Serializer.Fields.LabelSerializable.Zalgo = new SerializerTestCase(
363
+ 'Zalgo',
364
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
365
+ '<block type="test_fields_label_serializable" id="id******************" x="42" y="42">' +
366
+ '<field name="LABEL">z̴̪͈̲̜͕̽̈̀͒͂̓̋̉̍a̸̧̧̜̻̘̤̫̱̲͎̞̻͆̋ļ̸̛̖̜̳͚̖͔̟̈́͂̉̀͑̑͑̎ǵ̸̫̳̽̐̃̑̚̕o̶͇̫͔̮̼̭͕̹̘̬͋̀͆̂̇̋͊̒̽</field>' +
367
+ '</block>' +
368
+ '</xml>',
369
+ );
370
+ Serializer.Fields.LabelSerializable.ControlChars = new SerializerTestCase(
371
+ 'ControlChars',
372
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
373
+ '<block type="test_fields_label_serializable" id="id******************" x="42" y="42">' +
374
+ '<field name="LABEL">&#01;&#a1;</field>' +
375
+ '</block>' +
376
+ '</xml>',
377
+ );
378
+ Serializer.Fields.LabelSerializable.testCases = [
379
+ Serializer.Fields.LabelSerializable.Simple,
380
+ Serializer.Fields.LabelSerializable.Symbols,
381
+ Serializer.Fields.LabelSerializable.EscapedSymbols,
382
+ Serializer.Fields.LabelSerializable.SingleQuotes,
383
+ Serializer.Fields.LabelSerializable.DoubleQuotes,
384
+ Serializer.Fields.LabelSerializable.Numbers,
385
+ Serializer.Fields.LabelSerializable.Emoji,
386
+ Serializer.Fields.LabelSerializable.Russian,
387
+ Serializer.Fields.LabelSerializable.Japanese,
388
+ Serializer.Fields.LabelSerializable.Zalgo,
389
+ // TODO: Uncoment once #4945 is merged.
390
+ // Serializer.Fields.LabelSerializable.ControlChars,
391
+ ];
392
+
393
+ Serializer.Fields.Number = new SerializerTestSuite('Number');
394
+ Serializer.Fields.Number.Simple = new SerializerTestCase(
395
+ 'Simple',
396
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
397
+ '<block type="test_numbers_float" id="id******************" x="42" y="42">' +
398
+ '<field name="NUM">123</field>' +
399
+ '</block>' +
400
+ '</xml>',
401
+ );
402
+ Serializer.Fields.Number.Negative = new SerializerTestCase(
403
+ 'Negative',
404
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
405
+ '<block type="test_numbers_float" id="id******************" x="42" y="42">' +
406
+ '<field name="NUM">-123</field>' +
407
+ '</block>' +
408
+ '</xml>',
409
+ );
410
+ Serializer.Fields.Number.PosInfinity = new SerializerTestCase(
411
+ 'PosInfinity',
412
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
413
+ '<block type="test_numbers_float" id="id******************" x="42" y="42">' +
414
+ '<field name="NUM">Infinity</field>' +
415
+ '</block>' +
416
+ '</xml>',
417
+ );
418
+ Serializer.Fields.Number.NegInfinity = new SerializerTestCase(
419
+ 'NegInfinity',
420
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
421
+ '<block type="test_numbers_float" id="id******************" x="42" y="42">' +
422
+ '<field name="NUM">-Infinity</field>' +
423
+ '</block>' +
424
+ '</xml>',
425
+ );
426
+ Serializer.Fields.Number.Decimals = new SerializerTestCase(
427
+ 'Decimals',
428
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
429
+ '<block type="test_numbers_float" id="id******************" x="42" y="42">' +
430
+ '<field name="NUM">1.5</field>' +
431
+ '</block>' +
432
+ '</xml>',
433
+ );
434
+ Serializer.Fields.Number.Smallest = new SerializerTestCase(
435
+ 'Smallest',
436
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
437
+ '<block type="test_numbers_float" id="id******************" x="42" y="42">' +
438
+ '<field name="NUM">5e-324</field>' +
439
+ '</block>' +
440
+ '</xml>',
441
+ );
442
+ Serializer.Fields.Number.Largest = new SerializerTestCase(
443
+ 'Largest',
444
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
445
+ '<block type="test_numbers_float" id="id******************" x="42" y="42">' +
446
+ '<field name="NUM">1.7976931348623157e+308</field>' +
447
+ '</block>' +
448
+ '</xml>',
449
+ );
450
+ Serializer.Fields.Number.MaxPrecisionSmall = new SerializerTestCase(
451
+ 'MaxPrecisionSmall',
452
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
453
+ '<block type="test_numbers_float" id="id******************" x="42" y="42">' +
454
+ '<field name="NUM">1.000000000000001</field>' +
455
+ '</block>' +
456
+ '</xml>',
457
+ );
458
+ Serializer.Fields.Number.MaxPrecisionLarge = new SerializerTestCase(
459
+ 'MaxPrecisionLarge',
460
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
461
+ '<block type="test_numbers_float" id="id******************" x="42" y="42">' +
462
+ '<field name="NUM">1000000000000001</field>' +
463
+ '</block>' +
464
+ '</xml>',
465
+ );
466
+ Serializer.Fields.Number.testCases = [
467
+ Serializer.Fields.Number.Simple,
468
+ Serializer.Fields.Number.Negative,
469
+ Serializer.Fields.Number.PosInfinity,
470
+ Serializer.Fields.Number.NegInfinity,
471
+ Serializer.Fields.Number.Decimals,
472
+ Serializer.Fields.Number.Smallest,
473
+ Serializer.Fields.Number.Largest,
474
+ Serializer.Fields.Number.MaxPrecisionSmall,
475
+ Serializer.Fields.Number.MaxPrecisionLarge,
476
+ ];
477
+
478
+ Serializer.Fields.TextInput = new SerializerTestSuite('TextInput');
479
+ Serializer.Fields.TextInput.Simple = new SerializerTestCase(
480
+ 'Simple',
481
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
482
+ '<block type="test_fields_text_input" id="id******************" x="42" y="42">' +
483
+ '<field name="TEXT_INPUT">test</field>' +
484
+ '</block>' +
485
+ '</xml>',
486
+ );
487
+ /* eslint-disable no-tabs */
488
+ Serializer.Fields.TextInput.Tabs = new SerializerTestCase(
489
+ 'Tabs',
490
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
491
+ '<block type="test_fields_text_input" id="id******************" x="42" y="42">' +
492
+ '<field name="TEXT_INPUT">line1&amp;#x9line2&amp;#x9line3</field>' +
493
+ '</block>' +
494
+ '</xml>',
495
+ );
496
+ /* eslint-enable no-tabs */
497
+ Serializer.Fields.TextInput.Symbols = new SerializerTestCase(
498
+ 'Symbols',
499
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
500
+ '<block type="test_fields_text_input" id="id******************" x="42" y="42">' +
501
+ '<field name="TEXT_INPUT">~`!@#$%^*()_+-={[}]|\\:;,.?/</field>' +
502
+ '</block>' +
503
+ '</xml>',
504
+ );
505
+ Serializer.Fields.TextInput.EscapedSymbols = new SerializerTestCase(
506
+ 'EscapedSymbols',
507
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
508
+ '<block type="test_fields_text_input" id="id******************" x="42" y="42">' +
509
+ '<field name="TEXT_INPUT">&amp;&lt;&gt;</field>' +
510
+ '</block>' +
511
+ '</xml>',
512
+ );
513
+ Serializer.Fields.TextInput.SingleQuotes = new SerializerTestCase(
514
+ 'SingleQuotes',
515
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
516
+ '<block type="test_fields_text_input" id="id******************" x="42" y="42">' +
517
+ '<field name="TEXT_INPUT">\'test\'</field>' +
518
+ '</block>' +
519
+ '</xml>',
520
+ );
521
+ Serializer.Fields.TextInput.DoubleQuotes = new SerializerTestCase(
522
+ 'DoubleQuotes',
523
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
524
+ '<block type="test_fields_text_input" id="id******************" x="42" y="42">' +
525
+ '<field name="TEXT_INPUT">"test"</field>' +
526
+ '</block>' +
527
+ '</xml>',
528
+ );
529
+ Serializer.Fields.TextInput.Numbers = new SerializerTestCase(
530
+ 'Numbers',
531
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
532
+ '<block type="test_fields_text_input" id="id******************" x="42" y="42">' +
533
+ '<field name="TEXT_INPUT">1234567890a123a123a</field>' +
534
+ '</block>' +
535
+ '</xml>',
536
+ );
537
+ Serializer.Fields.TextInput.Emoji = new SerializerTestCase(
538
+ 'Emoji',
539
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
540
+ '<block type="test_fields_text_input" id="id******************" x="42" y="42">' +
541
+ '<field name="TEXT_INPUT">😀👋🏿👋🏾👋🏽👋🏼👋🏻😀❤❤❤</field>' +
542
+ '</block>' +
543
+ '</xml>',
544
+ );
545
+ Serializer.Fields.TextInput.Russian = new SerializerTestCase(
546
+ 'Russian',
547
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
548
+ '<block type="test_fields_text_input" id="id******************" x="42" y="42">' +
549
+ '<field name="TEXT_INPUT">ты любопытный кот</field>' +
550
+ '</block>' +
551
+ '</xml>',
552
+ );
553
+ Serializer.Fields.TextInput.Japanese = new SerializerTestCase(
554
+ 'Japanese',
555
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
556
+ '<block type="test_fields_text_input" id="id******************" x="42" y="42">' +
557
+ '<field name="TEXT_INPUT">あなたは好奇心旺盛な猫です</field>' +
558
+ '</block>' +
559
+ '</xml>',
560
+ );
561
+ Serializer.Fields.TextInput.Zalgo = new SerializerTestCase(
562
+ 'Zalgo',
563
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
564
+ '<block type="test_fields_text_input" id="id******************" x="42" y="42">' +
565
+ '<field name="TEXT_INPUT">z̴̪͈̲̜͕̽̈̀͒͂̓̋̉̍a̸̧̧̜̻̘̤̫̱̲͎̞̻͆̋ļ̸̛̖̜̳͚̖͔̟̈́͂̉̀͑̑͑̎ǵ̸̫̳̽̐̃̑̚̕o̶͇̫͔̮̼̭͕̹̘̬͋̀͆̂̇̋͊̒̽</field>' +
566
+ '</block>' +
567
+ '</xml>',
568
+ );
569
+ Serializer.Fields.TextInput.ControlChars = new SerializerTestCase(
570
+ 'ControlChars',
571
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
572
+ '<block type="test_fields_text_input" id="id******************" x="42" y="42">' +
573
+ '<field name="TEXT_INPUT">&#01;&#a1;</field>' +
574
+ '</block>' +
575
+ '</xml>',
576
+ );
577
+ Serializer.Fields.TextInput.testCases = [
578
+ Serializer.Fields.TextInput.Simple,
579
+ Serializer.Fields.TextInput.Tabs,
580
+ Serializer.Fields.TextInput.Symbols,
581
+ Serializer.Fields.TextInput.EscapedSymbols,
582
+ Serializer.Fields.TextInput.SingleQuotes,
583
+ Serializer.Fields.TextInput.DoubleQuotes,
584
+ Serializer.Fields.TextInput.Numbers,
585
+ Serializer.Fields.TextInput.Emoji,
586
+ Serializer.Fields.TextInput.Russian,
587
+ Serializer.Fields.TextInput.Japanese,
588
+ Serializer.Fields.TextInput.Zalgo,
589
+ // TODO: Uncoment once #4945 is merged.
590
+ // Serializer.Fields.TextInput.ControlChars,
591
+ ];
592
+
593
+ Serializer.Fields.Variable = new SerializerTestSuite('Variable');
594
+ Serializer.Fields.Variable.Simple = new SerializerTestCase(
595
+ 'Simple',
596
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
597
+ '<variables>' +
598
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">test</variable>' +
599
+ '</variables>' +
600
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
601
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa">test</field>' +
602
+ '</block>' +
603
+ '</xml>',
604
+ );
605
+ Serializer.Fields.Variable.Types = new SerializerTestCase(
606
+ 'Types',
607
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
608
+ '<variables>' +
609
+ '<variable type="String" id="aaaaaaaaaaaaaaaaaaaa">test</variable>' +
610
+ '<variable type="Number" id="bbbbbbbbbbbbbbbbbbbb">test2</variable>' +
611
+ '<variable type="Colour" id="cccccccccccccccccccc">test3</variable>' +
612
+ '</variables>' +
613
+ '<block type="variables_get_dynamic" id="id******************" x="42" y="42">' +
614
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa" variabletype="String">test</field>' +
615
+ '</block>' +
616
+ '<block type="variables_get_dynamic" id="id2*****************" x="42" y="84">' +
617
+ '<field name="VAR" id="bbbbbbbbbbbbbbbbbbbb" variabletype="Number">test2</field>' +
618
+ '</block>' +
619
+ '<block type="variables_get_dynamic" id="id3*****************" x="42" y="106">' +
620
+ '<field name="VAR" id="cccccccccccccccccccc" variabletype="Colour">test3</field>' +
621
+ '</block>' +
622
+ '</xml>',
623
+ );
624
+ /* eslint-disable no-tabs */
625
+ Serializer.Fields.Variable.Tabs = new SerializerTestCase(
626
+ 'Tabs',
627
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
628
+ '<variables>' +
629
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">line1&amp;#x9line2&amp;#x9line3</variable>' +
630
+ '</variables>' +
631
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
632
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa">line1&amp;#x9line2&amp;#x9line3</field>' +
633
+ '</block>' +
634
+ '</xml>',
635
+ );
636
+ /* eslint-enable no-tabs */
637
+ Serializer.Fields.Variable.Symbols = new SerializerTestCase(
638
+ 'Symbols',
639
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
640
+ '<variables>' +
641
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">~`!@#$%^*()_+-={[}]|\\:;,.?/</variable>' +
642
+ '</variables>' +
643
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
644
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa">~`!@#$%^*()_+-={[}]|\\:;,.?/</field>' +
645
+ '</block>' +
646
+ '</xml>',
647
+ );
648
+ Serializer.Fields.Variable.EscapedSymbols = new SerializerTestCase(
649
+ 'EscapedSymbols',
650
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
651
+ '<variables>' +
652
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">&amp;&lt;&gt;</variable>' +
653
+ '</variables>' +
654
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
655
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa">&amp;&lt;&gt;</field>' +
656
+ '</block>' +
657
+ '</xml>',
658
+ );
659
+ Serializer.Fields.Variable.SingleQuotes = new SerializerTestCase(
660
+ 'SingleQuotes',
661
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
662
+ '<variables>' +
663
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">\'test\'</variable>' +
664
+ '</variables>' +
665
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
666
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa">\'test\'</field>' +
667
+ '</block>' +
668
+ '</xml>',
669
+ );
670
+ Serializer.Fields.Variable.DoubleQuotes = new SerializerTestCase(
671
+ 'DoubleQuotes',
672
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
673
+ '<variables>' +
674
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">"test"</variable>' +
675
+ '</variables>' +
676
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
677
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa">"test"</field>' +
678
+ '</block>' +
679
+ '</xml>',
680
+ );
681
+ Serializer.Fields.Variable.Numbers = new SerializerTestCase(
682
+ 'Numbers',
683
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
684
+ '<variables>' +
685
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">1234567890a123a123a</variable>' +
686
+ '</variables>' +
687
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
688
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa">1234567890a123a123a</field>' +
689
+ '</block>' +
690
+ '</xml>',
691
+ );
692
+ Serializer.Fields.Variable.Emoji = new SerializerTestCase(
693
+ 'Emoji',
694
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
695
+ '<variables>' +
696
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">😀👋🏿👋🏾👋🏽👋🏼👋🏻😀❤❤❤</variable>' +
697
+ '</variables>' +
698
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
699
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa">😀👋🏿👋🏾👋🏽👋🏼👋🏻😀❤❤❤</field>' +
700
+ '</block>' +
701
+ '</xml>',
702
+ );
703
+ Serializer.Fields.Variable.Russian = new SerializerTestCase(
704
+ 'Russian',
705
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
706
+ '<variables>' +
707
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">ты любопытный кот</variable>' +
708
+ '</variables>' +
709
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
710
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa">ты любопытный кот</field>' +
711
+ '</block>' +
712
+ '</xml>',
713
+ );
714
+ Serializer.Fields.Variable.Japanese = new SerializerTestCase(
715
+ 'Japanese',
716
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
717
+ '<variables>' +
718
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">あなたは好奇心旺盛な猫です</variable>' +
719
+ '</variables>' +
720
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
721
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa">あなたは好奇心旺盛な猫です</field>' +
722
+ '</block>' +
723
+ '</xml>',
724
+ );
725
+ Serializer.Fields.Variable.Zalgo = new SerializerTestCase(
726
+ 'Zalgo',
727
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
728
+ '<variables>' +
729
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">z̴̪͈̲̜͕̽̈̀͒͂̓̋̉̍a̸̧̧̜̻̘̤̫̱̲͎̞̻͆̋ļ̸̛̖̜̳͚̖͔̟̈́͂̉̀͑̑͑̎ǵ̸̫̳̽̐̃̑̚̕o̶͇̫͔̮̼̭͕̹̘̬͋̀͆̂̇̋͊̒̽</variable>' +
730
+ '</variables>' +
731
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
732
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa">z̴̪͈̲̜͕̽̈̀͒͂̓̋̉̍a̸̧̧̜̻̘̤̫̱̲͎̞̻͆̋ļ̸̛̖̜̳͚̖͔̟̈́͂̉̀͑̑͑̎ǵ̸̫̳̽̐̃̑̚̕o̶͇̫͔̮̼̭͕̹̘̬͋̀͆̂̇̋͊̒̽</field>' +
733
+ '</block>' +
734
+ '</xml>',
735
+ );
736
+ Serializer.Fields.Variable.ControlChars = new SerializerTestCase(
737
+ 'ControlChars',
738
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
739
+ '<variables>' +
740
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">&#01;&#a1;</variable>' +
741
+ '</variables>' +
742
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
743
+ '<field name="VAR" id="aaaaaaaaaaaaaaaaaaaa">&#01;&#a1;</field>' +
744
+ '</block>' +
745
+ '</xml>',
746
+ );
747
+ Serializer.Fields.Variable.testCases = [
748
+ Serializer.Fields.Variable.Simple,
749
+ Serializer.Fields.Variable.Types,
750
+ Serializer.Fields.Variable.Tabs,
751
+ Serializer.Fields.Variable.Symbols,
752
+ Serializer.Fields.Variable.EscapedSymbols,
753
+ Serializer.Fields.Variable.SingleQuotes,
754
+ Serializer.Fields.Variable.DoubleQuotes,
755
+ Serializer.Fields.Variable.Numbers,
756
+ Serializer.Fields.Variable.Emoji,
757
+ Serializer.Fields.Variable.Russian,
758
+ Serializer.Fields.Variable.Japanese,
759
+ Serializer.Fields.Variable.Zalgo,
760
+ // TODO: Uncoment once #4945 is merged.
761
+ // Serializer.Fields.Variable.ControlChars,
762
+ ];
763
+
764
+ Serializer.Fields.Variable.Id = new SerializerTestSuite('Id');
765
+
766
+ Serializer.Fields.Variable.Id.Length = new SerializerTestSuite('Length');
767
+ Serializer.Fields.Variable.Id.Length.Short = new SerializerTestCase(
768
+ 'Short',
769
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
770
+ '<variables>' +
771
+ '<variable id="id">test</variable>' +
772
+ '</variables>' +
773
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
774
+ '<field name="VAR" id="id">test</field>' +
775
+ '</block>' +
776
+ '</xml>',
777
+ );
778
+ Serializer.Fields.Variable.Id.Length.Long = new SerializerTestCase(
779
+ 'Long',
780
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
781
+ '<variables>' +
782
+ '<variable id="id***********************">test</variable>' +
783
+ '</variables>' +
784
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
785
+ '<field name="VAR" id="id***********************">test</field>' +
786
+ '</block>' +
787
+ '</xml>',
788
+ );
789
+ Serializer.Fields.Variable.Id.Length.testCases = [
790
+ Serializer.Fields.Variable.Id.Length.Short,
791
+ Serializer.Fields.Variable.Id.Length.Long,
792
+ ];
793
+
794
+ Serializer.Fields.Variable.Id.Chars = new SerializerTestSuite('Chars');
795
+ Serializer.Fields.Variable.Id.Chars.Symbols = new SerializerTestCase(
796
+ 'Symbols',
797
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
798
+ '<variables>' +
799
+ '<variable id="!#$%()*+,-./:;=?@[]^">test</variable>' +
800
+ '<variable id="_`{|}~!!!!!!!!!!!!!!">test2</variable>' +
801
+ '</variables>' +
802
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
803
+ '<field name="VAR" id="!#$%()*+,-./:;=?@[]^">test</field>' +
804
+ '</block>' +
805
+ '<block type="variables_get" id="id1*****************" x="42" y="42">' +
806
+ '<field name="VAR" id="_`{|}~!!!!!!!!!!!!!!">test2</field>' +
807
+ '</block>' +
808
+ '</xml>',
809
+ );
810
+ Serializer.Fields.Variable.Id.Chars.Uppercase = new SerializerTestCase(
811
+ 'Uppercase',
812
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
813
+ '<variables>' +
814
+ '<variable id="ABCDEFGHIJKLMNOPQRST">test</variable>' +
815
+ '<variable id="TUVWXYZAAAAAAAAAAAAA">test2</variable>' +
816
+ '</variables>' +
817
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
818
+ '<field name="VAR" id="ABCDEFGHIJKLMNOPQRST">test</field>' +
819
+ '</block>' +
820
+ '<block type="variables_get" id="id1*****************" x="42" y="42">' +
821
+ '<field name="VAR" id="TUVWXYZAAAAAAAAAAAAA">test2</field>' +
822
+ '</block>' +
823
+ '</xml>',
824
+ );
825
+ Serializer.Fields.Variable.Id.Chars.Lowercase = new SerializerTestCase(
826
+ 'Lowercase',
827
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
828
+ '<variables>' +
829
+ '<variable id="abcdefghijklmnopqrst">test</variable>' +
830
+ '<variable id="tuvwxyzaaaaaaaaaaaaa">test2</variable>' +
831
+ '</variables>' +
832
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
833
+ '<field name="VAR" id="abcdefghijklmnopqrst">test</field>' +
834
+ '</block>' +
835
+ '<block type="variables_get" id="id1*****************" x="42" y="42">' +
836
+ '<field name="VAR" id="tuvwxyzaaaaaaaaaaaaa">test2</field>' +
837
+ '</block>' +
838
+ '</xml>',
839
+ );
840
+ Serializer.Fields.Variable.Id.Chars.Numbers = new SerializerTestCase(
841
+ 'Numbers',
842
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
843
+ '<variables>' +
844
+ '<variable id="01234567890000000000">test</variable>' +
845
+ '</variables>' +
846
+ '<block type="variables_get" id="id******************" x="42" y="42">' +
847
+ '<field name="VAR" id="01234567890000000000">test</field>' +
848
+ '</block>' +
849
+ '</xml>',
850
+ );
851
+ Serializer.Fields.Variable.Id.Chars.testCases = [
852
+ Serializer.Fields.Variable.Id.Chars.Symbols,
853
+ Serializer.Fields.Variable.Id.Chars.Uppercase,
854
+ Serializer.Fields.Variable.Id.Chars.Lowercase,
855
+ Serializer.Fields.Variable.Id.Chars.Numbers,
856
+ ];
857
+
858
+ Serializer.Fields.Variable.Id.testSuites = [
859
+ Serializer.Fields.Variable.Id.Length,
860
+ Serializer.Fields.Variable.Id.Chars,
861
+ ];
862
+
863
+ Serializer.Fields.Variable.testSuites = [Serializer.Fields.Variable.Id];
864
+
865
+ Serializer.Fields.testSuites = [
866
+ Serializer.Fields.Checkbox,
867
+ Serializer.Fields.Dropdown,
868
+ Serializer.Fields.LabelSerializable,
869
+ Serializer.Fields.Number,
870
+ Serializer.Fields.TextInput,
871
+ Serializer.Fields.Variable,
872
+ ];
873
+
874
+ Serializer.Icons = new SerializerTestSuite('Icons');
875
+
876
+ Serializer.Icons.Comment = new SerializerTestSuite('Comment');
877
+ Serializer.Icons.Comment.Basic = new SerializerTestCase(
878
+ 'Basic',
879
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
880
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
881
+ '<comment pinned="false" h="80" w="160">test</comment>' +
882
+ '</block>' +
883
+ '</xml>',
884
+ );
885
+
886
+ Serializer.Icons.Comment.Size = new SerializerTestSuite('Size');
887
+ Serializer.Icons.Comment.Size.Different = new SerializerTestCase(
888
+ 'Different',
889
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
890
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
891
+ '<comment pinned="false" h="160" w="80">test</comment>' +
892
+ '</block>' +
893
+ '</xml>',
894
+ );
895
+ Serializer.Icons.Comment.Size.Large = new SerializerTestCase(
896
+ 'Large',
897
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
898
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
899
+ '<comment pinned="false" h="10000" w="10000">test</comment>' +
900
+ '</block>' +
901
+ '</xml>',
902
+ );
903
+ Serializer.Icons.Comment.Size.testCases = [
904
+ Serializer.Icons.Comment.Size.Different,
905
+ Serializer.Icons.Comment.Size.Large,
906
+ ];
907
+
908
+ Serializer.Icons.Comment.Pinned = new SerializerTestSuite('Pinned');
909
+ Serializer.Icons.Comment.Pinned.True = new SerializerTestCase(
910
+ 'True',
911
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
912
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
913
+ '<comment pinned="true" h="80" w="160">test</comment>' +
914
+ '</block>' +
915
+ '</xml>',
916
+ );
917
+ Serializer.Icons.Comment.Pinned.False = new SerializerTestCase(
918
+ 'False',
919
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
920
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
921
+ '<comment pinned="false" h="80" w="160">test</comment>' +
922
+ '</block>' +
923
+ '</xml>',
924
+ );
925
+ Serializer.Icons.Comment.Pinned.testCases = [
926
+ Serializer.Icons.Comment.Pinned.True,
927
+ Serializer.Icons.Comment.Pinned.False,
928
+ ];
929
+
930
+ Serializer.Icons.Comment.Text = new SerializerTestSuite('Text');
931
+ Serializer.Icons.Comment.Text.Symbols = new SerializerTestCase(
932
+ 'Symbols',
933
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
934
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
935
+ '<comment pinned="false" h="80" w="160">~`!@#$%^*()_+-={[}]|\\:;,.?/</comment>' +
936
+ '</block>' +
937
+ '</xml>',
938
+ );
939
+ Serializer.Icons.Comment.Text.EscapedSymbols = new SerializerTestCase(
940
+ 'EscapedSymbols',
941
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
942
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
943
+ '<comment pinned="false" h="80" w="160">&amp;&lt;&gt;</comment>' +
944
+ '</block>' +
945
+ '</xml>',
946
+ );
947
+ Serializer.Icons.Comment.Text.SingleQuotes = new SerializerTestCase(
948
+ 'SingleQuotes',
949
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
950
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
951
+ '<comment pinned="false" h="80" w="160">\'test\'</comment>' +
952
+ '</block>' +
953
+ '</xml>',
954
+ );
955
+ Serializer.Icons.Comment.Text.DoubleQuotes = new SerializerTestCase(
956
+ 'DoubleQuotes',
957
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
958
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
959
+ '<comment pinned="false" h="80" w="160">"test"</comment>' +
960
+ '</block>' +
961
+ '</xml>',
962
+ );
963
+ Serializer.Icons.Comment.Text.Numbers = new SerializerTestCase(
964
+ 'Numbers',
965
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
966
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
967
+ '<comment pinned="false" h="80" w="160">1234567890a123a123a</comment>' +
968
+ '</block>' +
969
+ '</xml>',
970
+ );
971
+ Serializer.Icons.Comment.Text.Emoji = new SerializerTestCase(
972
+ 'Emoji',
973
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
974
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
975
+ '<comment pinned="false" h="80" w="160">😀👋🏿👋🏾👋🏽👋🏼👋🏻😀❤❤❤</comment>' +
976
+ '</block>' +
977
+ '</xml>',
978
+ );
979
+ Serializer.Icons.Comment.Text.Russian = new SerializerTestCase(
980
+ 'Russian',
981
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
982
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
983
+ '<comment pinned="false" h="80" w="160">ты любопытный кот</comment>' +
984
+ '</block>' +
985
+ '</xml>',
986
+ );
987
+ Serializer.Icons.Comment.Text.Japanese = new SerializerTestCase(
988
+ 'Japanese',
989
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
990
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
991
+ '<comment pinned="false" h="80" w="160">あなたは好奇心旺盛な猫です</comment>' +
992
+ '</block>' +
993
+ '</xml>',
994
+ );
995
+ Serializer.Icons.Comment.Text.Zalgo = new SerializerTestCase(
996
+ 'Zalgo',
997
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
998
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
999
+ '<comment pinned="false" h="80" w="160">z̴̪͈̲̜͕̽̈̀͒͂̓̋̉̍a̸̧̧̜̻̘̤̫̱̲͎̞̻͆̋ļ̸̛̖̜̳͚̖͔̟̈́͂̉̀͑̑͑̎ǵ̸̫̳̽̐̃̑̚̕o̶͇̫͔̮̼̭͕̹̘̬͋̀͆̂̇̋͊̒̽</comment>' +
1000
+ '</block>' +
1001
+ '</xml>',
1002
+ );
1003
+ Serializer.Icons.Comment.Text.ControlChars = new SerializerTestCase(
1004
+ 'ControlChars',
1005
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1006
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
1007
+ '<comment pinned="false" h="80" w="160">&#01;&#a1;</comment>' +
1008
+ '</block>' +
1009
+ '</xml>',
1010
+ );
1011
+ Serializer.Icons.Comment.Text.testCases = [
1012
+ Serializer.Icons.Comment.Text.Symbols,
1013
+ Serializer.Icons.Comment.Text.EscapedSymbols,
1014
+ Serializer.Icons.Comment.Text.SingleQuotes,
1015
+ Serializer.Icons.Comment.Text.DoubleQuotes,
1016
+ Serializer.Icons.Comment.Text.Numbers,
1017
+ Serializer.Icons.Comment.Text.Emoji,
1018
+ Serializer.Icons.Comment.Text.Russian,
1019
+ Serializer.Icons.Comment.Text.Japanese,
1020
+ Serializer.Icons.Comment.Text.Zalgo,
1021
+ // TODO: Uncoment once #4945 is merged.
1022
+ // Serializer.Icons.Comment.Text.ControlChars,
1023
+ ];
1024
+
1025
+ Serializer.Icons.Comment.testSuites = [
1026
+ Serializer.Icons.Comment.Size,
1027
+ Serializer.Icons.Comment.Pinned,
1028
+ Serializer.Icons.Comment.Text,
1029
+ ];
1030
+
1031
+ Serializer.Icons.Comment.testCases = [Serializer.Icons.Comment.Basic];
1032
+
1033
+ Serializer.Icons.testSuites = [Serializer.Icons.Comment];
1034
+
1035
+ Serializer.Connections = new SerializerTestSuite('Connections');
1036
+
1037
+ Serializer.Connections.Child = new SerializerTestSuite('Child');
1038
+ Serializer.Connections.Child.Value = new SerializerTestCase(
1039
+ 'Value',
1040
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1041
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
1042
+ '<value name="BOOL">' +
1043
+ '<block type="logic_boolean" id="id2*****************">' +
1044
+ '<field name="BOOL">TRUE</field>' +
1045
+ '</block>' +
1046
+ '</value>' +
1047
+ '</block>' +
1048
+ '</xml>',
1049
+ );
1050
+ Serializer.Connections.Child.Statement = new SerializerTestCase(
1051
+ 'Statement',
1052
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1053
+ '<block type="controls_repeat_ext" id="id******************" x="42" y="42">' +
1054
+ '<statement name="DO">' +
1055
+ '<block type="text_print" id="id2*****************"></block>' +
1056
+ '</statement>' +
1057
+ '</block>' +
1058
+ '</xml>',
1059
+ );
1060
+ Serializer.Connections.Child.Next = new SerializerTestCase(
1061
+ 'Next',
1062
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1063
+ '<block type="text_print" id="id******************" x="42" y="42">' +
1064
+ '<next>' +
1065
+ '<block type="text_print" id="id2*****************"></block>' +
1066
+ '</next>' +
1067
+ '</block>' +
1068
+ '</xml>',
1069
+ );
1070
+ Serializer.Connections.Child.Row = new SerializerTestCase(
1071
+ 'Row',
1072
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1073
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
1074
+ '<value name="BOOL">' +
1075
+ '<block type="logic_negate" id="id2*****************">' +
1076
+ '<value name="BOOL">' +
1077
+ '<block type="logic_boolean" id="id3*****************">' +
1078
+ '<field name="BOOL">TRUE</field>' +
1079
+ '</block>' +
1080
+ '</value>' +
1081
+ '</block>' +
1082
+ '</value>' +
1083
+ '</block>' +
1084
+ '</xml>',
1085
+ );
1086
+ Serializer.Connections.Child.Nested = new SerializerTestCase(
1087
+ 'Nested',
1088
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1089
+ '<block type="controls_repeat_ext" id="id******************" x="42" y="42">' +
1090
+ '<statement name="DO">' +
1091
+ '<block type="controls_repeat_ext" id="id2*****************">' +
1092
+ '<statement name="DO">' +
1093
+ '<block type="text_print" id="id3*****************"></block>' +
1094
+ '</statement>' +
1095
+ '</block>' +
1096
+ '</statement>' +
1097
+ '</block>' +
1098
+ '</xml>',
1099
+ );
1100
+ Serializer.Connections.Child.Stack = new SerializerTestCase(
1101
+ 'Stack',
1102
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1103
+ '<block type="text_print" id="id******************" x="42" y="42">' +
1104
+ '<next>' +
1105
+ '<block type="text_print" id="id2*****************">' +
1106
+ '<next>' +
1107
+ '<block type="text_print" id="id3*****************"></block>' +
1108
+ '</next>' +
1109
+ '</block>' +
1110
+ '</next>' +
1111
+ '</block>' +
1112
+ '</xml>',
1113
+ );
1114
+ Serializer.Connections.Child.testCases = [
1115
+ Serializer.Connections.Child.Value,
1116
+ Serializer.Connections.Child.Statement,
1117
+ Serializer.Connections.Child.Next,
1118
+ Serializer.Connections.Child.Row,
1119
+ Serializer.Connections.Child.Nested,
1120
+ Serializer.Connections.Child.Stack,
1121
+ ];
1122
+
1123
+ Serializer.Connections.Shadow = new SerializerTestSuite('Shadow');
1124
+ Serializer.Connections.Shadow.Value = new SerializerTestCase(
1125
+ 'Value',
1126
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1127
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
1128
+ '<value name="BOOL">' +
1129
+ '<shadow type="logic_boolean" id="id2*****************">' +
1130
+ '<field name="BOOL">TRUE</field>' +
1131
+ '</shadow>' +
1132
+ '</value>' +
1133
+ '</block>' +
1134
+ '</xml>',
1135
+ );
1136
+ Serializer.Connections.Shadow.Statement = new SerializerTestCase(
1137
+ 'Statement',
1138
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1139
+ '<block type="controls_repeat_ext" id="id******************" x="42" y="42">' +
1140
+ '<statement name="DO">' +
1141
+ '<shadow type="text_print" id="id2*****************"></shadow>' +
1142
+ '</statement>' +
1143
+ '</block>' +
1144
+ '</xml>',
1145
+ );
1146
+ Serializer.Connections.Shadow.Next = new SerializerTestCase(
1147
+ 'Next',
1148
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1149
+ '<block type="text_print" id="id******************" x="42" y="42">' +
1150
+ '<next>' +
1151
+ '<shadow type="text_print" id="id2*****************"></shadow>' +
1152
+ '</next>' +
1153
+ '</block>' +
1154
+ '</xml>',
1155
+ );
1156
+ Serializer.Connections.Shadow.Row = new SerializerTestCase(
1157
+ 'Row',
1158
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1159
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
1160
+ '<value name="BOOL">' +
1161
+ '<shadow type="logic_negate" id="id2*****************">' +
1162
+ '<value name="BOOL">' +
1163
+ '<shadow type="logic_boolean" id="id3*****************">' +
1164
+ '<field name="BOOL">TRUE</field>' +
1165
+ '</shadow>' +
1166
+ '</value>' +
1167
+ '</shadow>' +
1168
+ '</value>' +
1169
+ '</block>' +
1170
+ '</xml>',
1171
+ );
1172
+ Serializer.Connections.Shadow.Nested = new SerializerTestCase(
1173
+ 'Nested',
1174
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1175
+ '<block type="controls_repeat_ext" id="id******************" x="42" y="42">' +
1176
+ '<statement name="DO">' +
1177
+ '<shadow type="controls_repeat_ext" id="id2*****************">' +
1178
+ '<statement name="DO">' +
1179
+ '<shadow type="text_print" id="id3*****************"></shadow>' +
1180
+ '</statement>' +
1181
+ '</shadow>' +
1182
+ '</statement>' +
1183
+ '</block>' +
1184
+ '</xml>',
1185
+ );
1186
+ Serializer.Connections.Shadow.Stack = new SerializerTestCase(
1187
+ 'Stack',
1188
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1189
+ '<block type="text_print" id="id******************" x="42" y="42">' +
1190
+ '<next>' +
1191
+ '<shadow type="text_print" id="id2*****************">' +
1192
+ '<next>' +
1193
+ '<shadow type="text_print" id="id3*****************"></shadow>' +
1194
+ '</next>' +
1195
+ '</shadow>' +
1196
+ '</next>' +
1197
+ '</block>' +
1198
+ '</xml>',
1199
+ );
1200
+ Serializer.Connections.Shadow.testCases = [
1201
+ Serializer.Connections.Shadow.Value,
1202
+ Serializer.Connections.Shadow.Statement,
1203
+ Serializer.Connections.Shadow.Next,
1204
+ Serializer.Connections.Shadow.Row,
1205
+ Serializer.Connections.Shadow.Nested,
1206
+ Serializer.Connections.Shadow.Stack,
1207
+ ];
1208
+
1209
+ Serializer.Connections.OverwrittenShadow = new SerializerTestSuite(
1210
+ 'OverwrittenShadow',
1211
+ );
1212
+ Serializer.Connections.OverwrittenShadow.Value = new SerializerTestCase(
1213
+ 'Value',
1214
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1215
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
1216
+ '<value name="BOOL">' +
1217
+ '<shadow type="logic_boolean" id="id2*****************">' +
1218
+ '<field name="BOOL">TRUE</field>' +
1219
+ '</shadow>' +
1220
+ '<block type="logic_boolean" id="id3*****************">' +
1221
+ '<field name="BOOL">TRUE</field>' +
1222
+ '</block>' +
1223
+ '</value>' +
1224
+ '</block>' +
1225
+ '</xml>',
1226
+ );
1227
+ Serializer.Connections.OverwrittenShadow.Statement = new SerializerTestCase(
1228
+ 'Statement',
1229
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1230
+ '<block type="controls_repeat_ext" id="id******************" x="42" y="42">' +
1231
+ '<statement name="DO">' +
1232
+ '<shadow type="text_print" id="id2*****************"></shadow>' +
1233
+ '<block type="text_print" id="id3*****************"></block>' +
1234
+ '</statement>' +
1235
+ '</block>' +
1236
+ '</xml>',
1237
+ );
1238
+ Serializer.Connections.OverwrittenShadow.Next = new SerializerTestCase(
1239
+ 'Next',
1240
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1241
+ '<block type="text_print" id="id******************" x="42" y="42">' +
1242
+ '<next>' +
1243
+ '<block type="text_print" id="id2*****************"></block>' +
1244
+ '<shadow type="text_print" id="id3*****************"></shadow>' +
1245
+ '</next>' +
1246
+ '</block>' +
1247
+ '</xml>',
1248
+ );
1249
+ Serializer.Connections.OverwrittenShadow.Row = new SerializerTestCase(
1250
+ 'Row',
1251
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1252
+ '<block type="logic_negate" id="id******************" x="42" y="42">' +
1253
+ '<value name="BOOL">' +
1254
+ '<shadow type="logic_negate" id="id2*****************">' +
1255
+ '<value name="BOOL">' +
1256
+ '<shadow type="logic_boolean" id="id3*****************">' +
1257
+ '<field name="BOOL">TRUE</field>' +
1258
+ '</shadow>' +
1259
+ '</value>' +
1260
+ '</shadow>' +
1261
+ '<block type="logic_boolean" id="id4*****************">' +
1262
+ '<field name="BOOL">TRUE</field>' +
1263
+ '</block>' +
1264
+ '</value>' +
1265
+ '</block>' +
1266
+ '</xml>',
1267
+ );
1268
+ Serializer.Connections.OverwrittenShadow.Nested = new SerializerTestCase(
1269
+ 'Nested',
1270
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1271
+ '<block type="controls_repeat_ext" id="id******************" x="42" y="42">' +
1272
+ '<statement name="DO">' +
1273
+ '<shadow type="controls_repeat_ext" id="id2*****************">' +
1274
+ '<statement name="DO">' +
1275
+ '<shadow type="text_print" id="id3*****************"></shadow>' +
1276
+ '</statement>' +
1277
+ '</shadow>' +
1278
+ '<block type="text_print" id="id4*****************"></block>' +
1279
+ '</statement>' +
1280
+ '</block>' +
1281
+ '</xml>',
1282
+ );
1283
+ Serializer.Connections.OverwrittenShadow.Stack = new SerializerTestCase(
1284
+ 'Stack',
1285
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1286
+ '<block type="text_print" id="id******************" x="42" y="42">' +
1287
+ '<next>' +
1288
+ '<block type="text_print" id="id2*****************"></block>' +
1289
+ '<shadow type="text_print" id="id3*****************">' +
1290
+ '<next>' +
1291
+ '<shadow type="text_print" id="id4*****************"></shadow>' +
1292
+ '</next>' +
1293
+ '</shadow>' +
1294
+ '</next>' +
1295
+ '</block>' +
1296
+ '</xml>',
1297
+ );
1298
+ Serializer.Connections.OverwrittenShadow.testCases = [
1299
+ Serializer.Connections.OverwrittenShadow.Value,
1300
+ Serializer.Connections.OverwrittenShadow.Statement,
1301
+ Serializer.Connections.OverwrittenShadow.Next,
1302
+ Serializer.Connections.OverwrittenShadow.Row,
1303
+ Serializer.Connections.OverwrittenShadow.Nested,
1304
+ Serializer.Connections.OverwrittenShadow.Stack,
1305
+ ];
1306
+
1307
+ Serializer.Connections.testSuites = [
1308
+ Serializer.Connections.Child,
1309
+ Serializer.Connections.Shadow,
1310
+ Serializer.Connections.OverwrittenShadow,
1311
+ ];
1312
+
1313
+ Serializer.Mutations = new SerializerTestSuite('Mutations');
1314
+ Serializer.Mutations.ListGetIndex = new SerializerTestCase(
1315
+ 'ListGetIndex',
1316
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1317
+ '<block type="lists_getIndex" id="id" x="42" y="42">' +
1318
+ '<mutation statement="true" at="false"></mutation>' +
1319
+ '<field name="MODE">REMOVE</field>' +
1320
+ '<field name="WHERE">LAST</field>' +
1321
+ '</block>' +
1322
+ '</xml>',
1323
+ );
1324
+ Serializer.Mutations.ListSetIndex = new SerializerTestCase(
1325
+ 'ListSetIndex',
1326
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1327
+ '<block type="lists_setIndex" id="id" x="42" y="42">' +
1328
+ '<mutation at="false"></mutation>' +
1329
+ '<field name="MODE">SET</field>' +
1330
+ '<field name="WHERE">LAST</field>' +
1331
+ '</block>' +
1332
+ '</xml>',
1333
+ );
1334
+ Serializer.Mutations.ListGetSublist = new SerializerTestCase(
1335
+ 'ListGetSublist',
1336
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1337
+ '<block type="lists_getSublist" id="id" x="42" y="42">' +
1338
+ '<mutation at1="false" at2="false"></mutation>' +
1339
+ '<field name="WHERE1">FIRST</field>' +
1340
+ '<field name="WHERE2">LAST</field>' +
1341
+ '</block>' +
1342
+ '</xml>',
1343
+ );
1344
+ Serializer.Mutations.MathNumberProperty = new SerializerTestCase(
1345
+ 'MathNumberProperty',
1346
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1347
+ '<block type="math_number_property" id="id" x="42" y="42">' +
1348
+ '<mutation divisor_input="true"></mutation>' +
1349
+ '<field name="PROPERTY">DIVISIBLE_BY</field>' +
1350
+ '</block>' +
1351
+ '</xml>',
1352
+ );
1353
+ Serializer.Mutations.MathOnList = new SerializerTestCase(
1354
+ 'MathOnList',
1355
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1356
+ '<block type="math_on_list" id="id" x="42" y="42">' +
1357
+ '<mutation op="MODE"></mutation>' +
1358
+ '<field name="OP">MODE</field>' +
1359
+ '</block>' +
1360
+ '</xml>',
1361
+ );
1362
+ Serializer.Mutations.TextJoin = new SerializerTestCase(
1363
+ 'TextJoin',
1364
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1365
+ '<block type="text_join" id="id" x="42" y="42">' +
1366
+ '<mutation items="10"></mutation>' +
1367
+ '</block>' +
1368
+ '</xml>',
1369
+ );
1370
+ Serializer.Mutations.TextCharAt = new SerializerTestCase(
1371
+ 'TextCharAt',
1372
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1373
+ '<block type="text_charAt" id="id" x="42" y="42">' +
1374
+ '<mutation at="false"></mutation>' +
1375
+ '<field name="WHERE">FIRST</field>' +
1376
+ '</block>' +
1377
+ '</xml>',
1378
+ );
1379
+ Serializer.Mutations.TextGetSubstring = new SerializerTestCase(
1380
+ 'TextGetSubstring',
1381
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1382
+ '<block type="text_getSubstring" id="id" x="42" y="42">' +
1383
+ '<mutation at1="true" at2="false"></mutation>' +
1384
+ '<field name="WHERE1">FROM_START</field>' +
1385
+ '<field name="WHERE2">LAST</field>' +
1386
+ '</block>' +
1387
+ '</xml>',
1388
+ );
1389
+ Serializer.Mutations.TextPromptExt = new SerializerTestCase(
1390
+ 'TextPromptExt',
1391
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1392
+ '<block type="text_prompt_ext" id="id" x="42" y="42">' +
1393
+ '<mutation type="NUMBER"></mutation>' +
1394
+ '<field name="TYPE">NUMBER</field>' +
1395
+ '</block>' +
1396
+ '</xml>',
1397
+ );
1398
+ Serializer.Mutations.TextPrompt = new SerializerTestCase(
1399
+ 'TextPrompt',
1400
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1401
+ '<block type="text_prompt" id="id" x="42" y="42">' +
1402
+ '<mutation type="NUMBER"></mutation>' +
1403
+ '<field name="TYPE">NUMBER</field>' +
1404
+ '<field name="TEXT"></field>' +
1405
+ '</block>' +
1406
+ '</xml>',
1407
+ );
1408
+ Serializer.Mutations.testCases = [
1409
+ Serializer.Mutations.ListGetIndex,
1410
+ Serializer.Mutations.ListSetIndex,
1411
+ Serializer.Mutations.ListGetSublist,
1412
+ Serializer.Mutations.MathNumberProperty,
1413
+ Serializer.Mutations.MathOnList,
1414
+ Serializer.Mutations.TextJoin,
1415
+ Serializer.Mutations.TextCharAt,
1416
+ Serializer.Mutations.TextGetSubstring,
1417
+ Serializer.Mutations.TextPromptExt,
1418
+ Serializer.Mutations.TextPrompt,
1419
+ ];
1420
+
1421
+ Serializer.Mutations.ControlsIf = new SerializerTestSuite('ControlsIf');
1422
+ Serializer.Mutations.ControlsIf.NoMutation = new SerializerTestCase(
1423
+ 'NoMutation',
1424
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1425
+ '<block type="controls_if" id="id******************" x="42" y="42"></block>' +
1426
+ '</xml>',
1427
+ );
1428
+ Serializer.Mutations.ControlsIf.ElseIfAndElse = new SerializerTestCase(
1429
+ 'ElseIfAndElse',
1430
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1431
+ '<block type="controls_if" id="id******************" x="42" y="42">' +
1432
+ '<mutation elseif="1" else="1"></mutation>' +
1433
+ '</block>' +
1434
+ '</xml>',
1435
+ );
1436
+ Serializer.Mutations.ControlsIf.MultipleElseIfs = new SerializerTestCase(
1437
+ 'MultipleElseIfs',
1438
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1439
+ '<block type="controls_if" id="id******************" x="42" y="42">' +
1440
+ '<mutation elseif="3"></mutation>' +
1441
+ '</block>' +
1442
+ '</xml>',
1443
+ );
1444
+ Serializer.Mutations.ControlsIf.MutlipleElseIfsAndElse = new SerializerTestCase(
1445
+ 'MutlipleElseIfsAndElse',
1446
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1447
+ '<block type="controls_if" id="id******************" x="42" y="42">' +
1448
+ '<mutation elseif="3" else="1"></mutation>' +
1449
+ '</block>' +
1450
+ '</xml>',
1451
+ );
1452
+ Serializer.Mutations.ControlsIf.testCases = [
1453
+ Serializer.Mutations.ControlsIf.NoMutation,
1454
+ Serializer.Mutations.ControlsIf.ElseIfAndElse,
1455
+ Serializer.Mutations.ControlsIf.MultipleElseIfs,
1456
+ Serializer.Mutations.ControlsIf.MutlipleElseIfsAndElse,
1457
+ ];
1458
+
1459
+ Serializer.Mutations.ControlsIf.ElseIf = new SerializerTestSuite('ElseIf');
1460
+ Serializer.Mutations.ControlsIf.ElseIf.NoChild = new SerializerTestCase(
1461
+ 'NoChild',
1462
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1463
+ '<block type="controls_if" id="id******************" x="42" y="42">' +
1464
+ '<mutation elseif="1"></mutation>' +
1465
+ '</block>' +
1466
+ '</xml>',
1467
+ );
1468
+ Serializer.Mutations.ControlsIf.ElseIf.Child = new SerializerTestCase(
1469
+ 'Child',
1470
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1471
+ '<block type="controls_if" id="id******************" x="42" y="42">' +
1472
+ '<mutation elseif="1"></mutation>' +
1473
+ '<statement name="DO1">' +
1474
+ '<block type="text_print" id="id2*****************"></block>' +
1475
+ '</statement>' +
1476
+ '</block>' +
1477
+ '</xml>',
1478
+ );
1479
+ Serializer.Mutations.ControlsIf.ElseIf.Shadow = new SerializerTestCase(
1480
+ 'Shadow',
1481
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1482
+ '<block type="controls_if" id="id******************" x="42" y="42">' +
1483
+ '<mutation elseif="1"></mutation>' +
1484
+ '<statement name="DO1">' +
1485
+ '<shadow type="text_print" id="id2*****************"></shadow>' +
1486
+ '</statement>' +
1487
+ '</block>' +
1488
+ '</xml>',
1489
+ );
1490
+ Serializer.Mutations.ControlsIf.ElseIf.OverwrittenShadow =
1491
+ new SerializerTestCase(
1492
+ 'OverwrittenShadow',
1493
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1494
+ '<block type="controls_if" id="id******************" x="42" y="42">' +
1495
+ '<mutation elseif="1"></mutation>' +
1496
+ '<statement name="DO1">' +
1497
+ '<shadow type="text_print" id="id2*****************"></shadow>' +
1498
+ '<block type="text_print" id="id3*****************"></block>' +
1499
+ '</statement>' +
1500
+ '</block>' +
1501
+ '</xml>',
1502
+ );
1503
+ Serializer.Mutations.ControlsIf.ElseIf.testCases = [
1504
+ Serializer.Mutations.ControlsIf.ElseIf.NoChild,
1505
+ Serializer.Mutations.ControlsIf.ElseIf.Child,
1506
+ Serializer.Mutations.ControlsIf.ElseIf.Shadow,
1507
+ Serializer.Mutations.ControlsIf.ElseIf.OverwrittenShadow,
1508
+ ];
1509
+
1510
+ Serializer.Mutations.ControlsIf.Else = new SerializerTestSuite('Else');
1511
+ Serializer.Mutations.ControlsIf.Else.NoChild = new SerializerTestCase(
1512
+ 'NoChild',
1513
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1514
+ '<block type="controls_if" id="id******************" x="42" y="42">' +
1515
+ '<mutation else="1"></mutation>' +
1516
+ '</block>' +
1517
+ '</xml>',
1518
+ );
1519
+ Serializer.Mutations.ControlsIf.Else.Child = new SerializerTestCase(
1520
+ 'Child',
1521
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1522
+ '<block type="controls_if" id="id******************" x="42" y="42">' +
1523
+ '<mutation else="1"></mutation>' +
1524
+ '<statement name="ELSE">' +
1525
+ '<block type="text_print" id="id2*****************"></block>' +
1526
+ '</statement>' +
1527
+ '</block>' +
1528
+ '</xml>',
1529
+ );
1530
+ Serializer.Mutations.ControlsIf.Else.Shadow = new SerializerTestCase(
1531
+ 'Shadow',
1532
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1533
+ '<block type="controls_if" id="id******************" x="42" y="42">' +
1534
+ '<mutation else="1"></mutation>' +
1535
+ '<statement name="ELSE">' +
1536
+ '<shadow type="text_print" id="id2*****************"></shadow>' +
1537
+ '</statement>' +
1538
+ '</block>' +
1539
+ '</xml>',
1540
+ );
1541
+ Serializer.Mutations.ControlsIf.Else.OverwrittenShadow = new SerializerTestCase(
1542
+ 'OverwrittenShadow',
1543
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1544
+ '<block type="controls_if" id="id******************" x="42" y="42">' +
1545
+ '<mutation else="1"></mutation>' +
1546
+ '<statement name="ELSE">' +
1547
+ '<shadow type="text_print" id="id2*****************"></shadow>' +
1548
+ '<block type="text_print" id="id3*****************"></block>' +
1549
+ '</statement>' +
1550
+ '</block>' +
1551
+ '</xml>',
1552
+ );
1553
+ Serializer.Mutations.ControlsIf.Else.testCases = [
1554
+ Serializer.Mutations.ControlsIf.Else.NoChild,
1555
+ Serializer.Mutations.ControlsIf.Else.Child,
1556
+ Serializer.Mutations.ControlsIf.Else.Shadow,
1557
+ Serializer.Mutations.ControlsIf.Else.OverwrittenShadow,
1558
+ ];
1559
+
1560
+ Serializer.Mutations.ControlsIf.testSuites = [
1561
+ Serializer.Mutations.ControlsIf.ElseIf,
1562
+ Serializer.Mutations.ControlsIf.Else,
1563
+ ];
1564
+
1565
+ Serializer.Mutations.ListCreate = new SerializerTestSuite('ListCreate');
1566
+ Serializer.Mutations.ListCreate.Default = new SerializerTestCase(
1567
+ 'Default',
1568
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1569
+ '<block type="lists_create_with" id="id******************" x="42" y="42">' +
1570
+ '<mutation items="3"></mutation>' +
1571
+ '</block>' +
1572
+ '</xml>',
1573
+ );
1574
+ Serializer.Mutations.ListCreate.ZeroInputs = new SerializerTestCase(
1575
+ 'ZeroInputs',
1576
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1577
+ '<block type="lists_create_with" id="id******************" x="42" y="42">' +
1578
+ '<mutation items="0"></mutation>' +
1579
+ '</block>' +
1580
+ '</xml>',
1581
+ );
1582
+ Serializer.Mutations.ListCreate.MultipleInputs = new SerializerTestCase(
1583
+ 'MultipleInputs',
1584
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1585
+ '<block type="lists_create_with" id="id******************" x="42" y="42">' +
1586
+ '<mutation items="10"></mutation>' +
1587
+ '</block>' +
1588
+ '</xml>',
1589
+ );
1590
+ Serializer.Mutations.ListCreate.testCases = [
1591
+ Serializer.Mutations.ListCreate.Default,
1592
+ Serializer.Mutations.ListCreate.ZeroInputs,
1593
+ Serializer.Mutations.ListCreate.MultipleInputs,
1594
+ ];
1595
+
1596
+ Serializer.Mutations.ListCreate.OneInput = new SerializerTestSuite('OneIput');
1597
+ Serializer.Mutations.ListCreate.OneInput.NoChild = new SerializerTestCase(
1598
+ 'NoChild',
1599
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1600
+ '<block type="lists_create_with" id="id******************" x="42" y="42">' +
1601
+ '<mutation items="1"></mutation>' +
1602
+ '</block>' +
1603
+ '</xml>',
1604
+ );
1605
+ Serializer.Mutations.ListCreate.OneInput.Child = new SerializerTestCase(
1606
+ 'Child',
1607
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1608
+ '<block type="lists_create_with" id="id******************" x="42" y="42">' +
1609
+ '<mutation items="1"></mutation>' +
1610
+ '<value name="ADD0">' +
1611
+ '<block type="math_random_float" id="id2*****************"></block>' +
1612
+ '</value>' +
1613
+ '</block>' +
1614
+ '</xml>',
1615
+ );
1616
+ Serializer.Mutations.ListCreate.OneInput.Shadow = new SerializerTestCase(
1617
+ 'Shadow',
1618
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1619
+ '<block type="lists_create_with" id="id******************" x="42" y="42">' +
1620
+ '<mutation items="1"></mutation>' +
1621
+ '<value name="ADD0">' +
1622
+ '<shadow type="math_random_float" id="id2*****************"></shadow>' +
1623
+ '</value>' +
1624
+ '</block>' +
1625
+ '</xml>',
1626
+ );
1627
+ Serializer.Mutations.ListCreate.OneInput.OverwrittenShadow =
1628
+ new SerializerTestCase(
1629
+ 'OverwrittenShadow',
1630
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1631
+ '<block type="lists_create_with" id="id******************" x="42" y="42">' +
1632
+ '<mutation items="1"></mutation>' +
1633
+ '<value name="ADD0">' +
1634
+ '<shadow type="math_random_float" id="id2*****************"></shadow>' +
1635
+ '<block type="math_random_float" id="id3*****************"></block>' +
1636
+ '</value>' +
1637
+ '</block>' +
1638
+ '</xml>',
1639
+ );
1640
+ Serializer.Mutations.ListCreate.OneInput.testCases = [
1641
+ Serializer.Mutations.ListCreate.OneInput.NoChild,
1642
+ Serializer.Mutations.ListCreate.OneInput.Child,
1643
+ Serializer.Mutations.ListCreate.OneInput.Shadow,
1644
+ Serializer.Mutations.ListCreate.OneInput.OverwrittenShadow,
1645
+ ];
1646
+
1647
+ Serializer.Mutations.ListCreate.testSuites = [
1648
+ Serializer.Mutations.ListCreate.OneInput,
1649
+ ];
1650
+
1651
+ Serializer.Mutations.Procedure = new SerializerTestSuite('Procedure');
1652
+ Serializer.Mutations.Procedure.NoMutation = new SerializerTestCase(
1653
+ 'NoMutation',
1654
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1655
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1656
+ '<field name="NAME">do something</field>' +
1657
+ '</block>' +
1658
+ '</xml>',
1659
+ );
1660
+ Serializer.Mutations.Procedure.Variables = new SerializerTestCase(
1661
+ 'Variables',
1662
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1663
+ '<variables>' +
1664
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">x</variable>' +
1665
+ '<variable id="bbbbbbbbbbbbbbbbbbbb">y</variable>' +
1666
+ '<variable id="cccccccccccccccccccc">z</variable>' +
1667
+ '</variables>' +
1668
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1669
+ '<mutation>' +
1670
+ '<arg name="x" varid="aaaaaaaaaaaaaaaaaaaa"></arg>' +
1671
+ '<arg name="y" varid="bbbbbbbbbbbbbbbbbbbb"></arg>' +
1672
+ '<arg name="z" varid="cccccccccccccccccccc"></arg>' +
1673
+ '</mutation>' +
1674
+ '<field name="NAME">do something</field>' +
1675
+ '</block>' +
1676
+ '</xml>',
1677
+ );
1678
+ Serializer.Mutations.Procedure.NoStatements = new SerializerTestCase(
1679
+ 'NoStatements',
1680
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1681
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1682
+ '<mutation statements="false"></mutation>' +
1683
+ '<field name="NAME">do something</field>' +
1684
+ '</block>' +
1685
+ '</xml>',
1686
+ );
1687
+ Serializer.Mutations.Procedure.IfReturn = new SerializerTestCase(
1688
+ 'IfReturn',
1689
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1690
+ '<block type="procedures_defnoreturn" id="id" x="42" y="42">' +
1691
+ '<field name="NAME">do something</field>' +
1692
+ '<statement name="STACK">' +
1693
+ '<block type="procedures_ifreturn" id="id2">' +
1694
+ '<mutation value="0"></mutation>' +
1695
+ '</block>' +
1696
+ '</statement>' +
1697
+ '</block>' +
1698
+ '</xml>',
1699
+ );
1700
+ Serializer.Mutations.Procedure.Caller = new SerializerTestCase(
1701
+ 'Caller',
1702
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1703
+ '<variables>' +
1704
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">x</variable>' +
1705
+ '<variable id="bbbbbbbbbbbbbbbbbbbb">y</variable>' +
1706
+ '</variables>' +
1707
+ '<block type="procedures_defreturn" id="id2*****************" x="42" y="42">' +
1708
+ '<mutation>' +
1709
+ '<arg name="x" varid="aaaaaaaaaaaaaaaaaaaa"></arg>' +
1710
+ '<arg name="y" varid="bbbbbbbbbbbbbbbbbbbb"></arg>' +
1711
+ '</mutation>' +
1712
+ '<field name="NAME">do something</field>' +
1713
+ '</block>' +
1714
+ '<block type="procedures_callreturn" id="id******************" x="52" y="52">' +
1715
+ '<mutation name="do something">' +
1716
+ '<arg name="x"></arg>' +
1717
+ '<arg name="y"></arg>' +
1718
+ '</mutation>' +
1719
+ '</block>' +
1720
+ '</xml>',
1721
+ );
1722
+ Serializer.Mutations.Procedure.CollapsedProceduresCallreturn =
1723
+ new SerializerTestCase(
1724
+ 'CollapsedProceduresCallreturn',
1725
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1726
+ '<variables>' +
1727
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">x</variable>' +
1728
+ '</variables>' +
1729
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1730
+ '<mutation>' +
1731
+ '<arg name="x" varid="aaaaaaaaaaaaaaaaaaaa"></arg>' +
1732
+ '</mutation>' +
1733
+ '<field name="NAME">do something</field>' +
1734
+ '<comment pinned="false" h="80" w="160">Describe this function...</comment>' +
1735
+ '</block>' +
1736
+ '<block type="procedures_callreturn" id="id1*****************" collapsed="true" x="52" y="52">' +
1737
+ '<mutation name="do something">' +
1738
+ '<arg name="x"></arg>' +
1739
+ '</mutation>' +
1740
+ '</block>' +
1741
+ '</xml>',
1742
+ );
1743
+ Serializer.Mutations.Procedure.CollapsedProceduresCallnoreturn =
1744
+ new SerializerTestCase(
1745
+ 'CollapsedProceduresCallnoreturn',
1746
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1747
+ '<variables>' +
1748
+ '<variable id="aaaaaaaaaaaaaaaaaaaa">x</variable>' +
1749
+ '</variables>' +
1750
+ '<block type="procedures_defnoreturn" id="id******************" x="42" y="42">' +
1751
+ '<mutation>' +
1752
+ '<arg name="x" varid="aaaaaaaaaaaaaaaaaaaa"></arg>' +
1753
+ '</mutation>' +
1754
+ '<field name="NAME">do something</field>' +
1755
+ '<comment pinned="false" h="80" w="160">Describe this function...</comment>' +
1756
+ '</block>' +
1757
+ '<block type="procedures_callnoreturn" id="id1*****************" collapsed="true" x="52" y="52">' +
1758
+ '<mutation name="do something">' +
1759
+ '<arg name="x"></arg>' +
1760
+ '</mutation>' +
1761
+ '</block>' +
1762
+ '</xml>',
1763
+ );
1764
+ Serializer.Mutations.Procedure.testCases = [
1765
+ Serializer.Mutations.Procedure.NoMutation,
1766
+ Serializer.Mutations.Procedure.Variables,
1767
+ Serializer.Mutations.Procedure.NoStatements,
1768
+ Serializer.Mutations.Procedure.IfReturn,
1769
+ Serializer.Mutations.Procedure.Caller,
1770
+ Serializer.Mutations.Procedure.CollapsedProceduresCallreturn,
1771
+ Serializer.Mutations.Procedure.CollapsedProceduresCallnoreturn,
1772
+ ];
1773
+
1774
+ Serializer.Mutations.Procedure.Names = new SerializerTestSuite('Names');
1775
+ Serializer.Mutations.Procedure.Names.Symbols = new SerializerTestCase(
1776
+ 'Symbols',
1777
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1778
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1779
+ '<field name="NAME">~`!@#$%^*()_+-={[}]|\\:;,.?/</field>' +
1780
+ '</block>' +
1781
+ '</xml>',
1782
+ );
1783
+ Serializer.Mutations.Procedure.Names.EscapedSymbols = new SerializerTestCase(
1784
+ 'EscapedSymbols',
1785
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1786
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1787
+ '<field name="NAME">&amp;&lt;&gt;</field>' +
1788
+ '</block>' +
1789
+ '</xml>',
1790
+ );
1791
+ Serializer.Mutations.Procedure.Names.SingleQuotes = new SerializerTestCase(
1792
+ 'SingleQuotes',
1793
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1794
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1795
+ '<field name="NAME">\'test\'</field>' +
1796
+ '</block>' +
1797
+ '</xml>',
1798
+ );
1799
+ Serializer.Mutations.Procedure.Names.DoubleQuotes = new SerializerTestCase(
1800
+ 'DoubleQuotes',
1801
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1802
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1803
+ '<field name="NAME">"test"</field>' +
1804
+ '</block>' +
1805
+ '</xml>',
1806
+ );
1807
+ Serializer.Mutations.Procedure.Names.Numbers = new SerializerTestCase(
1808
+ 'Numbers',
1809
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1810
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1811
+ '<field name="NAME">1234567890a123a123a</field>' +
1812
+ '</block>' +
1813
+ '</xml>',
1814
+ );
1815
+ Serializer.Mutations.Procedure.Names.Emoji = new SerializerTestCase(
1816
+ 'Emoji',
1817
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1818
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1819
+ '<field name="NAME">😀👋🏿👋🏾👋🏽👋🏼👋🏻😀❤❤❤</field>' +
1820
+ '</block>' +
1821
+ '</xml>',
1822
+ );
1823
+ Serializer.Mutations.Procedure.Names.Russian = new SerializerTestCase(
1824
+ 'Russian',
1825
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1826
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1827
+ '<field name="NAME">ты любопытный кот</field>' +
1828
+ '</block>' +
1829
+ '</xml>',
1830
+ );
1831
+ Serializer.Mutations.Procedure.Names.Japanese = new SerializerTestCase(
1832
+ 'Japanese',
1833
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1834
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1835
+ '<field name="NAME">あなたは好奇心旺盛な猫です</field>' +
1836
+ '</block>' +
1837
+ '</xml>',
1838
+ );
1839
+ Serializer.Mutations.Procedure.Names.Zalgo = new SerializerTestCase(
1840
+ 'Zalgo',
1841
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1842
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1843
+ '<field name="NAME">z̴̪͈̲̜͕̽̈̀͒͂̓̋̉̍a̸̧̧̜̻̘̤̫̱̲͎̞̻͆̋ļ̸̛̖̜̳͚̖͔̟̈́͂̉̀͑̑͑̎ǵ̸̫̳̽̐̃̑̚̕o̶͇̫͔̮̼̭͕̹̘̬͋̀͆̂̇̋͊̒̽</field>' +
1844
+ '</block>' +
1845
+ '</xml>',
1846
+ );
1847
+ Serializer.Mutations.Procedure.Names.ControlChars = new SerializerTestCase(
1848
+ 'ControlChars',
1849
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1850
+ '<block type="procedures_defreturn" id="id******************" x="42" y="42">' +
1851
+ '<field name="NAME">&#01;&#a1;</field>' +
1852
+ '</block>' +
1853
+ '</xml>',
1854
+ );
1855
+ Serializer.Mutations.Procedure.Names.testCases = [
1856
+ Serializer.Mutations.Procedure.Names.Symbols,
1857
+ Serializer.Mutations.Procedure.Names.EscapedSymbols,
1858
+ Serializer.Mutations.Procedure.Names.SingleQuotes,
1859
+ Serializer.Mutations.Procedure.Names.DoubleQuotes,
1860
+ Serializer.Mutations.Procedure.Names.Numbers,
1861
+ Serializer.Mutations.Procedure.Names.Emoji,
1862
+ Serializer.Mutations.Procedure.Names.Russian,
1863
+ Serializer.Mutations.Procedure.Names.Japanese,
1864
+ Serializer.Mutations.Procedure.Names.Zalgo,
1865
+ // TODO: Uncoment once #4945 is merged.
1866
+ // Serializer.Mutations.Procedure.Names.ControlChars,
1867
+ ];
1868
+
1869
+ Serializer.Mutations.Procedure.testSuites = [
1870
+ Serializer.Mutations.Procedure.Names,
1871
+ ];
1872
+
1873
+ Serializer.Mutations.testSuites = [
1874
+ Serializer.Mutations.ControlsIf,
1875
+ Serializer.Mutations.ListCreate,
1876
+ Serializer.Mutations.Procedure,
1877
+ ];
1878
+
1879
+ Serializer.Comments = new SerializerTestSuite('Comments');
1880
+
1881
+ Serializer.Comments.Coordinates = new SerializerTestSuite('Coordinates');
1882
+ Serializer.Comments.Coordinates.Basic = new SerializerTestCase(
1883
+ 'Basic',
1884
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1885
+ '<comment id="id******************" x="42" y="42" w="42" h="42">' +
1886
+ '</comment>' +
1887
+ '</xml>',
1888
+ );
1889
+ Serializer.Comments.Coordinates.Negative = new SerializerTestCase(
1890
+ 'Negative',
1891
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1892
+ '<comment id="id******************" x="-42" y="-42" w="42" h="42">' +
1893
+ '</comment>' +
1894
+ '</xml>',
1895
+ );
1896
+ Serializer.Comments.Coordinates.Zero = new SerializerTestCase(
1897
+ 'Zero',
1898
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1899
+ '<comment id="id******************" x="0" y="0" w="42" h="42">' +
1900
+ '</comment>' +
1901
+ '</xml>',
1902
+ );
1903
+ Serializer.Comments.Coordinates.testCases = [
1904
+ Serializer.Comments.Coordinates.Basic,
1905
+ Serializer.Comments.Coordinates.Negative,
1906
+ Serializer.Comments.Coordinates.Zero,
1907
+ ];
1908
+
1909
+ Serializer.Comments.Size = new SerializerTestSuite('Size');
1910
+ Serializer.Comments.Size.Basic = new SerializerTestCase(
1911
+ 'Basic',
1912
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1913
+ '<comment id="id******************" x="42" y="42" w="42" h="42">' +
1914
+ '</comment>' +
1915
+ '</xml>',
1916
+ );
1917
+ Serializer.Comments.Size.testCases = [Serializer.Comments.Size.Basic];
1918
+
1919
+ Serializer.Comments.Text = new SerializerTestSuite('Text');
1920
+ Serializer.Comments.Text.Symbols = new SerializerTestCase(
1921
+ 'Symbols',
1922
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1923
+ '<comment id="id******************" x="42" y="42" w="42" h="42">' +
1924
+ '~`!@#$%^*()_+-={[}]|\\:;,.?/' +
1925
+ '</comment>' +
1926
+ '</xml>',
1927
+ );
1928
+ Serializer.Comments.Text.EscapedSymbols = new SerializerTestCase(
1929
+ 'EscapedSymbols',
1930
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1931
+ '<comment id="id******************" x="42" y="42" w="42" h="42">' +
1932
+ '&amp;&lt;&gt;' +
1933
+ '</comment>' +
1934
+ '</xml>',
1935
+ );
1936
+ Serializer.Comments.Text.SingleQuotes = new SerializerTestCase(
1937
+ 'SingleQuotes',
1938
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1939
+ '<comment id="id******************" x="42" y="42" w="42" h="42">' +
1940
+ "'test'" +
1941
+ '</comment>' +
1942
+ '</xml>',
1943
+ );
1944
+ Serializer.Comments.Text.DoubleQuotes = new SerializerTestCase(
1945
+ 'DoubleQuotes',
1946
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1947
+ '<comment id="id******************" x="42" y="42" w="42" h="42">' +
1948
+ '"test"' +
1949
+ '</comment>' +
1950
+ '</xml>',
1951
+ );
1952
+ Serializer.Comments.Text.Numbers = new SerializerTestCase(
1953
+ 'Numbers',
1954
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1955
+ '<comment id="id******************" x="42" y="42" w="42" h="42">' +
1956
+ '1234567890a123a123a' +
1957
+ '</comment>' +
1958
+ '</xml>',
1959
+ );
1960
+ Serializer.Comments.Text.Emoji = new SerializerTestCase(
1961
+ 'Emoji',
1962
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1963
+ '<comment id="id******************" x="42" y="42" w="42" h="42">' +
1964
+ '😀👋🏿👋🏾👋🏽👋🏼👋🏻😀❤❤❤' +
1965
+ '</comment>' +
1966
+ '</xml>',
1967
+ );
1968
+ Serializer.Comments.Text.Russian = new SerializerTestCase(
1969
+ 'Russian',
1970
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1971
+ '<comment id="id******************" x="42" y="42" w="42" h="42">' +
1972
+ 'ты любопытный кот' +
1973
+ '</comment>' +
1974
+ '</xml>',
1975
+ );
1976
+ Serializer.Comments.Text.Japanese = new SerializerTestCase(
1977
+ 'Japanese',
1978
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1979
+ '<comment id="id******************" x="42" y="42" w="42" h="42">' +
1980
+ 'あなたは好奇心旺盛な猫です' +
1981
+ '</comment>' +
1982
+ '</xml>',
1983
+ );
1984
+ Serializer.Comments.Text.Zalgo = new SerializerTestCase(
1985
+ 'Zalgo',
1986
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
1987
+ '<comment id="id******************" x="42" y="42" w="42" h="42">' +
1988
+ 'z̴̪͈̲̜͕̽̈̀͒͂̓̋̉̍a̸̧̧̜̻̘̤̫̱̲͎̞̻͆̋ļ̸̛̖̜̳͚̖͔̟̈́͂̉̀͑̑͑̎ǵ̸̫̳̽̐̃̑̚̕o̶͇̫͔̮̼̭͕̹̘̬͋̀͆̂̇̋͊̒̽' +
1989
+ '</comment>' +
1990
+ '</xml>',
1991
+ );
1992
+ Serializer.Comments.Text.testCases = [
1993
+ Serializer.Comments.Text.Symbols,
1994
+ Serializer.Comments.Text.EscapedSymbols,
1995
+ Serializer.Comments.Text.SingleQuotes,
1996
+ Serializer.Comments.Text.DoubleQuotes,
1997
+ Serializer.Comments.Text.Numbers,
1998
+ Serializer.Comments.Text.Emoji,
1999
+ Serializer.Comments.Text.Russian,
2000
+ Serializer.Comments.Text.Japanese,
2001
+ Serializer.Comments.Text.Zalgo,
2002
+ ];
2003
+
2004
+ Serializer.Comments.Attributes = new SerializerTestSuite('Attributes');
2005
+ Serializer.Comments.Attributes.Collapsed = new SerializerTestCase(
2006
+ 'Collapsed',
2007
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
2008
+ '<comment id="id******************" x="42" y="42" w="42" h="42" collapsed="true">' +
2009
+ '</comment>' +
2010
+ '</xml>',
2011
+ );
2012
+ Serializer.Comments.Attributes.NotEditable = new SerializerTestCase(
2013
+ 'NotEditable',
2014
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
2015
+ '<comment id="id******************" x="42" y="42" w="42" h="42" editable="false">' +
2016
+ '</comment>' +
2017
+ '</xml>',
2018
+ );
2019
+ Serializer.Comments.Attributes.NotMovable = new SerializerTestCase(
2020
+ 'NotMovable',
2021
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
2022
+ '<comment id="id******************" x="42" y="42" w="42" h="42" movable="false">' +
2023
+ '</comment>' +
2024
+ '</xml>',
2025
+ );
2026
+ Serializer.Comments.Attributes.NotDeletable = new SerializerTestCase(
2027
+ 'NotDeletable',
2028
+ '<xml xmlns="https://developers.google.com/blockly/xml">' +
2029
+ '<comment id="id******************" x="42" y="42" w="42" h="42" deletable="false">' +
2030
+ '</comment>' +
2031
+ '</xml>',
2032
+ );
2033
+ Serializer.Comments.Attributes.testCases = [
2034
+ Serializer.Comments.Attributes.Collapsed,
2035
+ Serializer.Comments.Attributes.NotEditable,
2036
+ Serializer.Comments.Attributes.NotMovable,
2037
+ Serializer.Comments.Attributes.NotDeletable,
2038
+ ];
2039
+
2040
+ Serializer.Comments.testSuites = [
2041
+ Serializer.Comments.Coordinates,
2042
+ Serializer.Comments.Size,
2043
+ Serializer.Comments.Text,
2044
+ Serializer.Comments.Attributes,
2045
+ ];
2046
+
2047
+ Serializer.testSuites = [
2048
+ Serializer.Attributes,
2049
+ Serializer.Fields,
2050
+ Serializer.Icons,
2051
+ Serializer.Connections,
2052
+ Serializer.Mutations,
2053
+ Serializer.Comments,
2054
+ ];
2055
+
2056
+ const runSerializerTestSuite = (serializer, deserializer, testSuite) => {
2057
+ const workspaces = Blockly.serialization.workspaces;
2058
+
2059
+ const createTestFunction = function (test) {
2060
+ return function () {
2061
+ Blockly.Xml.domToWorkspace(
2062
+ Blockly.utils.xml.textToDom(test.xml),
2063
+ this.workspace,
2064
+ );
2065
+ if (serializer && deserializer) {
2066
+ const save = serializer(workspaces.save(this.workspace));
2067
+ this.workspace.clear();
2068
+ workspaces.load(deserializer(save), this.workspace);
2069
+ }
2070
+ const newXml = Blockly.Xml.workspaceToDom(this.workspace);
2071
+ assert.equal(Blockly.Xml.domToText(newXml), test.xml);
2072
+ };
2073
+ };
2074
+
2075
+ // This takes in a suite, but we don't care.
2076
+ const createTestCaseFunction = function (_) {
2077
+ return createTestFunction;
2078
+ };
2079
+
2080
+ let suiteCall = testSuite.skip ? suite.skip : suite;
2081
+ suiteCall = testSuite.only ? suite.only : suiteCall;
2082
+
2083
+ suiteCall(testSuite.title, function () {
2084
+ setup(function () {
2085
+ sharedTestSetup.call(this, {fireEventsNow: false});
2086
+ this.workspace = new Blockly.Workspace();
2087
+ });
2088
+
2089
+ teardown(function () {
2090
+ workspaceTeardown.call(this, this.workspace);
2091
+ sharedTestTeardown.call(this);
2092
+ });
2093
+
2094
+ runTestSuites(testSuite.testSuites, createTestCaseFunction);
2095
+ runTestCases(testSuite.testCases, createTestFunction);
2096
+ });
2097
+ };
2098
+
2099
+ runSerializerTestSuite(null, null, Serializer);
2100
+ runSerializerTestSuite(
2101
+ (state) => state,
2102
+ (state) => state,
2103
+ Serializer,
2104
+ );