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.
- package/.husky/commit-msg +0 -3
- package/CHANGELOG.md +111 -833
- package/TODO.md +16 -0
- package/blockly-rc/.eslintignore +28 -0
- package/blockly-rc/.eslintrc.js +187 -0
- package/blockly-rc/.gitattributes +1 -0
- package/blockly-rc/.github/CODEOWNERS +1 -0
- package/blockly-rc/.github/CONTRIBUTING.md +46 -0
- package/blockly-rc/.github/ISSUE_TEMPLATE/bug_report.yaml +58 -0
- package/blockly-rc/.github/ISSUE_TEMPLATE/config.yml +7 -0
- package/blockly-rc/.github/ISSUE_TEMPLATE/documentation.yaml +38 -0
- package/blockly-rc/.github/ISSUE_TEMPLATE/feature_request.yaml +39 -0
- package/blockly-rc/.github/PULL_REQUEST_TEMPLATE.md +42 -0
- package/blockly-rc/.github/dependabot.yml +27 -0
- package/blockly-rc/.github/release.yml +32 -0
- package/blockly-rc/.github/workflows/appengine_deploy.yml +54 -0
- package/blockly-rc/.github/workflows/assign_reviewers.yml +41 -0
- package/blockly-rc/.github/workflows/browser_test.yml +55 -0
- package/blockly-rc/.github/workflows/build.yml +86 -0
- package/blockly-rc/.github/workflows/conventional-label.yml +17 -0
- package/blockly-rc/.github/workflows/develop_freeze.yml +26 -0
- package/blockly-rc/.github/workflows/tag_module_cleanup.yml +37 -0
- package/blockly-rc/.github/workflows/welcome_new_contributors.yml +36 -0
- package/blockly-rc/.prettierignore +30 -0
- package/blockly-rc/.prettierrc.js +13 -0
- package/blockly-rc/CHANGELOG.md +77 -0
- package/blockly-rc/LICENSE +202 -0
- package/blockly-rc/README.md +80 -0
- package/blockly-rc/_config.yml +1 -0
- package/blockly-rc/api-extractor.json +385 -0
- package/blockly-rc/appengine/.gcloudignore +20 -0
- package/blockly-rc/appengine/README.txt +42 -0
- package/blockly-rc/appengine/add_timestamps.py +69 -0
- package/blockly-rc/appengine/app.yaml +104 -0
- package/blockly-rc/appengine/apple-touch-icon.png +0 -0
- package/blockly-rc/appengine/blockly_compressed.js +11 -0
- package/blockly-rc/appengine/expiration.py +52 -0
- package/blockly-rc/appengine/favicon.ico +0 -0
- package/blockly-rc/appengine/index.yaml +11 -0
- package/blockly-rc/appengine/main.py +39 -0
- package/blockly-rc/appengine/redirect.html +107 -0
- package/blockly-rc/appengine/requirements.txt +1 -0
- package/blockly-rc/appengine/robots.txt +2 -0
- package/blockly-rc/appengine/storage.js +190 -0
- package/blockly-rc/appengine/storage.py +125 -0
- package/blockly-rc/blocks/blocks.ts +44 -0
- package/blockly-rc/blocks/lists.ts +1085 -0
- package/blockly-rc/blocks/logic.ts +712 -0
- package/blockly-rc/blocks/loops.ts +408 -0
- package/blockly-rc/blocks/math.ts +591 -0
- package/blockly-rc/blocks/procedures.ts +1364 -0
- package/blockly-rc/blocks/text.ts +1007 -0
- package/blockly-rc/blocks/variables.ts +183 -0
- package/blockly-rc/blocks/variables_dynamic.ts +194 -0
- package/blockly-rc/core/any_aliases.ts +8 -0
- package/blockly-rc/core/block.ts +2523 -0
- package/blockly-rc/core/block_animations.ts +225 -0
- package/blockly-rc/core/block_flyout_inflater.ts +262 -0
- package/blockly-rc/core/block_svg.ts +1768 -0
- package/blockly-rc/core/blockly.ts +605 -0
- package/blockly-rc/core/blockly_options.ts +71 -0
- package/blockly-rc/core/blocks.ts +18 -0
- package/blockly-rc/core/browser_events.ts +244 -0
- package/blockly-rc/core/bubbles/bubble.ts +658 -0
- package/blockly-rc/core/bubbles/mini_workspace_bubble.ts +280 -0
- package/blockly-rc/core/bubbles/text_bubble.ts +103 -0
- package/blockly-rc/core/bubbles/textinput_bubble.ts +344 -0
- package/blockly-rc/core/bubbles.ts +12 -0
- package/blockly-rc/core/bump_objects.ts +192 -0
- package/blockly-rc/core/button_flyout_inflater.ts +63 -0
- package/blockly-rc/core/clipboard/block_paster.ts +142 -0
- package/blockly-rc/core/clipboard/registry.ts +31 -0
- package/blockly-rc/core/clipboard/workspace_comment_paster.ts +94 -0
- package/blockly-rc/core/clipboard.ts +113 -0
- package/blockly-rc/core/comments/comment_view.ts +899 -0
- package/blockly-rc/core/comments/rendered_workspace_comment.ts +297 -0
- package/blockly-rc/core/comments/workspace_comment.ts +237 -0
- package/blockly-rc/core/comments.ts +9 -0
- package/blockly-rc/core/common.ts +305 -0
- package/blockly-rc/core/component_manager.ts +235 -0
- package/blockly-rc/core/config.ts +65 -0
- package/blockly-rc/core/connection.ts +793 -0
- package/blockly-rc/core/connection_checker.ts +348 -0
- package/blockly-rc/core/connection_db.ts +297 -0
- package/blockly-rc/core/connection_type.ts +21 -0
- package/blockly-rc/core/constants.ts +23 -0
- package/blockly-rc/core/contextmenu.ts +268 -0
- package/blockly-rc/core/contextmenu_items.ts +700 -0
- package/blockly-rc/core/contextmenu_registry.ts +194 -0
- package/blockly-rc/core/css.ts +481 -0
- package/blockly-rc/core/delete_area.ts +77 -0
- package/blockly-rc/core/dialog.ts +121 -0
- package/blockly-rc/core/drag_target.ts +97 -0
- package/blockly-rc/core/dragging/block_drag_strategy.ts +454 -0
- package/blockly-rc/core/dragging/bubble_drag_strategy.ts +52 -0
- package/blockly-rc/core/dragging/comment_drag_strategy.ts +91 -0
- package/blockly-rc/core/dragging/dragger.ts +163 -0
- package/blockly-rc/core/dragging.ts +12 -0
- package/blockly-rc/core/dropdowndiv.ts +768 -0
- package/blockly-rc/core/events/events.ts +163 -0
- package/blockly-rc/core/events/events_abstract.ts +130 -0
- package/blockly-rc/core/events/events_block_base.ts +88 -0
- package/blockly-rc/core/events/events_block_change.ts +259 -0
- package/blockly-rc/core/events/events_block_create.ts +185 -0
- package/blockly-rc/core/events/events_block_delete.ts +182 -0
- package/blockly-rc/core/events/events_block_drag.ts +116 -0
- package/blockly-rc/core/events/events_block_field_intermediate_change.ts +167 -0
- package/blockly-rc/core/events/events_block_move.ts +307 -0
- package/blockly-rc/core/events/events_bubble_open.ts +120 -0
- package/blockly-rc/core/events/events_click.ts +110 -0
- package/blockly-rc/core/events/events_comment_base.ts +126 -0
- package/blockly-rc/core/events/events_comment_change.ts +161 -0
- package/blockly-rc/core/events/events_comment_collapse.ts +103 -0
- package/blockly-rc/core/events/events_comment_create.ts +118 -0
- package/blockly-rc/core/events/events_comment_delete.ts +117 -0
- package/blockly-rc/core/events/events_comment_drag.ts +99 -0
- package/blockly-rc/core/events/events_comment_move.ts +207 -0
- package/blockly-rc/core/events/events_comment_resize.ts +174 -0
- package/blockly-rc/core/events/events_marker_move.ts +134 -0
- package/blockly-rc/core/events/events_selected.ts +98 -0
- package/blockly-rc/core/events/events_theme_change.ts +84 -0
- package/blockly-rc/core/events/events_toolbox_item_select.ts +96 -0
- package/blockly-rc/core/events/events_trashcan_open.ts +88 -0
- package/blockly-rc/core/events/events_ui_base.ts +47 -0
- package/blockly-rc/core/events/events_var_base.ts +89 -0
- package/blockly-rc/core/events/events_var_create.ts +129 -0
- package/blockly-rc/core/events/events_var_delete.ts +124 -0
- package/blockly-rc/core/events/events_var_rename.ts +133 -0
- package/blockly-rc/core/events/events_var_type_change.ts +122 -0
- package/blockly-rc/core/events/events_viewport.ts +149 -0
- package/blockly-rc/core/events/utils.ts +595 -0
- package/blockly-rc/core/events/workspace_events.ts +46 -0
- package/blockly-rc/core/extensions.ts +491 -0
- package/blockly-rc/core/field.ts +1471 -0
- package/blockly-rc/core/field_checkbox.ts +271 -0
- package/blockly-rc/core/field_dropdown.ts +857 -0
- package/blockly-rc/core/field_image.ts +297 -0
- package/blockly-rc/core/field_input.ts +755 -0
- package/blockly-rc/core/field_label.ts +150 -0
- package/blockly-rc/core/field_label_serializable.ts +73 -0
- package/blockly-rc/core/field_number.ts +381 -0
- package/blockly-rc/core/field_registry.ts +115 -0
- package/blockly-rc/core/field_textinput.ts +117 -0
- package/blockly-rc/core/field_variable.ts +651 -0
- package/blockly-rc/core/flyout_base.ts +968 -0
- package/blockly-rc/core/flyout_button.ts +416 -0
- package/blockly-rc/core/flyout_horizontal.ts +374 -0
- package/blockly-rc/core/flyout_metrics_manager.ts +90 -0
- package/blockly-rc/core/flyout_separator.ts +61 -0
- package/blockly-rc/core/flyout_vertical.ts +353 -0
- package/blockly-rc/core/generator.ts +611 -0
- package/blockly-rc/core/gesture.ts +1191 -0
- package/blockly-rc/core/grid.ts +252 -0
- package/blockly-rc/core/icons/comment_icon.ts +435 -0
- package/blockly-rc/core/icons/exceptions.ts +23 -0
- package/blockly-rc/core/icons/icon.ts +147 -0
- package/blockly-rc/core/icons/icon_types.ts +32 -0
- package/blockly-rc/core/icons/mutator_icon.ts +354 -0
- package/blockly-rc/core/icons/registry.ts +33 -0
- package/blockly-rc/core/icons/warning_icon.ts +219 -0
- package/blockly-rc/core/icons.ts +24 -0
- package/blockly-rc/core/inject.ts +428 -0
- package/blockly-rc/core/inputs/align.ts +14 -0
- package/blockly-rc/core/inputs/dummy_input.ts +26 -0
- package/blockly-rc/core/inputs/end_row_input.ts +31 -0
- package/blockly-rc/core/inputs/input.ts +318 -0
- package/blockly-rc/core/inputs/input_types.ts +27 -0
- package/blockly-rc/core/inputs/statement_input.ts +34 -0
- package/blockly-rc/core/inputs/value_input.ts +30 -0
- package/blockly-rc/core/inputs.ts +23 -0
- package/blockly-rc/core/insertion_marker_manager.ts +742 -0
- package/blockly-rc/core/insertion_marker_previewer.ts +254 -0
- package/blockly-rc/core/interfaces/i_ast_node_location.ts +12 -0
- package/blockly-rc/core/interfaces/i_ast_node_location_svg.ts +28 -0
- package/blockly-rc/core/interfaces/i_ast_node_location_with_block.ts +22 -0
- package/blockly-rc/core/interfaces/i_autohideable.ts +22 -0
- package/blockly-rc/core/interfaces/i_bounded_element.ts +30 -0
- package/blockly-rc/core/interfaces/i_bubble.ts +63 -0
- package/blockly-rc/core/interfaces/i_collapsible_toolbox_item.ts +33 -0
- package/blockly-rc/core/interfaces/i_comment_icon.ts +47 -0
- package/blockly-rc/core/interfaces/i_component.ts +19 -0
- package/blockly-rc/core/interfaces/i_connection_checker.ts +100 -0
- package/blockly-rc/core/interfaces/i_connection_previewer.ts +50 -0
- package/blockly-rc/core/interfaces/i_contextmenu.ts +16 -0
- package/blockly-rc/core/interfaces/i_copyable.ts +31 -0
- package/blockly-rc/core/interfaces/i_deletable.ts +34 -0
- package/blockly-rc/core/interfaces/i_delete_area.ts +28 -0
- package/blockly-rc/core/interfaces/i_drag_target.ts +69 -0
- package/blockly-rc/core/interfaces/i_draggable.ts +72 -0
- package/blockly-rc/core/interfaces/i_dragger.ts +35 -0
- package/blockly-rc/core/interfaces/i_flyout.ts +189 -0
- package/blockly-rc/core/interfaces/i_flyout_inflater.ts +41 -0
- package/blockly-rc/core/interfaces/i_has_bubble.ts +20 -0
- package/blockly-rc/core/interfaces/i_icon.ts +114 -0
- package/blockly-rc/core/interfaces/i_keyboard_accessible.ts +21 -0
- package/blockly-rc/core/interfaces/i_legacy_procedure_blocks.ts +50 -0
- package/blockly-rc/core/interfaces/i_metrics_manager.ts +149 -0
- package/blockly-rc/core/interfaces/i_movable.ts +19 -0
- package/blockly-rc/core/interfaces/i_observable.ts +24 -0
- package/blockly-rc/core/interfaces/i_parameter_model.ts +51 -0
- package/blockly-rc/core/interfaces/i_paster.ts +25 -0
- package/blockly-rc/core/interfaces/i_positionable.ts +33 -0
- package/blockly-rc/core/interfaces/i_procedure_block.ts +27 -0
- package/blockly-rc/core/interfaces/i_procedure_map.ts +18 -0
- package/blockly-rc/core/interfaces/i_procedure_model.ts +71 -0
- package/blockly-rc/core/interfaces/i_registrable.ts +12 -0
- package/blockly-rc/core/interfaces/i_rendered_element.ts +22 -0
- package/blockly-rc/core/interfaces/i_selectable.ts +34 -0
- package/blockly-rc/core/interfaces/i_selectable_toolbox_item.ts +63 -0
- package/blockly-rc/core/interfaces/i_serializable.ts +28 -0
- package/blockly-rc/core/interfaces/i_serializer.ts +55 -0
- package/blockly-rc/core/interfaces/i_styleable.ts +26 -0
- package/blockly-rc/core/interfaces/i_toolbox.ts +112 -0
- package/blockly-rc/core/interfaces/i_toolbox_item.ts +81 -0
- package/blockly-rc/core/interfaces/i_variable_backed_parameter_model.ts +23 -0
- package/blockly-rc/core/interfaces/i_variable_map.ts +65 -0
- package/blockly-rc/core/interfaces/i_variable_model.ts +57 -0
- package/blockly-rc/core/internal_constants.ts +47 -0
- package/blockly-rc/core/keyboard_nav/ast_node.ts +884 -0
- package/blockly-rc/core/keyboard_nav/basic_cursor.ts +223 -0
- package/blockly-rc/core/keyboard_nav/cursor.ts +138 -0
- package/blockly-rc/core/keyboard_nav/marker.ts +113 -0
- package/blockly-rc/core/keyboard_nav/tab_navigate_cursor.ts +46 -0
- package/blockly-rc/core/label_flyout_inflater.ts +59 -0
- package/blockly-rc/core/layer_manager.ts +186 -0
- package/blockly-rc/core/layers.ts +17 -0
- package/blockly-rc/core/main.ts +31 -0
- package/blockly-rc/core/marker_manager.ts +189 -0
- package/blockly-rc/core/menu.ts +463 -0
- package/blockly-rc/core/menuitem.ts +221 -0
- package/blockly-rc/core/metrics_manager.ts +486 -0
- package/blockly-rc/core/msg.ts +27 -0
- package/blockly-rc/core/names.ts +275 -0
- package/blockly-rc/core/observable_procedure_map.ts +66 -0
- package/blockly-rc/core/options.ts +377 -0
- package/blockly-rc/core/positionable_helpers.ts +186 -0
- package/blockly-rc/core/procedures.ts +510 -0
- package/blockly-rc/core/registry.ts +400 -0
- package/blockly-rc/core/render_management.ts +193 -0
- package/blockly-rc/core/rendered_connection.ts +571 -0
- package/blockly-rc/core/renderers/common/block_rendering.ts +120 -0
- package/blockly-rc/core/renderers/common/constants.ts +1198 -0
- package/blockly-rc/core/renderers/common/drawer.ts +518 -0
- package/blockly-rc/core/renderers/common/i_path_object.ts +137 -0
- package/blockly-rc/core/renderers/common/info.ts +767 -0
- package/blockly-rc/core/renderers/common/marker_svg.ts +765 -0
- package/blockly-rc/core/renderers/common/path_object.ts +324 -0
- package/blockly-rc/core/renderers/common/renderer.ts +281 -0
- package/blockly-rc/core/renderers/geras/constants.ts +46 -0
- package/blockly-rc/core/renderers/geras/drawer.ts +167 -0
- package/blockly-rc/core/renderers/geras/geras.ts +31 -0
- package/blockly-rc/core/renderers/geras/highlight_constants.ts +342 -0
- package/blockly-rc/core/renderers/geras/highlighter.ts +313 -0
- package/blockly-rc/core/renderers/geras/info.ts +478 -0
- package/blockly-rc/core/renderers/geras/measurables/inline_input.ts +37 -0
- package/blockly-rc/core/renderers/geras/measurables/statement_input.ts +36 -0
- package/blockly-rc/core/renderers/geras/path_object.ts +135 -0
- package/blockly-rc/core/renderers/geras/renderer.ts +124 -0
- package/blockly-rc/core/renderers/measurables/base.ts +41 -0
- package/blockly-rc/core/renderers/measurables/bottom_row.ts +104 -0
- package/blockly-rc/core/renderers/measurables/connection.ts +43 -0
- package/blockly-rc/core/renderers/measurables/external_value_input.ts +53 -0
- package/blockly-rc/core/renderers/measurables/field.ts +50 -0
- package/blockly-rc/core/renderers/measurables/hat.ts +33 -0
- package/blockly-rc/core/renderers/measurables/icon.ts +42 -0
- package/blockly-rc/core/renderers/measurables/in_row_spacer.ts +29 -0
- package/blockly-rc/core/renderers/measurables/inline_input.ts +63 -0
- package/blockly-rc/core/renderers/measurables/input_connection.ts +57 -0
- package/blockly-rc/core/renderers/measurables/input_row.ts +67 -0
- package/blockly-rc/core/renderers/measurables/jagged_edge.ts +28 -0
- package/blockly-rc/core/renderers/measurables/next_connection.ts +34 -0
- package/blockly-rc/core/renderers/measurables/output_connection.ts +43 -0
- package/blockly-rc/core/renderers/measurables/previous_connection.ts +34 -0
- package/blockly-rc/core/renderers/measurables/round_corner.ts +34 -0
- package/blockly-rc/core/renderers/measurables/row.ts +191 -0
- package/blockly-rc/core/renderers/measurables/spacer_row.ts +44 -0
- package/blockly-rc/core/renderers/measurables/square_corner.ts +32 -0
- package/blockly-rc/core/renderers/measurables/statement_input.ts +41 -0
- package/blockly-rc/core/renderers/measurables/top_row.ts +110 -0
- package/blockly-rc/core/renderers/measurables/types.ts +319 -0
- package/blockly-rc/core/renderers/thrasos/info.ts +328 -0
- package/blockly-rc/core/renderers/thrasos/renderer.ts +40 -0
- package/blockly-rc/core/renderers/thrasos/thrasos.ts +14 -0
- package/blockly-rc/core/renderers/zelos/constants.ts +877 -0
- package/blockly-rc/core/renderers/zelos/drawer.ts +274 -0
- package/blockly-rc/core/renderers/zelos/info.ts +652 -0
- package/blockly-rc/core/renderers/zelos/marker_svg.ts +145 -0
- package/blockly-rc/core/renderers/zelos/measurables/bottom_row.ts +44 -0
- package/blockly-rc/core/renderers/zelos/measurables/inputs.ts +41 -0
- package/blockly-rc/core/renderers/zelos/measurables/row_elements.ts +29 -0
- package/blockly-rc/core/renderers/zelos/measurables/top_row.ts +50 -0
- package/blockly-rc/core/renderers/zelos/path_object.ts +209 -0
- package/blockly-rc/core/renderers/zelos/renderer.ts +143 -0
- package/blockly-rc/core/renderers/zelos/zelos.ts +33 -0
- package/blockly-rc/core/scrollbar.ts +898 -0
- package/blockly-rc/core/scrollbar_pair.ts +349 -0
- package/blockly-rc/core/separator_flyout_inflater.ts +69 -0
- package/blockly-rc/core/serialization/blocks.ts +868 -0
- package/blockly-rc/core/serialization/exceptions.ts +112 -0
- package/blockly-rc/core/serialization/priorities.ts +25 -0
- package/blockly-rc/core/serialization/procedures.ts +158 -0
- package/blockly-rc/core/serialization/registry.ts +30 -0
- package/blockly-rc/core/serialization/variables.ts +68 -0
- package/blockly-rc/core/serialization/workspace_comments.ts +143 -0
- package/blockly-rc/core/serialization/workspaces.ts +94 -0
- package/blockly-rc/core/serialization.ts +32 -0
- package/blockly-rc/core/shortcut_items.ts +338 -0
- package/blockly-rc/core/shortcut_registry.ts +368 -0
- package/blockly-rc/core/sprites.ts +15 -0
- package/blockly-rc/core/theme/classic.ts +40 -0
- package/blockly-rc/core/theme/themes.ts +12 -0
- package/blockly-rc/core/theme/zelos.ts +80 -0
- package/blockly-rc/core/theme.ts +232 -0
- package/blockly-rc/core/theme_manager.ts +192 -0
- package/blockly-rc/core/toolbox/category.ts +739 -0
- package/blockly-rc/core/toolbox/collapsible_category.ts +288 -0
- package/blockly-rc/core/toolbox/separator.ts +105 -0
- package/blockly-rc/core/toolbox/toolbox.ts +1134 -0
- package/blockly-rc/core/toolbox/toolbox_item.ts +152 -0
- package/blockly-rc/core/tooltip.ts +466 -0
- package/blockly-rc/core/touch.ts +155 -0
- package/blockly-rc/core/trashcan.ts +748 -0
- package/blockly-rc/core/utils/aria.ts +144 -0
- package/blockly-rc/core/utils/array.ts +24 -0
- package/blockly-rc/core/utils/colour.ts +265 -0
- package/blockly-rc/core/utils/coordinate.ts +129 -0
- package/blockly-rc/core/utils/deprecation.ts +47 -0
- package/blockly-rc/core/utils/dom.ts +356 -0
- package/blockly-rc/core/utils/idgenerator.ts +70 -0
- package/blockly-rc/core/utils/keycodes.ts +154 -0
- package/blockly-rc/core/utils/math.ts +50 -0
- package/blockly-rc/core/utils/metrics.ts +86 -0
- package/blockly-rc/core/utils/object.ts +28 -0
- package/blockly-rc/core/utils/parsing.ts +287 -0
- package/blockly-rc/core/utils/rect.ts +69 -0
- package/blockly-rc/core/utils/size.ts +62 -0
- package/blockly-rc/core/utils/string.ts +289 -0
- package/blockly-rc/core/utils/style.ts +219 -0
- package/blockly-rc/core/utils/svg.ts +84 -0
- package/blockly-rc/core/utils/svg_math.ts +208 -0
- package/blockly-rc/core/utils/svg_paths.ts +133 -0
- package/blockly-rc/core/utils/toolbox.ts +419 -0
- package/blockly-rc/core/utils/useragent.ts +86 -0
- package/blockly-rc/core/utils/xml.ts +165 -0
- package/blockly-rc/core/utils.ts +59 -0
- package/blockly-rc/core/variable_map.ts +437 -0
- package/blockly-rc/core/variable_model.ts +149 -0
- package/blockly-rc/core/variables.ts +773 -0
- package/blockly-rc/core/variables_dynamic.ts +142 -0
- package/blockly-rc/core/widgetdiv.ts +319 -0
- package/blockly-rc/core/workspace.ts +957 -0
- package/blockly-rc/core/workspace_audio.ts +171 -0
- package/blockly-rc/core/workspace_dragger.ts +97 -0
- package/blockly-rc/core/workspace_svg.ts +2519 -0
- package/blockly-rc/core/xml.ts +1133 -0
- package/blockly-rc/core/zoom_controls.ts +492 -0
- package/blockly-rc/demos/blockfactory/analytics.js +195 -0
- package/blockly-rc/demos/blockfactory/app_controller.js +726 -0
- package/blockly-rc/demos/blockfactory/block_definition_extractor.js +742 -0
- package/blockly-rc/demos/blockfactory/block_exporter_controller.js +311 -0
- package/blockly-rc/demos/blockfactory/block_exporter_tools.js +212 -0
- package/blockly-rc/demos/blockfactory/block_exporter_view.js +101 -0
- package/blockly-rc/demos/blockfactory/block_library_controller.js +325 -0
- package/blockly-rc/demos/blockfactory/block_library_storage.js +149 -0
- package/blockly-rc/demos/blockfactory/block_library_view.js +178 -0
- package/blockly-rc/demos/blockfactory/block_option.js +151 -0
- package/blockly-rc/demos/blockfactory/blocks.js +916 -0
- package/blockly-rc/demos/blockfactory/cp.css +46 -0
- package/blockly-rc/demos/blockfactory/cp.js +179 -0
- package/blockly-rc/demos/blockfactory/factory.css +586 -0
- package/blockly-rc/demos/blockfactory/factory.js +337 -0
- package/blockly-rc/demos/blockfactory/factory_utils.js +1036 -0
- package/blockly-rc/demos/blockfactory/icon.png +0 -0
- package/blockly-rc/demos/blockfactory/index.html +767 -0
- package/blockly-rc/demos/blockfactory/link.png +0 -0
- package/blockly-rc/demos/blockfactory/standard_categories.js +384 -0
- package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_controller.js +1332 -0
- package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_generator.js +224 -0
- package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_init.js +541 -0
- package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_model.js +548 -0
- package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_view.js +424 -0
- package/blockly-rc/demos/code/code.js +626 -0
- package/blockly-rc/demos/code/icon.png +0 -0
- package/blockly-rc/demos/code/icons.png +0 -0
- package/blockly-rc/demos/code/index.html +359 -0
- package/blockly-rc/demos/code/msg/ar.js +24 -0
- package/blockly-rc/demos/code/msg/be-tarask.js +24 -0
- package/blockly-rc/demos/code/msg/br.js +24 -0
- package/blockly-rc/demos/code/msg/ca.js +24 -0
- package/blockly-rc/demos/code/msg/cs.js +24 -0
- package/blockly-rc/demos/code/msg/da.js +24 -0
- package/blockly-rc/demos/code/msg/de.js +24 -0
- package/blockly-rc/demos/code/msg/el.js +24 -0
- package/blockly-rc/demos/code/msg/en.js +24 -0
- package/blockly-rc/demos/code/msg/es.js +24 -0
- package/blockly-rc/demos/code/msg/et.js +24 -0
- package/blockly-rc/demos/code/msg/fa.js +24 -0
- package/blockly-rc/demos/code/msg/fr.js +24 -0
- package/blockly-rc/demos/code/msg/he.js +24 -0
- package/blockly-rc/demos/code/msg/hr.js +24 -0
- package/blockly-rc/demos/code/msg/hrx.js +24 -0
- package/blockly-rc/demos/code/msg/hu.js +24 -0
- package/blockly-rc/demos/code/msg/ia.js +24 -0
- package/blockly-rc/demos/code/msg/is.js +24 -0
- package/blockly-rc/demos/code/msg/it.js +24 -0
- package/blockly-rc/demos/code/msg/ja.js +24 -0
- package/blockly-rc/demos/code/msg/kab.js +24 -0
- package/blockly-rc/demos/code/msg/ko.js +24 -0
- package/blockly-rc/demos/code/msg/mk.js +24 -0
- package/blockly-rc/demos/code/msg/ms.js +24 -0
- package/blockly-rc/demos/code/msg/nb.js +24 -0
- package/blockly-rc/demos/code/msg/nl.js +24 -0
- package/blockly-rc/demos/code/msg/oc.js +24 -0
- package/blockly-rc/demos/code/msg/pl.js +24 -0
- package/blockly-rc/demos/code/msg/pms.js +24 -0
- package/blockly-rc/demos/code/msg/pt-br.js +24 -0
- package/blockly-rc/demos/code/msg/ro.js +24 -0
- package/blockly-rc/demos/code/msg/ru.js +24 -0
- package/blockly-rc/demos/code/msg/sc.js +24 -0
- package/blockly-rc/demos/code/msg/sk.js +24 -0
- package/blockly-rc/demos/code/msg/sr.js +24 -0
- package/blockly-rc/demos/code/msg/sv.js +24 -0
- package/blockly-rc/demos/code/msg/ta.js +24 -0
- package/blockly-rc/demos/code/msg/th.js +24 -0
- package/blockly-rc/demos/code/msg/tlh.js +24 -0
- package/blockly-rc/demos/code/msg/tr.js +24 -0
- package/blockly-rc/demos/code/msg/uk.js +24 -0
- package/blockly-rc/demos/code/msg/vi.js +24 -0
- package/blockly-rc/demos/code/msg/zh-hans.js +24 -0
- package/blockly-rc/demos/code/msg/zh-hant.js +24 -0
- package/blockly-rc/demos/code/style.css +184 -0
- package/blockly-rc/demos/index.html +68 -0
- package/blockly-rc/demos/minimap/icon.png +0 -0
- package/blockly-rc/demos/minimap/index.html +91 -0
- package/blockly-rc/demos/minimap/minimap.js +302 -0
- package/blockly-rc/demos/mobile/README.md +53 -0
- package/blockly-rc/demos/mobile/android/README.md +45 -0
- package/blockly-rc/demos/mobile/android/app/build.gradle +64 -0
- package/blockly-rc/demos/mobile/android/app/proguard-rules.pro +21 -0
- package/blockly-rc/demos/mobile/android/app/src/androidTest/java/com/example/blocklywebview/ExampleInstrumentedTest.java +26 -0
- package/blockly-rc/demos/mobile/android/app/src/main/AndroidManifest.xml +21 -0
- package/blockly-rc/demos/mobile/android/app/src/main/java/com/google/blockly/android/webview/BlocklyWebViewFragment.java +40 -0
- package/blockly-rc/demos/mobile/android/app/src/main/java/com/google/blockly/android/webview/JsDialogHelper.java +150 -0
- package/blockly-rc/demos/mobile/android/app/src/main/java/com/google/blockly/android/webview/WebChromeClient.java +32 -0
- package/blockly-rc/demos/mobile/android/app/src/main/java/com/google/blockly/android/webview/demo/MainActivity.java +18 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/drawable/ic_launcher_background.xml +74 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/layout/activity_main.xml +17 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/layout/js_prompt.xml +37 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/values/colors.xml +6 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/values/js_dialog_helper.xml +7 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/values/strings.xml +3 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/values/styles.xml +11 -0
- package/blockly-rc/demos/mobile/android/app/src/test/java/com/example/blocklywebview/ExampleUnitTest.java +17 -0
- package/blockly-rc/demos/mobile/android/build.gradle +27 -0
- package/blockly-rc/demos/mobile/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/blockly-rc/demos/mobile/android/gradle/wrapper/gradle-wrapper.properties +6 -0
- package/blockly-rc/demos/mobile/android/gradle.properties +13 -0
- package/blockly-rc/demos/mobile/android/gradlew +172 -0
- package/blockly-rc/demos/mobile/android/gradlew.bat +84 -0
- package/blockly-rc/demos/mobile/android/settings.gradle +1 -0
- package/blockly-rc/demos/mobile/html/index.html +31 -0
- package/blockly-rc/demos/mobile/html/ln_resources.sh +22 -0
- package/blockly-rc/demos/mobile/html/toolbox_standard.js +333 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/AppDelegate.swift +46 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/Assets.xcassets/Contents.json +6 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/Base.lproj/LaunchScreen.storyboard +25 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/Base.lproj/Main.storyboard +44 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/Info.plist +45 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/ViewController.swift +110 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView.xcodeproj/project.pbxproj +390 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/blockly-rc/demos/mobile/ios/cp_resources.sh +21 -0
- package/blockly-rc/demos/storage/icon.png +0 -0
- package/blockly-rc/demos/storage/index.html +104 -0
- package/blockly-rc/generators/dart/dart_generator.ts +321 -0
- package/blockly-rc/generators/dart/lists.ts +525 -0
- package/blockly-rc/generators/dart/logic.ts +155 -0
- package/blockly-rc/generators/dart/loops.ts +217 -0
- package/blockly-rc/generators/dart/math.ts +559 -0
- package/blockly-rc/generators/dart/procedures.ts +138 -0
- package/blockly-rc/generators/dart/text.ts +405 -0
- package/blockly-rc/generators/dart/variables.ts +32 -0
- package/blockly-rc/generators/dart/variables_dynamic.ts +17 -0
- package/blockly-rc/generators/dart.ts +50 -0
- package/blockly-rc/generators/javascript/javascript_generator.ts +346 -0
- package/blockly-rc/generators/javascript/lists.ts +465 -0
- package/blockly-rc/generators/javascript/logic.ts +153 -0
- package/blockly-rc/generators/javascript/loops.ts +245 -0
- package/blockly-rc/generators/javascript/math.ts +450 -0
- package/blockly-rc/generators/javascript/procedures.ts +142 -0
- package/blockly-rc/generators/javascript/text.ts +418 -0
- package/blockly-rc/generators/javascript/variables.ts +32 -0
- package/blockly-rc/generators/javascript/variables_dynamic.ts +17 -0
- package/blockly-rc/generators/javascript.ts +46 -0
- package/blockly-rc/generators/lua/lists.ts +445 -0
- package/blockly-rc/generators/lua/logic.ts +142 -0
- package/blockly-rc/generators/lua/loops.ts +192 -0
- package/blockly-rc/generators/lua/lua_generator.ts +225 -0
- package/blockly-rc/generators/lua/math.ts +473 -0
- package/blockly-rc/generators/lua/procedures.ts +144 -0
- package/blockly-rc/generators/lua/text.ts +380 -0
- package/blockly-rc/generators/lua/variables.ts +31 -0
- package/blockly-rc/generators/lua/variables_dynamic.ts +17 -0
- package/blockly-rc/generators/lua.ts +44 -0
- package/blockly-rc/generators/php/lists.ts +585 -0
- package/blockly-rc/generators/php/logic.ts +155 -0
- package/blockly-rc/generators/php/loops.ts +218 -0
- package/blockly-rc/generators/php/math.ts +408 -0
- package/blockly-rc/generators/php/php_generator.ts +320 -0
- package/blockly-rc/generators/php/procedures.ts +159 -0
- package/blockly-rc/generators/php/text.ts +315 -0
- package/blockly-rc/generators/php/variables.ts +32 -0
- package/blockly-rc/generators/php/variables_dynamic.ts +17 -0
- package/blockly-rc/generators/php.ts +46 -0
- package/blockly-rc/generators/python/lists.ts +398 -0
- package/blockly-rc/generators/python/logic.ts +148 -0
- package/blockly-rc/generators/python/loops.ts +251 -0
- package/blockly-rc/generators/python/math.ts +434 -0
- package/blockly-rc/generators/python/procedures.ts +159 -0
- package/blockly-rc/generators/python/python_generator.ts +355 -0
- package/blockly-rc/generators/python/text.ts +338 -0
- package/blockly-rc/generators/python/variables.ts +31 -0
- package/blockly-rc/generators/python/variables_dynamic.ts +17 -0
- package/blockly-rc/generators/python.ts +51 -0
- package/blockly-rc/gulpfile.js +54 -0
- package/blockly-rc/jsconfig.json +7 -0
- package/blockly-rc/media/1x1.gif +0 -0
- package/blockly-rc/media/click.mp3 +0 -0
- package/blockly-rc/media/click.ogg +0 -0
- package/blockly-rc/media/click.wav +0 -0
- package/blockly-rc/media/delete-icon.svg +1 -0
- package/blockly-rc/media/delete.mp3 +0 -0
- package/blockly-rc/media/delete.ogg +0 -0
- package/blockly-rc/media/delete.wav +0 -0
- package/blockly-rc/media/disconnect.mp3 +0 -0
- package/blockly-rc/media/disconnect.ogg +0 -0
- package/blockly-rc/media/disconnect.wav +0 -0
- package/blockly-rc/media/dropdown-arrow.svg +1 -0
- package/blockly-rc/media/foldout-icon.svg +1 -0
- package/blockly-rc/media/handclosed.cur +0 -0
- package/blockly-rc/media/handdelete.cur +0 -0
- package/blockly-rc/media/handopen.cur +0 -0
- package/blockly-rc/media/pilcrow.png +0 -0
- package/blockly-rc/media/quote0.png +0 -0
- package/blockly-rc/media/quote1.png +0 -0
- package/blockly-rc/media/resize-handle.svg +3 -0
- package/blockly-rc/media/sprites.png +0 -0
- package/blockly-rc/media/sprites.svg +74 -0
- package/blockly-rc/msg/json/README.md +33 -0
- package/blockly-rc/msg/json/ab.json +222 -0
- package/blockly-rc/msg/json/ace.json +7 -0
- package/blockly-rc/msg/json/af.json +34 -0
- package/blockly-rc/msg/json/am.json +30 -0
- package/blockly-rc/msg/json/ar.json +355 -0
- package/blockly-rc/msg/json/ast.json +10 -0
- package/blockly-rc/msg/json/az.json +332 -0
- package/blockly-rc/msg/json/ba.json +211 -0
- package/blockly-rc/msg/json/bcc.json +290 -0
- package/blockly-rc/msg/json/be-tarask.json +334 -0
- package/blockly-rc/msg/json/be.json +324 -0
- package/blockly-rc/msg/json/bg.json +345 -0
- package/blockly-rc/msg/json/bn.json +189 -0
- package/blockly-rc/msg/json/br.json +334 -0
- package/blockly-rc/msg/json/bs.json +166 -0
- package/blockly-rc/msg/json/ca.json +341 -0
- package/blockly-rc/msg/json/cdo.json +6 -0
- package/blockly-rc/msg/json/ce.json +326 -0
- package/blockly-rc/msg/json/constants.json +12 -0
- package/blockly-rc/msg/json/cs.json +343 -0
- package/blockly-rc/msg/json/da.json +346 -0
- package/blockly-rc/msg/json/de.json +369 -0
- package/blockly-rc/msg/json/diq.json +258 -0
- package/blockly-rc/msg/json/dtp.json +198 -0
- package/blockly-rc/msg/json/dty.json +97 -0
- package/blockly-rc/msg/json/ee.json +160 -0
- package/blockly-rc/msg/json/el.json +356 -0
- package/blockly-rc/msg/json/en-gb.json +199 -0
- package/blockly-rc/msg/json/en.json +400 -0
- package/blockly-rc/msg/json/eo.json +337 -0
- package/blockly-rc/msg/json/es.json +358 -0
- package/blockly-rc/msg/json/et.json +326 -0
- package/blockly-rc/msg/json/eu.json +219 -0
- package/blockly-rc/msg/json/fa.json +341 -0
- package/blockly-rc/msg/json/fi.json +350 -0
- package/blockly-rc/msg/json/fo.json +46 -0
- package/blockly-rc/msg/json/fr.json +373 -0
- package/blockly-rc/msg/json/frr.json +6 -0
- package/blockly-rc/msg/json/gl.json +338 -0
- package/blockly-rc/msg/json/gn.json +54 -0
- package/blockly-rc/msg/json/gor.json +87 -0
- package/blockly-rc/msg/json/ha.json +313 -0
- package/blockly-rc/msg/json/hak.json +17 -0
- package/blockly-rc/msg/json/he.json +354 -0
- package/blockly-rc/msg/json/hi.json +318 -0
- package/blockly-rc/msg/json/hr.json +327 -0
- package/blockly-rc/msg/json/hrx.json +287 -0
- package/blockly-rc/msg/json/hsb.json +128 -0
- package/blockly-rc/msg/json/hu.json +349 -0
- package/blockly-rc/msg/json/hy.json +337 -0
- package/blockly-rc/msg/json/ia.json +337 -0
- package/blockly-rc/msg/json/id.json +335 -0
- package/blockly-rc/msg/json/ig.json +323 -0
- package/blockly-rc/msg/json/inh.json +80 -0
- package/blockly-rc/msg/json/is.json +331 -0
- package/blockly-rc/msg/json/it.json +346 -0
- package/blockly-rc/msg/json/ja.json +361 -0
- package/blockly-rc/msg/json/ka.json +14 -0
- package/blockly-rc/msg/json/kab.json +323 -0
- package/blockly-rc/msg/json/kbd-cyrl.json +84 -0
- package/blockly-rc/msg/json/km.json +29 -0
- package/blockly-rc/msg/json/kn.json +332 -0
- package/blockly-rc/msg/json/ko.json +372 -0
- package/blockly-rc/msg/json/ksh.json +43 -0
- package/blockly-rc/msg/json/ku-latn.json +41 -0
- package/blockly-rc/msg/json/ky.json +71 -0
- package/blockly-rc/msg/json/la.json +6 -0
- package/blockly-rc/msg/json/lb.json +156 -0
- package/blockly-rc/msg/json/lki.json +282 -0
- package/blockly-rc/msg/json/lo.json +92 -0
- package/blockly-rc/msg/json/lrc.json +123 -0
- package/blockly-rc/msg/json/lt.json +321 -0
- package/blockly-rc/msg/json/lv.json +324 -0
- package/blockly-rc/msg/json/mg.json +58 -0
- package/blockly-rc/msg/json/mk.json +178 -0
- package/blockly-rc/msg/json/ml.json +35 -0
- package/blockly-rc/msg/json/mnw.json +90 -0
- package/blockly-rc/msg/json/ms.json +300 -0
- package/blockly-rc/msg/json/my.json +57 -0
- package/blockly-rc/msg/json/mzn.json +6 -0
- package/blockly-rc/msg/json/nb.json +330 -0
- package/blockly-rc/msg/json/ne.json +247 -0
- package/blockly-rc/msg/json/nl.json +357 -0
- package/blockly-rc/msg/json/oc.json +194 -0
- package/blockly-rc/msg/json/olo.json +37 -0
- package/blockly-rc/msg/json/pa.json +69 -0
- package/blockly-rc/msg/json/pl.json +357 -0
- package/blockly-rc/msg/json/pms.json +324 -0
- package/blockly-rc/msg/json/ps.json +50 -0
- package/blockly-rc/msg/json/pt-br.json +369 -0
- package/blockly-rc/msg/json/pt.json +358 -0
- package/blockly-rc/msg/json/qqq.json +406 -0
- package/blockly-rc/msg/json/ro.json +333 -0
- package/blockly-rc/msg/json/ru.json +363 -0
- package/blockly-rc/msg/json/sc.json +283 -0
- package/blockly-rc/msg/json/sco.json +11 -0
- package/blockly-rc/msg/json/sd.json +158 -0
- package/blockly-rc/msg/json/shn.json +109 -0
- package/blockly-rc/msg/json/si.json +16 -0
- package/blockly-rc/msg/json/sk.json +332 -0
- package/blockly-rc/msg/json/skr-arab.json +117 -0
- package/blockly-rc/msg/json/sl.json +355 -0
- package/blockly-rc/msg/json/smn.json +133 -0
- package/blockly-rc/msg/json/sq.json +343 -0
- package/blockly-rc/msg/json/sr-latn.json +324 -0
- package/blockly-rc/msg/json/sr.json +348 -0
- package/blockly-rc/msg/json/sv.json +347 -0
- package/blockly-rc/msg/json/sw.json +12 -0
- package/blockly-rc/msg/json/synonyms.json +22 -0
- package/blockly-rc/msg/json/ta.json +306 -0
- package/blockly-rc/msg/json/tcy.json +316 -0
- package/blockly-rc/msg/json/tdd.json +109 -0
- package/blockly-rc/msg/json/te.json +101 -0
- package/blockly-rc/msg/json/th.json +333 -0
- package/blockly-rc/msg/json/ti.json +50 -0
- package/blockly-rc/msg/json/tl.json +129 -0
- package/blockly-rc/msg/json/tlh.json +179 -0
- package/blockly-rc/msg/json/tr.json +369 -0
- package/blockly-rc/msg/json/ug-arab.json +132 -0
- package/blockly-rc/msg/json/uk.json +345 -0
- package/blockly-rc/msg/json/ur.json +117 -0
- package/blockly-rc/msg/json/uz.json +36 -0
- package/blockly-rc/msg/json/vi.json +345 -0
- package/blockly-rc/msg/json/xmf.json +96 -0
- package/blockly-rc/msg/json/yo.json +316 -0
- package/blockly-rc/msg/json/zgh.json +83 -0
- package/blockly-rc/msg/json/zh-hans.json +372 -0
- package/blockly-rc/msg/json/zh-hant.json +362 -0
- package/blockly-rc/msg/messages.js +1616 -0
- package/blockly-rc/package-lock.json +12324 -0
- package/blockly-rc/package.json +149 -0
- package/blockly-rc/patches/@microsoft+api-documenter+7.22.4.patch +81 -0
- package/blockly-rc/scripts/goog_module/convert-file.sh +406 -0
- package/blockly-rc/scripts/gulpfiles/appengine_tasks.js +195 -0
- package/blockly-rc/scripts/gulpfiles/build_tasks.js +752 -0
- package/blockly-rc/scripts/gulpfiles/config.js +41 -0
- package/blockly-rc/scripts/gulpfiles/docs_tasks.js +147 -0
- package/blockly-rc/scripts/gulpfiles/git_tasks.js +181 -0
- package/blockly-rc/scripts/gulpfiles/helper_tasks.js +19 -0
- package/blockly-rc/scripts/gulpfiles/package_tasks.js +262 -0
- package/blockly-rc/scripts/gulpfiles/release_tasks.js +183 -0
- package/blockly-rc/scripts/gulpfiles/test_tasks.js +405 -0
- package/blockly-rc/scripts/helpers.js +74 -0
- package/blockly-rc/scripts/i18n/common.py +233 -0
- package/blockly-rc/scripts/i18n/create_messages.py +167 -0
- package/blockly-rc/scripts/i18n/dedup_json.py +72 -0
- package/blockly-rc/scripts/i18n/js_to_json.py +135 -0
- package/blockly-rc/scripts/i18n/tests.py +46 -0
- package/blockly-rc/scripts/migration/cjs2esm +162 -0
- package/blockly-rc/scripts/migration/js2ts +168 -0
- package/blockly-rc/scripts/migration/renamings.json5 +1599 -0
- package/blockly-rc/scripts/package/README.md +93 -0
- package/blockly-rc/scripts/package/core-node.js +31 -0
- package/blockly-rc/scripts/package/index.js +23 -0
- package/blockly-rc/scripts/package/templates/umd-msg.template +16 -0
- package/blockly-rc/scripts/package/templates/umd.template +13 -0
- package/blockly-rc/scripts/themes/blockStyles_example.json +11 -0
- package/blockly-rc/scripts/themes/create_blockStyles.py +181 -0
- package/blockly-rc/scripts/tsick.js +86 -0
- package/blockly-rc/tests/.eslintrc.json +10 -0
- package/blockly-rc/tests/browser/.eslintrc.json +29 -0
- package/blockly-rc/tests/browser/.mocharc.js +6 -0
- package/blockly-rc/tests/browser/test/basic_block_factory_test.mjs +44 -0
- package/blockly-rc/tests/browser/test/basic_block_test.mjs +39 -0
- package/blockly-rc/tests/browser/test/basic_playground_test.mjs +198 -0
- package/blockly-rc/tests/browser/test/block_undo_test.mjs +50 -0
- package/blockly-rc/tests/browser/test/delete_blocks_test.mjs +211 -0
- package/blockly-rc/tests/browser/test/extensive_test.mjs +195 -0
- package/blockly-rc/tests/browser/test/field_edits_test.mjs +61 -0
- package/blockly-rc/tests/browser/test/hooks.mjs +23 -0
- package/blockly-rc/tests/browser/test/mutator_test.mjs +88 -0
- package/blockly-rc/tests/browser/test/procedure_test.mjs +109 -0
- package/blockly-rc/tests/browser/test/test_setup.mjs +589 -0
- package/blockly-rc/tests/browser/test/toolbox_drag_test.mjs +207 -0
- package/blockly-rc/tests/browser/test/workspace_comment_test.mjs +224 -0
- package/blockly-rc/tests/compile/index.html +43 -0
- package/blockly-rc/tests/compile/main.js +53 -0
- package/blockly-rc/tests/compile/test_blocks.js +47 -0
- package/blockly-rc/tests/compile/webdriver.js +81 -0
- package/blockly-rc/tests/generators/functions.xml +561 -0
- package/blockly-rc/tests/generators/golden/generated.dart +1604 -0
- package/blockly-rc/tests/generators/golden/generated.js +1552 -0
- package/blockly-rc/tests/generators/golden/generated.lua +1828 -0
- package/blockly-rc/tests/generators/golden/generated.php +1611 -0
- package/blockly-rc/tests/generators/golden/generated.py +1407 -0
- package/blockly-rc/tests/generators/index.html +405 -0
- package/blockly-rc/tests/generators/lists.xml +8675 -0
- package/blockly-rc/tests/generators/logic.xml +1019 -0
- package/blockly-rc/tests/generators/loops1.xml +345 -0
- package/blockly-rc/tests/generators/loops2.xml +891 -0
- package/blockly-rc/tests/generators/loops3.xml +735 -0
- package/blockly-rc/tests/generators/math.xml +2077 -0
- package/blockly-rc/tests/generators/text.xml +4651 -0
- package/blockly-rc/tests/generators/unittest.js +103 -0
- package/blockly-rc/tests/generators/unittest_dart.js +163 -0
- package/blockly-rc/tests/generators/unittest_javascript.js +167 -0
- package/blockly-rc/tests/generators/unittest_lua.js +165 -0
- package/blockly-rc/tests/generators/unittest_php.js +154 -0
- package/blockly-rc/tests/generators/unittest_python.js +138 -0
- package/blockly-rc/tests/generators/variables.xml +68 -0
- package/blockly-rc/tests/generators/webdriver.js +123 -0
- package/blockly-rc/tests/media/200px.png +0 -0
- package/blockly-rc/tests/media/30px.png +0 -0
- package/blockly-rc/tests/media/50px.png +0 -0
- package/blockly-rc/tests/media/a.png +0 -0
- package/blockly-rc/tests/media/arrow.png +0 -0
- package/blockly-rc/tests/media/b.png +0 -0
- package/blockly-rc/tests/media/c.png +0 -0
- package/blockly-rc/tests/media/d.png +0 -0
- package/blockly-rc/tests/media/e.png +0 -0
- package/blockly-rc/tests/media/f.png +0 -0
- package/blockly-rc/tests/media/g.png +0 -0
- package/blockly-rc/tests/media/h.png +0 -0
- package/blockly-rc/tests/media/i.png +0 -0
- package/blockly-rc/tests/media/j.png +0 -0
- package/blockly-rc/tests/media/k.png +0 -0
- package/blockly-rc/tests/media/l.png +0 -0
- package/blockly-rc/tests/media/m.png +0 -0
- package/blockly-rc/tests/migration/renamings.schema.json +59 -0
- package/blockly-rc/tests/migration/validate-renamings.mjs +60 -0
- package/blockly-rc/tests/mocha/.eslintrc.json +21 -0
- package/blockly-rc/tests/mocha/.mocharc.js +6 -0
- package/blockly-rc/tests/mocha/astnode_test.js +850 -0
- package/blockly-rc/tests/mocha/block_json_test.js +777 -0
- package/blockly-rc/tests/mocha/block_test.js +2743 -0
- package/blockly-rc/tests/mocha/blocks/lists_test.js +196 -0
- package/blockly-rc/tests/mocha/blocks/logic_ternary_test.js +320 -0
- package/blockly-rc/tests/mocha/blocks/loops_test.js +56 -0
- package/blockly-rc/tests/mocha/blocks/procedures_test.js +2495 -0
- package/blockly-rc/tests/mocha/blocks/variables_test.js +311 -0
- package/blockly-rc/tests/mocha/clipboard_test.js +136 -0
- package/blockly-rc/tests/mocha/comment_deserialization_test.js +122 -0
- package/blockly-rc/tests/mocha/comment_test.js +170 -0
- package/blockly-rc/tests/mocha/comment_view_test.js +188 -0
- package/blockly-rc/tests/mocha/connection_checker_test.js +666 -0
- package/blockly-rc/tests/mocha/connection_db_test.js +362 -0
- package/blockly-rc/tests/mocha/connection_test.js +3738 -0
- package/blockly-rc/tests/mocha/contextmenu_items_test.js +488 -0
- package/blockly-rc/tests/mocha/contextmenu_test.js +71 -0
- package/blockly-rc/tests/mocha/cursor_test.js +134 -0
- package/blockly-rc/tests/mocha/dropdowndiv_test.js +116 -0
- package/blockly-rc/tests/mocha/event_block_change_test.js +126 -0
- package/blockly-rc/tests/mocha/event_block_create_test.js +109 -0
- package/blockly-rc/tests/mocha/event_block_delete_test.js +55 -0
- package/blockly-rc/tests/mocha/event_block_drag_test.js +36 -0
- package/blockly-rc/tests/mocha/event_block_field_intermediate_change_test.js +67 -0
- package/blockly-rc/tests/mocha/event_block_move_test.js +39 -0
- package/blockly-rc/tests/mocha/event_bubble_open_test.js +42 -0
- package/blockly-rc/tests/mocha/event_click_test.js +40 -0
- package/blockly-rc/tests/mocha/event_comment_change_test.js +39 -0
- package/blockly-rc/tests/mocha/event_comment_collapse_test.js +34 -0
- package/blockly-rc/tests/mocha/event_comment_create_test.js +38 -0
- package/blockly-rc/tests/mocha/event_comment_delete_test.js +38 -0
- package/blockly-rc/tests/mocha/event_comment_drag_test.js +35 -0
- package/blockly-rc/tests/mocha/event_comment_move_test.js +40 -0
- package/blockly-rc/tests/mocha/event_comment_resize_test.js +38 -0
- package/blockly-rc/tests/mocha/event_marker_move_test.js +44 -0
- package/blockly-rc/tests/mocha/event_selected_test.js +41 -0
- package/blockly-rc/tests/mocha/event_test.js +1578 -0
- package/blockly-rc/tests/mocha/event_theme_change_test.js +36 -0
- package/blockly-rc/tests/mocha/event_toolbox_item_select_test.js +64 -0
- package/blockly-rc/tests/mocha/event_trashcan_open_test.js +36 -0
- package/blockly-rc/tests/mocha/event_var_create_test.js +54 -0
- package/blockly-rc/tests/mocha/event_var_delete_test.js +54 -0
- package/blockly-rc/tests/mocha/event_var_rename_test.js +39 -0
- package/blockly-rc/tests/mocha/event_var_type_change_test.js +43 -0
- package/blockly-rc/tests/mocha/event_viewport_test.js +39 -0
- package/blockly-rc/tests/mocha/extensions_test.js +613 -0
- package/blockly-rc/tests/mocha/field_checkbox_test.js +299 -0
- package/blockly-rc/tests/mocha/field_colour_test.js +395 -0
- package/blockly-rc/tests/mocha/field_dropdown_test.js +282 -0
- package/blockly-rc/tests/mocha/field_image_test.js +241 -0
- package/blockly-rc/tests/mocha/field_label_serializable_test.js +252 -0
- package/blockly-rc/tests/mocha/field_label_test.js +226 -0
- package/blockly-rc/tests/mocha/field_number_test.js +505 -0
- package/blockly-rc/tests/mocha/field_registry_test.js +116 -0
- package/blockly-rc/tests/mocha/field_test.js +822 -0
- package/blockly-rc/tests/mocha/field_textinput_test.js +297 -0
- package/blockly-rc/tests/mocha/field_variable_test.js +611 -0
- package/blockly-rc/tests/mocha/flyout_test.js +638 -0
- package/blockly-rc/tests/mocha/generator_test.js +233 -0
- package/blockly-rc/tests/mocha/gesture_test.js +97 -0
- package/blockly-rc/tests/mocha/icon_test.js +369 -0
- package/blockly-rc/tests/mocha/index.html +229 -0
- package/blockly-rc/tests/mocha/input_test.js +296 -0
- package/blockly-rc/tests/mocha/insertion_marker_manager_test.js +443 -0
- package/blockly-rc/tests/mocha/insertion_marker_test.js +432 -0
- package/blockly-rc/tests/mocha/jso_deserialization_test.js +849 -0
- package/blockly-rc/tests/mocha/jso_serialization_test.js +1067 -0
- package/blockly-rc/tests/mocha/json_test.js +315 -0
- package/blockly-rc/tests/mocha/keydown_test.js +364 -0
- package/blockly-rc/tests/mocha/layering_test.js +95 -0
- package/blockly-rc/tests/mocha/metrics_test.js +671 -0
- package/blockly-rc/tests/mocha/mutator_test.js +87 -0
- package/blockly-rc/tests/mocha/names_test.js +97 -0
- package/blockly-rc/tests/mocha/old_workspace_comment_test.js +256 -0
- package/blockly-rc/tests/mocha/procedure_map_test.js +57 -0
- package/blockly-rc/tests/mocha/registry_test.js +281 -0
- package/blockly-rc/tests/mocha/render_management_test.js +127 -0
- package/blockly-rc/tests/mocha/serializer_test.js +2104 -0
- package/blockly-rc/tests/mocha/shortcut_registry_test.js +450 -0
- package/blockly-rc/tests/mocha/test_helpers/block_definitions.js +204 -0
- package/blockly-rc/tests/mocha/test_helpers/code_generation.js +115 -0
- package/blockly-rc/tests/mocha/test_helpers/common.js +106 -0
- package/blockly-rc/tests/mocha/test_helpers/events.js +290 -0
- package/blockly-rc/tests/mocha/test_helpers/fields.js +310 -0
- package/blockly-rc/tests/mocha/test_helpers/icon_mocks.js +81 -0
- package/blockly-rc/tests/mocha/test_helpers/procedures.js +302 -0
- package/blockly-rc/tests/mocha/test_helpers/serialization.js +124 -0
- package/blockly-rc/tests/mocha/test_helpers/setup_teardown.js +209 -0
- package/blockly-rc/tests/mocha/test_helpers/toolbox_definitions.js +271 -0
- package/blockly-rc/tests/mocha/test_helpers/user_input.js +62 -0
- package/blockly-rc/tests/mocha/test_helpers/variables.js +23 -0
- package/blockly-rc/tests/mocha/test_helpers/warnings.js +83 -0
- package/blockly-rc/tests/mocha/test_helpers/workspace.js +1691 -0
- package/blockly-rc/tests/mocha/theme_test.js +307 -0
- package/blockly-rc/tests/mocha/toolbox_test.js +761 -0
- package/blockly-rc/tests/mocha/tooltip_test.js +276 -0
- package/blockly-rc/tests/mocha/touch_test.js +109 -0
- package/blockly-rc/tests/mocha/trashcan_test.js +375 -0
- package/blockly-rc/tests/mocha/utils_test.js +536 -0
- package/blockly-rc/tests/mocha/variable_map_test.js +509 -0
- package/blockly-rc/tests/mocha/variable_model_test.js +85 -0
- package/blockly-rc/tests/mocha/webdriver.js +96 -0
- package/blockly-rc/tests/mocha/widget_div_test.js +272 -0
- package/blockly-rc/tests/mocha/workspace_comment_test.js +171 -0
- package/blockly-rc/tests/mocha/workspace_svg_test.js +414 -0
- package/blockly-rc/tests/mocha/workspace_test.js +27 -0
- package/blockly-rc/tests/mocha/xml_test.js +951 -0
- package/blockly-rc/tests/mocha/zoom_controls_test.js +81 -0
- package/blockly-rc/tests/multi_playground.html +482 -0
- package/blockly-rc/tests/node/.eslintrc.json +12 -0
- package/blockly-rc/tests/node/.mocharc.js +6 -0
- package/blockly-rc/tests/node/run_node_test.mjs +72 -0
- package/blockly-rc/tests/playground.html +1280 -0
- package/blockly-rc/tests/playgrounds/advanced_playground.html +158 -0
- package/blockly-rc/tests/playgrounds/iframe.html +40 -0
- package/blockly-rc/tests/playgrounds/screenshot.js +123 -0
- package/blockly-rc/tests/scripts/check_metadata.sh +166 -0
- package/blockly-rc/tests/scripts/compile_typings.sh +32 -0
- package/blockly-rc/tests/scripts/load.mjs +140 -0
- package/blockly-rc/tests/scripts/setup_linux_env.sh +7 -0
- package/blockly-rc/tests/scripts/update_metadata.sh +46 -0
- package/blockly-rc/tests/themes/test_themes.js +62 -0
- package/blockly-rc/tests/typescript/README.md +4 -0
- package/blockly-rc/tests/typescript/src/field/different_user_input.ts +81 -0
- package/blockly-rc/tests/typescript/src/generators/dart.ts +24 -0
- package/blockly-rc/tests/typescript/src/generators/javascript.ts +28 -0
- package/blockly-rc/tests/typescript/src/generators/lua.ts +24 -0
- package/blockly-rc/tests/typescript/src/generators/php.ts +24 -0
- package/blockly-rc/tests/typescript/src/generators/python.ts +24 -0
- package/blockly-rc/tests/typescript/src/generators.ts +31 -0
- package/blockly-rc/tests/typescript/src/msg.ts +20 -0
- package/blockly-rc/tests/typescript/tsconfig.json +20 -0
- package/blockly-rc/tests/xml/README.txt +11 -0
- package/blockly-rc/tests/xml/blockly.xsd +178 -0
- package/blockly-rc/tests/xml/invalid.xml +6 -0
- package/blockly-rc/tests/xml/toolbox.xml +311 -0
- package/blockly-rc/tests/xml/workspace.xml +114 -0
- package/blockly-rc/tsconfig.json +37 -0
- package/blockly-rc/tsdoc.json +35 -0
- package/blockly-rc/typings/README.md +5 -0
- package/blockly-rc/typings/blocks.d.ts +17 -0
- package/blockly-rc/typings/core.d.ts +7 -0
- package/blockly-rc/typings/dart.d.ts +7 -0
- package/blockly-rc/typings/index.d.ts +10 -0
- package/blockly-rc/typings/javascript.d.ts +7 -0
- package/blockly-rc/typings/lua.d.ts +7 -0
- package/blockly-rc/typings/msg/ab.d.ts +8 -0
- package/blockly-rc/typings/msg/ace.d.ts +8 -0
- package/blockly-rc/typings/msg/af.d.ts +8 -0
- package/blockly-rc/typings/msg/am.d.ts +8 -0
- package/blockly-rc/typings/msg/ar.d.ts +8 -0
- package/blockly-rc/typings/msg/ast.d.ts +8 -0
- package/blockly-rc/typings/msg/az.d.ts +8 -0
- package/blockly-rc/typings/msg/ba.d.ts +8 -0
- package/blockly-rc/typings/msg/bcc.d.ts +8 -0
- package/blockly-rc/typings/msg/be-tarask.d.ts +8 -0
- package/blockly-rc/typings/msg/be.d.ts +8 -0
- package/blockly-rc/typings/msg/bg.d.ts +8 -0
- package/blockly-rc/typings/msg/bn.d.ts +8 -0
- package/blockly-rc/typings/msg/br.d.ts +8 -0
- package/blockly-rc/typings/msg/bs.d.ts +8 -0
- package/blockly-rc/typings/msg/ca.d.ts +8 -0
- package/blockly-rc/typings/msg/cdo.d.ts +8 -0
- package/blockly-rc/typings/msg/ce.d.ts +8 -0
- package/blockly-rc/typings/msg/cs.d.ts +8 -0
- package/blockly-rc/typings/msg/da.d.ts +8 -0
- package/blockly-rc/typings/msg/de.d.ts +8 -0
- package/blockly-rc/typings/msg/diq.d.ts +8 -0
- package/blockly-rc/typings/msg/dtp.d.ts +8 -0
- package/blockly-rc/typings/msg/dty.d.ts +8 -0
- package/blockly-rc/typings/msg/ee.d.ts +8 -0
- package/blockly-rc/typings/msg/el.d.ts +8 -0
- package/blockly-rc/typings/msg/en-gb.d.ts +8 -0
- package/blockly-rc/typings/msg/en.d.ts +8 -0
- package/blockly-rc/typings/msg/eo.d.ts +8 -0
- package/blockly-rc/typings/msg/es.d.ts +8 -0
- package/blockly-rc/typings/msg/et.d.ts +8 -0
- package/blockly-rc/typings/msg/eu.d.ts +8 -0
- package/blockly-rc/typings/msg/fa.d.ts +8 -0
- package/blockly-rc/typings/msg/fi.d.ts +8 -0
- package/blockly-rc/typings/msg/fo.d.ts +8 -0
- package/blockly-rc/typings/msg/fr.d.ts +8 -0
- package/blockly-rc/typings/msg/frr.d.ts +8 -0
- package/blockly-rc/typings/msg/gl.d.ts +8 -0
- package/blockly-rc/typings/msg/gn.d.ts +8 -0
- package/blockly-rc/typings/msg/gor.d.ts +8 -0
- package/blockly-rc/typings/msg/ha.d.ts +8 -0
- package/blockly-rc/typings/msg/hak.d.ts +8 -0
- package/blockly-rc/typings/msg/he.d.ts +8 -0
- package/blockly-rc/typings/msg/hi.d.ts +8 -0
- package/blockly-rc/typings/msg/hr.d.ts +8 -0
- package/blockly-rc/typings/msg/hrx.d.ts +8 -0
- package/blockly-rc/typings/msg/hsb.d.ts +8 -0
- package/blockly-rc/typings/msg/hu.d.ts +8 -0
- package/blockly-rc/typings/msg/hy.d.ts +8 -0
- package/blockly-rc/typings/msg/ia.d.ts +8 -0
- package/blockly-rc/typings/msg/id.d.ts +8 -0
- package/blockly-rc/typings/msg/ig.d.ts +8 -0
- package/blockly-rc/typings/msg/inh.d.ts +8 -0
- package/blockly-rc/typings/msg/is.d.ts +8 -0
- package/blockly-rc/typings/msg/it.d.ts +8 -0
- package/blockly-rc/typings/msg/ja.d.ts +8 -0
- package/blockly-rc/typings/msg/ka.d.ts +8 -0
- package/blockly-rc/typings/msg/kab.d.ts +8 -0
- package/blockly-rc/typings/msg/kbd-cyrl.d.ts +8 -0
- package/blockly-rc/typings/msg/km.d.ts +8 -0
- package/blockly-rc/typings/msg/kn.d.ts +8 -0
- package/blockly-rc/typings/msg/ko.d.ts +8 -0
- package/blockly-rc/typings/msg/ksh.d.ts +8 -0
- package/blockly-rc/typings/msg/ku-latn.d.ts +8 -0
- package/blockly-rc/typings/msg/ky.d.ts +8 -0
- package/blockly-rc/typings/msg/la.d.ts +8 -0
- package/blockly-rc/typings/msg/lb.d.ts +8 -0
- package/blockly-rc/typings/msg/lki.d.ts +8 -0
- package/blockly-rc/typings/msg/lo.d.ts +8 -0
- package/blockly-rc/typings/msg/lrc.d.ts +8 -0
- package/blockly-rc/typings/msg/lt.d.ts +8 -0
- package/blockly-rc/typings/msg/lv.d.ts +8 -0
- package/blockly-rc/typings/msg/mg.d.ts +8 -0
- package/blockly-rc/typings/msg/mk.d.ts +8 -0
- package/blockly-rc/typings/msg/ml.d.ts +8 -0
- package/blockly-rc/typings/msg/mnw.d.ts +8 -0
- package/blockly-rc/typings/msg/ms.d.ts +8 -0
- package/blockly-rc/typings/msg/msg.d.ts +440 -0
- package/blockly-rc/typings/msg/my.d.ts +8 -0
- package/blockly-rc/typings/msg/mzn.d.ts +8 -0
- package/blockly-rc/typings/msg/nb.d.ts +8 -0
- package/blockly-rc/typings/msg/ne.d.ts +8 -0
- package/blockly-rc/typings/msg/nl.d.ts +8 -0
- package/blockly-rc/typings/msg/oc.d.ts +8 -0
- package/blockly-rc/typings/msg/olo.d.ts +8 -0
- package/blockly-rc/typings/msg/pa.d.ts +8 -0
- package/blockly-rc/typings/msg/pl.d.ts +8 -0
- package/blockly-rc/typings/msg/pms.d.ts +8 -0
- package/blockly-rc/typings/msg/ps.d.ts +8 -0
- package/blockly-rc/typings/msg/pt-br.d.ts +8 -0
- package/blockly-rc/typings/msg/pt.d.ts +8 -0
- package/blockly-rc/typings/msg/ro.d.ts +8 -0
- package/blockly-rc/typings/msg/ru.d.ts +8 -0
- package/blockly-rc/typings/msg/sc.d.ts +8 -0
- package/blockly-rc/typings/msg/sco.d.ts +8 -0
- package/blockly-rc/typings/msg/sd.d.ts +8 -0
- package/blockly-rc/typings/msg/shn.d.ts +8 -0
- package/blockly-rc/typings/msg/si.d.ts +8 -0
- package/blockly-rc/typings/msg/sk.d.ts +8 -0
- package/blockly-rc/typings/msg/skr-arab.d.ts +8 -0
- package/blockly-rc/typings/msg/sl.d.ts +8 -0
- package/blockly-rc/typings/msg/smn.d.ts +8 -0
- package/blockly-rc/typings/msg/sq.d.ts +8 -0
- package/blockly-rc/typings/msg/sr-latn.d.ts +8 -0
- package/blockly-rc/typings/msg/sr.d.ts +8 -0
- package/blockly-rc/typings/msg/sv.d.ts +8 -0
- package/blockly-rc/typings/msg/sw.d.ts +8 -0
- package/blockly-rc/typings/msg/ta.d.ts +8 -0
- package/blockly-rc/typings/msg/tcy.d.ts +8 -0
- package/blockly-rc/typings/msg/tdd.d.ts +8 -0
- package/blockly-rc/typings/msg/te.d.ts +8 -0
- package/blockly-rc/typings/msg/th.d.ts +8 -0
- package/blockly-rc/typings/msg/ti.d.ts +8 -0
- package/blockly-rc/typings/msg/tl.d.ts +8 -0
- package/blockly-rc/typings/msg/tlh.d.ts +8 -0
- package/blockly-rc/typings/msg/tr.d.ts +8 -0
- package/blockly-rc/typings/msg/ug-arab.d.ts +8 -0
- package/blockly-rc/typings/msg/uk.d.ts +8 -0
- package/blockly-rc/typings/msg/ur.d.ts +8 -0
- package/blockly-rc/typings/msg/uz.d.ts +8 -0
- package/blockly-rc/typings/msg/vi.d.ts +8 -0
- package/blockly-rc/typings/msg/xmf.d.ts +8 -0
- package/blockly-rc/typings/msg/yo.d.ts +8 -0
- package/blockly-rc/typings/msg/zgh.d.ts +8 -0
- package/blockly-rc/typings/msg/zh-hans.d.ts +8 -0
- package/blockly-rc/typings/msg/zh-hant.d.ts +8 -0
- package/blockly-rc/typings/php.d.ts +7 -0
- package/blockly-rc/typings/python.d.ts +7 -0
- package/blockly-rc/typings/templates/blockly-header.template +11 -0
- package/blockly-rc/typings/templates/blockly-interfaces.template +83 -0
- package/blockly-rc/typings/templates/msg.template +15 -0
- package/blockly-rc/typings/tsconfig.json +23 -0
- package/continuous-toolbox.d.ts +1 -0
- package/dist/main.js +2 -0
- package/dist/main.js.LICENSE.txt +163 -0
- package/media/delete-icon.svg +10 -0
- package/media/resize-handle.svg +3 -0
- package/msg/scratch_msgs.js +184 -164
- package/package.json +25 -40
- package/release.config.js +8 -0
- package/src/block_reporting.js +31 -0
- package/src/blocks/colour.js +56 -0
- package/src/blocks/control.js +492 -0
- package/src/blocks/data.js +690 -0
- package/src/blocks/event.js +305 -0
- package/src/blocks/looks.js +537 -0
- package/src/blocks/math.js +137 -0
- package/src/blocks/matrix.js +47 -0
- package/src/blocks/motion.js +513 -0
- package/src/blocks/note.js +48 -0
- package/src/blocks/operators.js +463 -0
- package/src/blocks/procedures.js +1009 -0
- package/src/blocks/sensing.js +441 -0
- package/src/blocks/sound.js +205 -0
- package/src/blocks/text.js +45 -0
- package/src/blocks/vertical_extensions.js +309 -0
- package/src/categories.js +15 -0
- package/src/checkable_continuous_flyout.js +138 -0
- package/src/checkbox_bubble.js +282 -0
- package/src/colours.js +77 -0
- package/src/constants.js +63 -0
- package/src/context_menu_items.js +150 -0
- package/src/css.js +1197 -0
- package/src/data_category.js +556 -0
- package/src/events/events_block_comment_base.js +35 -0
- package/src/events/events_block_comment_change.js +43 -0
- package/src/events/events_block_comment_collapse.js +43 -0
- package/src/events/events_block_comment_create.js +52 -0
- package/src/events/events_block_comment_delete.js +27 -0
- package/src/events/events_block_comment_move.js +54 -0
- package/src/events/events_block_comment_resize.js +52 -0
- package/src/events/events_block_drag_end.js +33 -0
- package/src/events/events_block_drag_outside.js +30 -0
- package/src/events/events_scratch_variable_create.js +67 -0
- package/src/fields/field_angle.js +433 -0
- package/src/fields/field_colour_slider.js +388 -0
- package/src/fields/field_dropdown.js +42 -0
- package/src/fields/field_matrix.js +634 -0
- package/src/fields/field_note.js +937 -0
- package/src/fields/field_number.js +380 -0
- package/src/fields/field_textinput_removable.js +107 -0
- package/src/fields/field_variable.js +171 -0
- package/src/fields/field_variable_getter.js +109 -0
- package/src/fields/field_vertical_separator.js +139 -0
- package/src/flyout_checkbox_icon.js +88 -0
- package/src/glows.js +98 -0
- package/src/index.ts +137 -0
- package/src/procedures.js +425 -0
- package/src/recyclable_block_flyout_inflater.js +194 -0
- package/src/renderer/bowler_hat.js +17 -0
- package/src/renderer/constants.js +45 -0
- package/src/renderer/drawer.js +51 -0
- package/src/renderer/path_object.js +35 -0
- package/src/renderer/render_info.js +98 -0
- package/src/renderer/renderer.js +74 -0
- package/src/scratch_block_paster.js +46 -0
- package/src/scratch_blocks_utils.js +148 -0
- package/src/scratch_comment_bubble.js +169 -0
- package/src/scratch_comment_icon.js +195 -0
- package/src/scratch_connection_checker.js +29 -0
- package/src/scratch_continuous_category.js +80 -0
- package/src/scratch_continuous_toolbox.js +78 -0
- package/src/scratch_dragger.js +142 -0
- package/src/scratch_variable_map.js +25 -0
- package/src/scratch_variable_model.js +24 -0
- package/src/shadows.js +61 -0
- package/src/status_indicator_label.js +186 -0
- package/src/status_indicator_label_flyout_inflater.js +42 -0
- package/src/variables.js +355 -0
- package/temp-use-blockly-v12-rc.sh +26 -0
- package/tsconfig.json +13 -0
- package/blockly_compressed_horizontal.js +0 -2255
- package/blockly_compressed_vertical.js +0 -2283
- package/blockly_uncompressed_horizontal.js +0 -1210
- package/blockly_uncompressed_vertical.js +0 -1210
- package/blocks_common/colour.js +0 -61
- package/blocks_common/math.js +0 -159
- package/blocks_common/matrix.js +0 -54
- package/blocks_common/note.js +0 -58
- package/blocks_common/text.js +0 -57
- package/blocks_compressed.js +0 -36
- package/blocks_compressed_horizontal.js +0 -67
- package/blocks_compressed_vertical.js +0 -208
- package/blocks_horizontal/control.js +0 -212
- package/blocks_horizontal/default_toolbox.js +0 -139
- package/blocks_horizontal/event.js +0 -190
- package/blocks_horizontal/wedo.js +0 -325
- package/blocks_vertical/control.js +0 -532
- package/blocks_vertical/data.js +0 -666
- package/blocks_vertical/default_toolbox.js +0 -564
- package/blocks_vertical/event.js +0 -329
- package/blocks_vertical/extensions.js +0 -294
- package/blocks_vertical/looks.js +0 -591
- package/blocks_vertical/motion.js +0 -587
- package/blocks_vertical/operators.js +0 -470
- package/blocks_vertical/procedures.js +0 -973
- package/blocks_vertical/sensing.js +0 -539
- package/blocks_vertical/sound.js +0 -246
- package/blocks_vertical/vertical_extensions.js +0 -266
- package/build/gen_blocks.js +0 -1
- package/build/test_expect.js +0 -1
- package/build/test_input.js +0 -1
- package/build.py +0 -636
- package/cleanup.sh +0 -101
- package/core/block.js +0 -1837
- package/core/block_animations.js +0 -107
- package/core/block_drag_surface.js +0 -299
- package/core/block_dragger.js +0 -421
- package/core/block_events.js +0 -531
- package/core/block_render_svg_horizontal.js +0 -890
- package/core/block_render_svg_vertical.js +0 -1732
- package/core/block_svg.js +0 -1316
- package/core/blockly.js +0 -622
- package/core/blocks.js +0 -37
- package/core/bubble.js +0 -664
- package/core/bubble_dragger.js +0 -285
- package/core/colours.js +0 -160
- package/core/comment.js +0 -293
- package/core/comment_events.js +0 -539
- package/core/connection.js +0 -766
- package/core/connection_db.js +0 -300
- package/core/constants.js +0 -387
- package/core/contextmenu.js +0 -519
- package/core/css.js +0 -1351
- package/core/data_category.js +0 -490
- package/core/dragged_connection_manager.js +0 -260
- package/core/dropdowndiv.js +0 -408
- package/core/events.js +0 -429
- package/core/events_abstract.js +0 -113
- package/core/extensions.js +0 -450
- package/core/field.js +0 -807
- package/core/field_angle.js +0 -398
- package/core/field_checkbox.js +0 -133
- package/core/field_colour.js +0 -253
- package/core/field_colour_slider.js +0 -387
- package/core/field_date.js +0 -353
- package/core/field_dropdown.js +0 -483
- package/core/field_iconmenu.js +0 -309
- package/core/field_image.js +0 -193
- package/core/field_label.js +0 -136
- package/core/field_label_serializable.js +0 -125
- package/core/field_matrix.js +0 -566
- package/core/field_note.js +0 -850
- package/core/field_number.js +0 -366
- package/core/field_numberdropdown.js +0 -77
- package/core/field_textdropdown.js +0 -164
- package/core/field_textinput.js +0 -675
- package/core/field_textinput_removable.js +0 -105
- package/core/field_variable.js +0 -385
- package/core/field_variable_getter.js +0 -185
- package/core/field_vertical_separator.js +0 -161
- package/core/flyout_base.js +0 -923
- package/core/flyout_button.js +0 -322
- package/core/flyout_dragger.js +0 -83
- package/core/flyout_extension_category_header.js +0 -159
- package/core/flyout_horizontal.js +0 -475
- package/core/flyout_vertical.js +0 -770
- package/core/generator.js +0 -426
- package/core/gesture.js +0 -1011
- package/core/grid.js +0 -227
- package/core/icon.js +0 -205
- package/core/inject.js +0 -491
- package/core/input.js +0 -285
- package/core/insertion_marker_manager.js +0 -678
- package/core/msg.js +0 -62
- package/core/mutator.js +0 -426
- package/core/names.js +0 -198
- package/core/options.js +0 -244
- package/core/procedures.js +0 -577
- package/core/rendered_connection.js +0 -417
- package/core/scratch_block_comment.js +0 -653
- package/core/scratch_blocks_utils.js +0 -244
- package/core/scratch_bubble.js +0 -696
- package/core/scratch_events.js +0 -131
- package/core/scratch_msgs.js +0 -85
- package/core/scrollbar.js +0 -875
- package/core/toolbox.js +0 -801
- package/core/tooltip.js +0 -337
- package/core/touch.js +0 -226
- package/core/trashcan.js +0 -343
- package/core/ui_events.js +0 -91
- package/core/ui_menu_utils.js +0 -68
- package/core/utils.js +0 -948
- package/core/variable_events.js +0 -259
- package/core/variable_map.js +0 -415
- package/core/variable_model.js +0 -116
- package/core/variables.js +0 -674
- package/core/warning.js +0 -199
- package/core/widgetdiv.js +0 -344
- package/core/workspace.js +0 -673
- package/core/workspace_audio.js +0 -170
- package/core/workspace_comment.js +0 -432
- package/core/workspace_comment_render_svg.js +0 -723
- package/core/workspace_comment_svg.js +0 -611
- package/core/workspace_drag_surface_svg.js +0 -195
- package/core/workspace_dragger.js +0 -132
- package/core/workspace_svg.js +0 -2267
- package/core/xml.js +0 -919
- package/core/zoom_controls.js +0 -301
- package/dist/horizontal.js +0 -222
- package/dist/vertical.js +0 -222
- package/dist/web/horizontal.js +0 -232
- package/dist/web/vertical.js +0 -232
- package/local_build.sh +0 -70
- package/pack/scratch-blocks-1.1.206.tgz +0 -0
- package/pull_from_blockly.sh +0 -151
- package/shim/blockly_compressed_horizontal-blocks_compressed.js +0 -1
- package/shim/blockly_compressed_horizontal.Blockly.js +0 -1
- package/shim/blockly_compressed_horizontal.goog.js +0 -1
- package/shim/blockly_compressed_horizontal.js +0 -1
- package/shim/blockly_compressed_vertical-blocks_compressed.js +0 -1
- package/shim/blockly_compressed_vertical.Blockly.js +0 -1
- package/shim/blockly_compressed_vertical.goog.js +0 -1
- package/shim/blockly_compressed_vertical.js +0 -1
- package/shim/blocks_compressed_horizontal-blockly_compressed_horizontal-messages.js +0 -1
- package/shim/blocks_compressed_horizontal.js +0 -1
- package/shim/blocks_compressed_vertical-blockly_compressed_vertical-messages.js +0 -1
- package/shim/blocks_compressed_vertical.js +0 -1
- package/shim/gh-pages.js +0 -1
- package/shim/horizontal.js +0 -1
- package/shim/index.js +0 -17
- package/shim/vertical.js +0 -1
- /package/media/{comment-arrow-down.svg → foldout-icon.svg} +0 -0
|
@@ -0,0 +1,1828 @@
|
|
|
1
|
+
function unittest_report()
|
|
2
|
+
-- Create test report.
|
|
3
|
+
local report = {}
|
|
4
|
+
local summary = {}
|
|
5
|
+
local fails = 0
|
|
6
|
+
for _, v in pairs(unittestResults) do
|
|
7
|
+
if v["success"] then
|
|
8
|
+
table.insert(summary, ".")
|
|
9
|
+
else
|
|
10
|
+
table.insert(summary, "F")
|
|
11
|
+
fails = fails + 1
|
|
12
|
+
table.insert(report, "FAIL: " .. v["title"])
|
|
13
|
+
table.insert(report, v["log"])
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
table.insert(report, 1, table.concat(summary))
|
|
17
|
+
table.insert(report, "")
|
|
18
|
+
table.insert(report, "Number of tests run: " .. #unittestResults)
|
|
19
|
+
table.insert(report, "")
|
|
20
|
+
if fails > 0 then
|
|
21
|
+
table.insert(report, "FAILED (failures=" .. fails .. ")")
|
|
22
|
+
else
|
|
23
|
+
table.insert(report, "OK")
|
|
24
|
+
end
|
|
25
|
+
return table.concat(report, "\n")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
function assertEquals(actual, expected, message)
|
|
29
|
+
-- Asserts that a value equals another value.
|
|
30
|
+
assert(unittestResults ~= nil, "Orphaned assert equals: " .. message)
|
|
31
|
+
if type(actual) == "table" and type(expected) == "table" then
|
|
32
|
+
local lists_match = #actual == #expected
|
|
33
|
+
if lists_match then
|
|
34
|
+
for i, v1 in ipairs(actual) do
|
|
35
|
+
local v2 = expected[i]
|
|
36
|
+
if type(v1) == "number" and type(v2) == "number" then
|
|
37
|
+
if math.abs(v1 - v2) > 1e-9 then
|
|
38
|
+
lists_match = false
|
|
39
|
+
end
|
|
40
|
+
elseif v1 ~= v2 then
|
|
41
|
+
lists_match = false
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
if lists_match then
|
|
46
|
+
table.insert(unittestResults, {success=true, log="OK", title=message})
|
|
47
|
+
return
|
|
48
|
+
else
|
|
49
|
+
-- produce the non-matching strings for a human-readable error
|
|
50
|
+
expected = "{" .. table.concat(expected, ", ") .. "}"
|
|
51
|
+
actual = "{" .. table.concat(actual, ", ") .. "}"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
if actual == expected or (type(actual) == "number" and type(expected) == "number" and math.abs(actual - expected) < 1e-9) then
|
|
55
|
+
table.insert(unittestResults, {success=true, log="OK", title=message})
|
|
56
|
+
else
|
|
57
|
+
table.insert(unittestResults, {success=false, log=string.format("Expected: %s\nActual: %s", tostring(expected), tostring(actual)), title=message})
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
function unittest_fail(message)
|
|
62
|
+
-- Always assert an error.
|
|
63
|
+
assert(unittestResults ~= nil, "Orphaned assert fail: " .. message)
|
|
64
|
+
table.insert(unittestResults, {success=false, log="Fail.", title=message})
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
-- Describe this function...
|
|
68
|
+
function test_if()
|
|
69
|
+
if false then
|
|
70
|
+
unittest_fail('if false')
|
|
71
|
+
end
|
|
72
|
+
ok = false
|
|
73
|
+
if true then
|
|
74
|
+
ok = true
|
|
75
|
+
end
|
|
76
|
+
assertEquals(ok, true, 'if true')
|
|
77
|
+
ok = false
|
|
78
|
+
if false then
|
|
79
|
+
unittest_fail('if/else false')
|
|
80
|
+
else
|
|
81
|
+
ok = true
|
|
82
|
+
end
|
|
83
|
+
assertEquals(ok, true, 'if/else false')
|
|
84
|
+
ok = false
|
|
85
|
+
if true then
|
|
86
|
+
ok = true
|
|
87
|
+
else
|
|
88
|
+
unittest_fail('if/else true')
|
|
89
|
+
end
|
|
90
|
+
assertEquals(ok, true, 'if/else true')
|
|
91
|
+
ok = false
|
|
92
|
+
if false then
|
|
93
|
+
unittest_fail('elseif 1')
|
|
94
|
+
elseif true then
|
|
95
|
+
ok = true
|
|
96
|
+
elseif true then
|
|
97
|
+
unittest_fail('elseif 2')
|
|
98
|
+
else
|
|
99
|
+
unittest_fail('elseif 3')
|
|
100
|
+
end
|
|
101
|
+
assertEquals(ok, true, 'elseif 4')
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
-- Describe this function...
|
|
106
|
+
function test_ifelse()
|
|
107
|
+
ok = false
|
|
108
|
+
if true then
|
|
109
|
+
ok = true
|
|
110
|
+
else
|
|
111
|
+
unittest_fail('ifelse true')
|
|
112
|
+
end
|
|
113
|
+
assertEquals(ok, true, 'ifelse true')
|
|
114
|
+
ok = false
|
|
115
|
+
if false then
|
|
116
|
+
unittest_fail('ifelse false')
|
|
117
|
+
else
|
|
118
|
+
ok = true
|
|
119
|
+
end
|
|
120
|
+
assertEquals(ok, true, 'ifelse false')
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
-- Describe this function...
|
|
125
|
+
function test_equalities()
|
|
126
|
+
assertEquals(2 == 2, true, 'Equal yes')
|
|
127
|
+
assertEquals(3 == 4, false, 'Equal no')
|
|
128
|
+
assertEquals(5 ~= 6, true, 'Not equal yes')
|
|
129
|
+
assertEquals(3 == 4, false, 'Not equal no')
|
|
130
|
+
assertEquals(5 < 6, true, 'Smaller yes')
|
|
131
|
+
assertEquals(7 < 7, false, 'Smaller no')
|
|
132
|
+
assertEquals(9 > 8, true, 'Greater yes')
|
|
133
|
+
assertEquals(10 > 10, false, 'Greater no')
|
|
134
|
+
assertEquals(11 <= 11, true, 'Smaller-equal yes')
|
|
135
|
+
assertEquals(13 <= 12, false, 'Smaller-equal no')
|
|
136
|
+
assertEquals(14 >= 14, true, 'Greater-equal yes')
|
|
137
|
+
assertEquals(15 >= 16, false, 'Greater-equal no')
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
-- Describe this function...
|
|
142
|
+
function test_and()
|
|
143
|
+
assertEquals(true and true, true, 'And true/true')
|
|
144
|
+
assertEquals(false and true, false, 'And false/true')
|
|
145
|
+
assertEquals(true and false, false, 'And true/false')
|
|
146
|
+
assertEquals(false and false, false, 'And false/false')
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
-- Describe this function...
|
|
151
|
+
function test_or()
|
|
152
|
+
assertEquals(true or true, true, 'Or true/true')
|
|
153
|
+
assertEquals(false or true, true, 'Or false/true')
|
|
154
|
+
assertEquals(true or false, true, 'Or true/false')
|
|
155
|
+
assertEquals(false or false, false, 'Or false/false')
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
-- Describe this function...
|
|
160
|
+
function test_ternary()
|
|
161
|
+
assertEquals(true and 42 or 99, 42, 'if true')
|
|
162
|
+
assertEquals(false and 42 or 99, 99, 'if true')
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
-- Describe this function...
|
|
167
|
+
function test_foreach()
|
|
168
|
+
log = ''
|
|
169
|
+
for _, x in ipairs({'a', 'b', 'c'}) do
|
|
170
|
+
log = log .. x
|
|
171
|
+
end
|
|
172
|
+
assertEquals(log, 'abc', 'for loop')
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
-- Describe this function...
|
|
177
|
+
function test_repeat()
|
|
178
|
+
count = 0
|
|
179
|
+
for count2 = 1, 10 do
|
|
180
|
+
count = count + 1
|
|
181
|
+
end
|
|
182
|
+
assertEquals(count, 10, 'repeat 10')
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
-- Describe this function...
|
|
187
|
+
function test_while()
|
|
188
|
+
while false do
|
|
189
|
+
unittest_fail('while 0')
|
|
190
|
+
end
|
|
191
|
+
while not true do
|
|
192
|
+
unittest_fail('until 0')
|
|
193
|
+
end
|
|
194
|
+
count = 1
|
|
195
|
+
while count ~= 10 do
|
|
196
|
+
count = count + 1
|
|
197
|
+
end
|
|
198
|
+
assertEquals(count, 10, 'while 10')
|
|
199
|
+
count = 1
|
|
200
|
+
while not (count == 10) do
|
|
201
|
+
count = count + 1
|
|
202
|
+
end
|
|
203
|
+
assertEquals(count, 10, 'until 10')
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
-- Describe this function...
|
|
208
|
+
function test_repeat_ext()
|
|
209
|
+
count = 0
|
|
210
|
+
for count3 = 1, 10 do
|
|
211
|
+
count = count + 1
|
|
212
|
+
end
|
|
213
|
+
assertEquals(count, 10, 'repeat 10')
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
-- Describe this function...
|
|
218
|
+
function test_count_by()
|
|
219
|
+
log = ''
|
|
220
|
+
for x = 1, 8, 2 do
|
|
221
|
+
log = log .. x
|
|
222
|
+
end
|
|
223
|
+
assertEquals(log, '1357', 'count up ints')
|
|
224
|
+
log = ''
|
|
225
|
+
for x = 8, 1, -2 do
|
|
226
|
+
log = log .. x
|
|
227
|
+
end
|
|
228
|
+
assertEquals(log, '8642', 'count down ints')
|
|
229
|
+
loglist = {}
|
|
230
|
+
for x = 1, 8, 1.5 do
|
|
231
|
+
table.insert(loglist, #loglist + 1, x)
|
|
232
|
+
end
|
|
233
|
+
assertEquals(loglist, {1, 2.5, 4, 5.5, 7}, 'count with floats')
|
|
234
|
+
loglist = {}
|
|
235
|
+
x_inc = math.abs(1 - 2)
|
|
236
|
+
if (1 + 0) > (8 + 0) then
|
|
237
|
+
x_inc = -x_inc
|
|
238
|
+
end
|
|
239
|
+
for x = 1 + 0, 8 + 0, x_inc do
|
|
240
|
+
table.insert(loglist, #loglist + 1, x)
|
|
241
|
+
end
|
|
242
|
+
assertEquals(loglist, {1, 2, 3, 4, 5, 6, 7, 8}, 'count up non-trivial ints')
|
|
243
|
+
loglist = {}
|
|
244
|
+
x_inc2 = 2
|
|
245
|
+
if (8 + 0) > (1 + 0) then
|
|
246
|
+
x_inc2 = -x_inc2
|
|
247
|
+
end
|
|
248
|
+
for x = 8 + 0, 1 + 0, x_inc2 do
|
|
249
|
+
table.insert(loglist, #loglist + 1, x)
|
|
250
|
+
end
|
|
251
|
+
assertEquals(loglist, {8, 6, 4, 2}, 'count down non-trivial ints')
|
|
252
|
+
loglist = {}
|
|
253
|
+
x_inc3 = math.abs(1 + 0)
|
|
254
|
+
if (5 + 0.5) > (1 + 0) then
|
|
255
|
+
x_inc3 = -x_inc3
|
|
256
|
+
end
|
|
257
|
+
for x = 5 + 0.5, 1 + 0, x_inc3 do
|
|
258
|
+
table.insert(loglist, #loglist + 1, x)
|
|
259
|
+
end
|
|
260
|
+
assertEquals(loglist, {5.5, 4.5, 3.5, 2.5, 1.5}, 'count with floats')
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
-- Describe this function...
|
|
265
|
+
function test_count_loops()
|
|
266
|
+
log = ''
|
|
267
|
+
for x = 1, 8, 1 do
|
|
268
|
+
log = log .. x
|
|
269
|
+
end
|
|
270
|
+
assertEquals(log, '12345678', 'count up')
|
|
271
|
+
log = ''
|
|
272
|
+
for x = 8, 1, -1 do
|
|
273
|
+
log = log .. x
|
|
274
|
+
end
|
|
275
|
+
assertEquals(log, '87654321', 'count down')
|
|
276
|
+
loglist = {}
|
|
277
|
+
x_inc4 = 1
|
|
278
|
+
if (1 + 0) > (4 + 0) then
|
|
279
|
+
x_inc4 = -x_inc4
|
|
280
|
+
end
|
|
281
|
+
for x = 1 + 0, 4 + 0, x_inc4 do
|
|
282
|
+
table.insert(loglist, #loglist + 1, x)
|
|
283
|
+
end
|
|
284
|
+
assertEquals(loglist, {1, 2, 3, 4}, 'count up non-trivial')
|
|
285
|
+
loglist = {}
|
|
286
|
+
x_inc5 = 1
|
|
287
|
+
if (3 + 1) > (1 + 0) then
|
|
288
|
+
x_inc5 = -x_inc5
|
|
289
|
+
end
|
|
290
|
+
for x = 3 + 1, 1 + 0, x_inc5 do
|
|
291
|
+
table.insert(loglist, #loglist + 1, x)
|
|
292
|
+
end
|
|
293
|
+
assertEquals(loglist, {4, 3, 2, 1}, 'count down non-trivial')
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
-- Describe this function...
|
|
298
|
+
function test_continue()
|
|
299
|
+
log = ''
|
|
300
|
+
count = 0
|
|
301
|
+
while count ~= 8 do
|
|
302
|
+
count = count + 1
|
|
303
|
+
if count == 5 then
|
|
304
|
+
goto continue
|
|
305
|
+
end
|
|
306
|
+
log = log .. count
|
|
307
|
+
::continue::
|
|
308
|
+
end
|
|
309
|
+
assertEquals(log, '1234678', 'while continue')
|
|
310
|
+
log = ''
|
|
311
|
+
count = 0
|
|
312
|
+
while not (count == 8) do
|
|
313
|
+
count = count + 1
|
|
314
|
+
if count == 5 then
|
|
315
|
+
goto continue
|
|
316
|
+
end
|
|
317
|
+
log = log .. count
|
|
318
|
+
::continue::
|
|
319
|
+
end
|
|
320
|
+
assertEquals(log, '1234678', 'until continue')
|
|
321
|
+
log = ''
|
|
322
|
+
for x = 1, 8, 1 do
|
|
323
|
+
if x == 5 then
|
|
324
|
+
goto continue
|
|
325
|
+
end
|
|
326
|
+
log = log .. x
|
|
327
|
+
::continue::
|
|
328
|
+
end
|
|
329
|
+
assertEquals(log, '1234678', 'count continue')
|
|
330
|
+
log = ''
|
|
331
|
+
for _, x in ipairs({'a', 'b', 'c', 'd'}) do
|
|
332
|
+
if x == 'c' then
|
|
333
|
+
goto continue
|
|
334
|
+
end
|
|
335
|
+
log = log .. x
|
|
336
|
+
::continue::
|
|
337
|
+
end
|
|
338
|
+
assertEquals(log, 'abd', 'for continue')
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
-- Describe this function...
|
|
343
|
+
function test_break()
|
|
344
|
+
count = 1
|
|
345
|
+
while count ~= 10 do
|
|
346
|
+
if count == 5 then
|
|
347
|
+
break
|
|
348
|
+
end
|
|
349
|
+
count = count + 1
|
|
350
|
+
end
|
|
351
|
+
assertEquals(count, 5, 'while break')
|
|
352
|
+
count = 1
|
|
353
|
+
while not (count == 10) do
|
|
354
|
+
if count == 5 then
|
|
355
|
+
break
|
|
356
|
+
end
|
|
357
|
+
count = count + 1
|
|
358
|
+
end
|
|
359
|
+
assertEquals(count, 5, 'until break')
|
|
360
|
+
log = ''
|
|
361
|
+
for x = 1, 8, 1 do
|
|
362
|
+
if x == 5 then
|
|
363
|
+
break
|
|
364
|
+
end
|
|
365
|
+
log = log .. x
|
|
366
|
+
end
|
|
367
|
+
assertEquals(log, '1234', 'count break')
|
|
368
|
+
log = ''
|
|
369
|
+
for _, x in ipairs({'a', 'b', 'c', 'd'}) do
|
|
370
|
+
if x == 'c' then
|
|
371
|
+
break
|
|
372
|
+
end
|
|
373
|
+
log = log .. x
|
|
374
|
+
end
|
|
375
|
+
assertEquals(log, 'ab', 'for break')
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
-- Tests the "single" block.
|
|
380
|
+
function test_single()
|
|
381
|
+
assertEquals(math.sqrt(25), 5, 'sqrt')
|
|
382
|
+
assertEquals(math.abs(-25), 25, 'abs')
|
|
383
|
+
assertEquals(-(-25), 25, 'negate')
|
|
384
|
+
assertEquals(math.log(1), 0, 'ln')
|
|
385
|
+
assertEquals(math.log(100, 10), 2, 'log10')
|
|
386
|
+
assertEquals(math.exp(2), 7.38905609893065, 'exp')
|
|
387
|
+
assertEquals(10 ^ 2, 100, 'power10')
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
-- Tests the "arithmetic" block for all operations and checks
|
|
392
|
+
-- parenthesis are properly generated for different orders.
|
|
393
|
+
function test_arithmetic()
|
|
394
|
+
assertEquals(1 + 2, 3, 'add')
|
|
395
|
+
assertEquals(1 - 2, -1, 'subtract')
|
|
396
|
+
assertEquals(1 - (0 + 2), -1, 'subtract order with add')
|
|
397
|
+
assertEquals(1 - (0 - 2), 3, 'subtract order with subtract')
|
|
398
|
+
assertEquals(4 * 2.5, 10, 'multiply')
|
|
399
|
+
assertEquals(4 * (0 + 2.5), 10, 'multiply order')
|
|
400
|
+
assertEquals(8.2 / -5, -1.64, 'divide')
|
|
401
|
+
assertEquals(8.2 / (0 + -5), -1.64, 'divide order')
|
|
402
|
+
assertEquals(10 ^ 4, 10000, 'power')
|
|
403
|
+
assertEquals(10 ^ (0 + 4), 10000, 'power order')
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
-- Tests the "trig" block.
|
|
408
|
+
function test_trig()
|
|
409
|
+
assertEquals(math.sin(math.rad(90)), 1, 'sin')
|
|
410
|
+
assertEquals(math.cos(math.rad(180)), -1, 'cos')
|
|
411
|
+
assertEquals(math.tan(math.rad(0)), 0, 'tan')
|
|
412
|
+
assertEquals(math.deg(math.asin(-1)), -90, 'asin')
|
|
413
|
+
assertEquals(math.deg(math.acos(1)), 0, 'acos')
|
|
414
|
+
assertEquals(math.deg(math.atan(1)), 45, 'atan')
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
-- Tests the "constant" blocks.
|
|
419
|
+
function test_constant()
|
|
420
|
+
assertEquals(math.floor(math.pi * 1000), 3141, 'const pi')
|
|
421
|
+
assertEquals(math.floor(math.exp(1) * 1000), 2718, 'const e')
|
|
422
|
+
assertEquals(math.floor(((1 + math.sqrt(5)) / 2) * 1000), 1618, 'const golden')
|
|
423
|
+
assertEquals(math.floor(math.sqrt(2) * 1000), 1414, 'const sqrt 2')
|
|
424
|
+
assertEquals(math.floor(math.sqrt(1 / 2) * 1000), 707, 'const sqrt 0.5')
|
|
425
|
+
assertEquals(9999 < math.huge, true, 'const infinity')
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
function math_isPrime(n)
|
|
430
|
+
-- https://en.wikipedia.org/wiki/Primality_test#Naive_methods
|
|
431
|
+
if n == 2 or n == 3 then
|
|
432
|
+
return true
|
|
433
|
+
end
|
|
434
|
+
-- False if n is NaN, negative, is 1, or not whole.
|
|
435
|
+
-- And false if n is divisible by 2 or 3.
|
|
436
|
+
if not(n > 1) or n % 1 ~= 0 or n % 2 == 0 or n % 3 == 0 then
|
|
437
|
+
return false
|
|
438
|
+
end
|
|
439
|
+
-- Check all the numbers of form 6k +/- 1, up to sqrt(n).
|
|
440
|
+
for x = 6, math.sqrt(n) + 1.5, 6 do
|
|
441
|
+
if n % (x - 1) == 0 or n % (x + 1) == 0 then
|
|
442
|
+
return false
|
|
443
|
+
end
|
|
444
|
+
end
|
|
445
|
+
return true
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
-- Tests the "number property" blocks.
|
|
449
|
+
function test_number_properties()
|
|
450
|
+
assertEquals(42 % 2 == 0, true, 'even')
|
|
451
|
+
assertEquals(42.1 % 2 == 1, false, 'odd')
|
|
452
|
+
assertEquals(math_isPrime(5), true, 'prime 5')
|
|
453
|
+
assertEquals(math_isPrime(5 + 2), true, 'prime 5 + 2 (extra parentheses)')
|
|
454
|
+
assertEquals(math_isPrime(25), false, 'prime 25')
|
|
455
|
+
assertEquals(math_isPrime(-31.1), false, 'prime negative')
|
|
456
|
+
assertEquals(math.pi % 1 == 0, false, 'whole')
|
|
457
|
+
assertEquals(math.huge > 0, true, 'positive')
|
|
458
|
+
assertEquals(5 + 2 > 0, true, '5 + 2 is positive (extra parentheses)')
|
|
459
|
+
assertEquals(-42 < 0, true, 'negative')
|
|
460
|
+
assertEquals(3 + 2 < 0, false, '3 + 2 is negative (extra parentheses)')
|
|
461
|
+
assertEquals(42 % 2 == 0, true, 'divisible')
|
|
462
|
+
assertEquals(not nil, true, 'divisible by 0')
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
|
|
466
|
+
-- Tests the "round" block.
|
|
467
|
+
function test_round()
|
|
468
|
+
assertEquals(math.floor(42.42 + .5), 42, 'round')
|
|
469
|
+
assertEquals(math.ceil(-42.42), -42, 'round up')
|
|
470
|
+
assertEquals(math.floor(42.42), 42, 'round down')
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
-- Tests the "change" block.
|
|
475
|
+
function test_change()
|
|
476
|
+
varToChange = 100
|
|
477
|
+
varToChange = varToChange + 42
|
|
478
|
+
assertEquals(varToChange, 142, 'change')
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
function math_sum(t)
|
|
483
|
+
local result = 0
|
|
484
|
+
for _, v in ipairs(t) do
|
|
485
|
+
result = result + v
|
|
486
|
+
end
|
|
487
|
+
return result
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
function math_min(t)
|
|
491
|
+
if #t == 0 then
|
|
492
|
+
return 0
|
|
493
|
+
end
|
|
494
|
+
local result = math.huge
|
|
495
|
+
for _, v in ipairs(t) do
|
|
496
|
+
if v < result then
|
|
497
|
+
result = v
|
|
498
|
+
end
|
|
499
|
+
end
|
|
500
|
+
return result
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
function math_max(t)
|
|
504
|
+
if #t == 0 then
|
|
505
|
+
return 0
|
|
506
|
+
end
|
|
507
|
+
local result = -math.huge
|
|
508
|
+
for _, v in ipairs(t) do
|
|
509
|
+
if v > result then
|
|
510
|
+
result = v
|
|
511
|
+
end
|
|
512
|
+
end
|
|
513
|
+
return result
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
function math_average(t)
|
|
517
|
+
if #t == 0 then
|
|
518
|
+
return 0
|
|
519
|
+
end
|
|
520
|
+
return math_sum(t) / #t
|
|
521
|
+
end
|
|
522
|
+
|
|
523
|
+
function math_median(t)
|
|
524
|
+
-- Source: http://lua-users.org/wiki/SimpleStats
|
|
525
|
+
if #t == 0 then
|
|
526
|
+
return 0
|
|
527
|
+
end
|
|
528
|
+
local temp = {}
|
|
529
|
+
for _, v in ipairs(t) do
|
|
530
|
+
if type(v) == 'number' then
|
|
531
|
+
table.insert(temp, v)
|
|
532
|
+
end
|
|
533
|
+
end
|
|
534
|
+
table.sort(temp)
|
|
535
|
+
if #temp % 2 == 0 then
|
|
536
|
+
return (temp[#temp / 2] + temp[(#temp / 2) + 1]) / 2
|
|
537
|
+
else
|
|
538
|
+
return temp[math.ceil(#temp / 2)]
|
|
539
|
+
end
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
function math_modes(t)
|
|
543
|
+
-- Source: http://lua-users.org/wiki/SimpleStats
|
|
544
|
+
local counts = {}
|
|
545
|
+
for _, v in ipairs(t) do
|
|
546
|
+
if counts[v] == nil then
|
|
547
|
+
counts[v] = 1
|
|
548
|
+
else
|
|
549
|
+
counts[v] = counts[v] + 1
|
|
550
|
+
end
|
|
551
|
+
end
|
|
552
|
+
local biggestCount = 0
|
|
553
|
+
for _, v in pairs(counts) do
|
|
554
|
+
if v > biggestCount then
|
|
555
|
+
biggestCount = v
|
|
556
|
+
end
|
|
557
|
+
end
|
|
558
|
+
local temp = {}
|
|
559
|
+
for k, v in pairs(counts) do
|
|
560
|
+
if v == biggestCount then
|
|
561
|
+
table.insert(temp, k)
|
|
562
|
+
end
|
|
563
|
+
end
|
|
564
|
+
return temp
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
function math_standard_deviation(t)
|
|
568
|
+
local m
|
|
569
|
+
local vm
|
|
570
|
+
local total = 0
|
|
571
|
+
local count = 0
|
|
572
|
+
local result
|
|
573
|
+
m = #t == 0 and 0 or math_sum(t) / #t
|
|
574
|
+
for _, v in ipairs(t) do
|
|
575
|
+
if type(v) == 'number' then
|
|
576
|
+
vm = v - m
|
|
577
|
+
total = total + (vm * vm)
|
|
578
|
+
count = count + 1
|
|
579
|
+
end
|
|
580
|
+
end
|
|
581
|
+
result = math.sqrt(total / (count-1))
|
|
582
|
+
return result
|
|
583
|
+
end
|
|
584
|
+
|
|
585
|
+
function math_random_list(t)
|
|
586
|
+
if #t == 0 then
|
|
587
|
+
return nil
|
|
588
|
+
end
|
|
589
|
+
return t[math.random(#t)]
|
|
590
|
+
end
|
|
591
|
+
|
|
592
|
+
function first_index(t, elem)
|
|
593
|
+
for k, v in ipairs(t) do
|
|
594
|
+
if v == elem then
|
|
595
|
+
return k
|
|
596
|
+
end
|
|
597
|
+
end
|
|
598
|
+
return 0
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
-- Tests the "list operation" blocks.
|
|
602
|
+
function test_operations_on_list()
|
|
603
|
+
assertEquals(math_sum({3, 4, 5}), 12, 'sum')
|
|
604
|
+
assertEquals(math_min({3, 4, 5}), 3, 'min')
|
|
605
|
+
assertEquals(math_max({3, 4, 5}), 5, 'max')
|
|
606
|
+
assertEquals(math_average({3, 4, 5}), 4, 'average')
|
|
607
|
+
assertEquals(math_median({3, 4, 5, 1}), 3.5, 'median')
|
|
608
|
+
assertEquals(math_modes({3, 4, 3}), {3}, 'modes')
|
|
609
|
+
assertEquals(math_modes({3, 4, 3, 1, 4}), {3, 4}, 'modes multiple')
|
|
610
|
+
assertEquals(math_standard_deviation({3, 3, 3}), 0, 'standard dev')
|
|
611
|
+
assertEquals(first_index({3, 4, 5}, math_random_list({3, 4, 5})) > 0, true, 'random')
|
|
612
|
+
end
|
|
613
|
+
|
|
614
|
+
|
|
615
|
+
-- Tests the "mod" block.
|
|
616
|
+
function test_mod()
|
|
617
|
+
assertEquals(42 % 5, 2, 'mod')
|
|
618
|
+
end
|
|
619
|
+
|
|
620
|
+
|
|
621
|
+
-- Tests the "constrain" block.
|
|
622
|
+
function test_constraint()
|
|
623
|
+
assertEquals(math.min(math.max(100, 0), 42), 42, 'constraint')
|
|
624
|
+
end
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
-- Tests the "random integer" block.
|
|
628
|
+
function test_random_integer()
|
|
629
|
+
rand = math.random(5, 10)
|
|
630
|
+
assertEquals(rand >= 5 and rand <= 10, true, 'randRange')
|
|
631
|
+
assertEquals(rand % 1 == 0, true, 'randInteger')
|
|
632
|
+
end
|
|
633
|
+
|
|
634
|
+
|
|
635
|
+
-- Tests the "random fraction" block.
|
|
636
|
+
function test_random_fraction()
|
|
637
|
+
rand = math.random()
|
|
638
|
+
assertEquals(rand >= 0 and rand <= 1, true, 'randFloat')
|
|
639
|
+
end
|
|
640
|
+
|
|
641
|
+
|
|
642
|
+
-- Describe this function...
|
|
643
|
+
function test_atan2()
|
|
644
|
+
assertEquals(math.deg(math.atan2(5, -5)), 135, 'atan2')
|
|
645
|
+
assertEquals(math.deg(math.atan2(-12, 0)), -90, 'atan2')
|
|
646
|
+
end
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
-- Checks that the number of calls is one in order
|
|
650
|
+
-- to confirm that a function was only called once.
|
|
651
|
+
function check_number_of_calls(test_name)
|
|
652
|
+
test_name = test_name .. 'number of calls'
|
|
653
|
+
assertEquals(number_of_calls, 1, test_name)
|
|
654
|
+
end
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
-- Tests the "create text with" block with varying number of inputs.
|
|
658
|
+
function test_create_text()
|
|
659
|
+
assertEquals('', '', 'no text')
|
|
660
|
+
assertEquals(tostring('Hello'), 'Hello', 'create single')
|
|
661
|
+
assertEquals(tostring(-1), '-1', 'create single number')
|
|
662
|
+
assertEquals('K' .. 9, 'K9', 'create double text')
|
|
663
|
+
assertEquals(4 .. 2, '42', 'create double text numbers')
|
|
664
|
+
assertEquals(table.concat({1, 2, 3}), '123', 'create triple')
|
|
665
|
+
assertEquals(table.concat({1, true and 0 or nil, 'M'}), '10M', 'create order')
|
|
666
|
+
end
|
|
667
|
+
|
|
668
|
+
|
|
669
|
+
-- Creates an empty string for use with the empty test.
|
|
670
|
+
function get_empty()
|
|
671
|
+
return ''
|
|
672
|
+
end
|
|
673
|
+
|
|
674
|
+
|
|
675
|
+
-- Tests the "is empty" block".
|
|
676
|
+
function test_empty_text()
|
|
677
|
+
assertEquals(#'Google' == 0, false, 'not empty')
|
|
678
|
+
assertEquals(#'' == 0, true, 'empty')
|
|
679
|
+
assertEquals(#get_empty() == 0, true, 'empty complex')
|
|
680
|
+
assertEquals(#(true and '' or nil) == 0, true, 'empty order')
|
|
681
|
+
end
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
-- Tests the "length" block.
|
|
685
|
+
function test_text_length()
|
|
686
|
+
assertEquals(#'', 0, 'zero length')
|
|
687
|
+
assertEquals(#'Google', 6, 'non-zero length')
|
|
688
|
+
assertEquals(#(true and 'car' or nil), 3, 'length order')
|
|
689
|
+
end
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
-- Tests the "append text" block with different types of parameters.
|
|
693
|
+
function test_append()
|
|
694
|
+
item = 'Miserable'
|
|
695
|
+
item = item .. 'Failure'
|
|
696
|
+
assertEquals(item, 'MiserableFailure', 'append text')
|
|
697
|
+
item = 12
|
|
698
|
+
item = item .. 34
|
|
699
|
+
assertEquals(item, '1234', 'append number')
|
|
700
|
+
item = 'Something '
|
|
701
|
+
item = item .. (true and 'Positive' or nil)
|
|
702
|
+
assertEquals(item, 'Something Positive', 'append order')
|
|
703
|
+
end
|
|
704
|
+
|
|
705
|
+
|
|
706
|
+
function firstIndexOf(str, substr)
|
|
707
|
+
local i = string.find(str, substr, 1, true)
|
|
708
|
+
if i == nil then
|
|
709
|
+
return 0
|
|
710
|
+
end
|
|
711
|
+
return i
|
|
712
|
+
end
|
|
713
|
+
|
|
714
|
+
function lastIndexOf(str, substr)
|
|
715
|
+
local i = string.find(string.reverse(str), string.reverse(substr), 1, true)
|
|
716
|
+
if i then
|
|
717
|
+
return #str + 2 - i - #substr
|
|
718
|
+
end
|
|
719
|
+
return 0
|
|
720
|
+
end
|
|
721
|
+
|
|
722
|
+
-- Tests the "find" block with a variable.
|
|
723
|
+
function test_find_text_simple()
|
|
724
|
+
text = 'Banana'
|
|
725
|
+
assertEquals(firstIndexOf(text, 'an'), 2, 'find first simple')
|
|
726
|
+
assertEquals(lastIndexOf(text, 'an'), 4, 'find last simple')
|
|
727
|
+
assertEquals(firstIndexOf(text, 'Peel'), 0, 'find none simple')
|
|
728
|
+
end
|
|
729
|
+
|
|
730
|
+
|
|
731
|
+
-- Creates a string for use with the find test.
|
|
732
|
+
function get_fruit()
|
|
733
|
+
number_of_calls = number_of_calls + 1
|
|
734
|
+
return 'Banana'
|
|
735
|
+
end
|
|
736
|
+
|
|
737
|
+
|
|
738
|
+
-- Tests the "find" block with a function call.
|
|
739
|
+
function test_find_text_complex()
|
|
740
|
+
number_of_calls = 0
|
|
741
|
+
assertEquals(firstIndexOf(get_fruit(), 'an'), 2, 'find first complex')
|
|
742
|
+
check_number_of_calls('find first complex')
|
|
743
|
+
number_of_calls = 0
|
|
744
|
+
assertEquals(firstIndexOf(true and get_fruit() or nil, 'an'), 2, 'find first order complex')
|
|
745
|
+
check_number_of_calls('find first order complex')
|
|
746
|
+
number_of_calls = 0
|
|
747
|
+
assertEquals(lastIndexOf(get_fruit(), 'an'), 4, 'find last complex')
|
|
748
|
+
check_number_of_calls('find last complex')
|
|
749
|
+
number_of_calls = 0
|
|
750
|
+
assertEquals(lastIndexOf(true and get_fruit() or nil, 'an'), 4, 'find last order complex')
|
|
751
|
+
check_number_of_calls('find last order complex')
|
|
752
|
+
number_of_calls = 0
|
|
753
|
+
assertEquals(firstIndexOf(get_fruit(), 'Peel'), 0, 'find none complex')
|
|
754
|
+
check_number_of_calls('find none complex')
|
|
755
|
+
number_of_calls = 0
|
|
756
|
+
assertEquals(firstIndexOf(true and get_fruit() or nil, 'Peel'), 0, 'find none order complex')
|
|
757
|
+
check_number_of_calls('find none order complex')
|
|
758
|
+
end
|
|
759
|
+
|
|
760
|
+
|
|
761
|
+
function text_random_letter(str)
|
|
762
|
+
local index = math.random(string.len(str))
|
|
763
|
+
return string.sub(str, index, index)
|
|
764
|
+
end
|
|
765
|
+
|
|
766
|
+
function text_char_at(str, index)
|
|
767
|
+
return string.sub(str, index, index)
|
|
768
|
+
end
|
|
769
|
+
|
|
770
|
+
-- Tests the "get letter" block with a variable.
|
|
771
|
+
function test_get_text_simple()
|
|
772
|
+
text = 'Blockly'
|
|
773
|
+
assertEquals(string.sub(text, 1, 1), 'B', 'get first simple')
|
|
774
|
+
assertEquals(string.sub(text, -1, -1), 'y', 'get last simple')
|
|
775
|
+
assertEquals(firstIndexOf(text, text_random_letter(text)) > 0, true, 'get random simple')
|
|
776
|
+
assertEquals(string.sub(text, 3, 3), 'o', 'get # simple')
|
|
777
|
+
assertEquals(text_char_at(text, true and 3 or nil), 'o', 'get # order simple')
|
|
778
|
+
assertEquals(string.sub(text, -3, -3), 'k', 'get #-end simple')
|
|
779
|
+
-- The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
|
|
780
|
+
assertEquals(text_char_at(text, -(0 + 3)), 'k', 'get #-end order simple')
|
|
781
|
+
end
|
|
782
|
+
|
|
783
|
+
|
|
784
|
+
-- Creates a string for use with the get test.
|
|
785
|
+
function get_Blockly()
|
|
786
|
+
number_of_calls = number_of_calls + 1
|
|
787
|
+
return 'Blockly'
|
|
788
|
+
end
|
|
789
|
+
|
|
790
|
+
|
|
791
|
+
-- Tests the "get letter" block with a function call.
|
|
792
|
+
function test_get_text_complex()
|
|
793
|
+
text = 'Blockly'
|
|
794
|
+
number_of_calls = 0
|
|
795
|
+
assertEquals(string.sub(get_Blockly(), 1, 1), 'B', 'get first complex')
|
|
796
|
+
check_number_of_calls('get first complex')
|
|
797
|
+
number_of_calls = 0
|
|
798
|
+
assertEquals(string.sub(true and get_Blockly() or nil, 1, 1), 'B', 'get first order complex')
|
|
799
|
+
check_number_of_calls('get first order complex')
|
|
800
|
+
number_of_calls = 0
|
|
801
|
+
assertEquals(string.sub(get_Blockly(), -1, -1), 'y', 'get last complex')
|
|
802
|
+
check_number_of_calls('get last complex')
|
|
803
|
+
number_of_calls = 0
|
|
804
|
+
assertEquals(string.sub(true and get_Blockly() or nil, -1, -1), 'y', 'get last order complex')
|
|
805
|
+
check_number_of_calls('get last order complex')
|
|
806
|
+
number_of_calls = 0
|
|
807
|
+
assertEquals(firstIndexOf(text, text_random_letter(get_Blockly())) > 0, true, 'get random complex')
|
|
808
|
+
check_number_of_calls('get random complex')
|
|
809
|
+
number_of_calls = 0
|
|
810
|
+
assertEquals(firstIndexOf(text, text_random_letter(true and get_Blockly() or nil)) > 0, true, 'get random order complex')
|
|
811
|
+
check_number_of_calls('get random order complex')
|
|
812
|
+
number_of_calls = 0
|
|
813
|
+
assertEquals(string.sub(get_Blockly(), 3, 3), 'o', 'get # complex')
|
|
814
|
+
check_number_of_calls('get # complex')
|
|
815
|
+
number_of_calls = 0
|
|
816
|
+
assertEquals(text_char_at(true and get_Blockly() or nil, true and 3 or nil), 'o', 'get # order complex')
|
|
817
|
+
check_number_of_calls('get # order complex')
|
|
818
|
+
number_of_calls = 0
|
|
819
|
+
assertEquals(string.sub(get_Blockly(), -3, -3), 'k', 'get #-end complex')
|
|
820
|
+
check_number_of_calls('get #-end complex')
|
|
821
|
+
number_of_calls = 0
|
|
822
|
+
-- The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
|
|
823
|
+
assertEquals(text_char_at(true and get_Blockly() or nil, -(0 + 3)), 'k', 'get #-end order complex')
|
|
824
|
+
check_number_of_calls('get #-end order complex')
|
|
825
|
+
end
|
|
826
|
+
|
|
827
|
+
|
|
828
|
+
-- Creates a string for use with the substring test.
|
|
829
|
+
function get_numbers()
|
|
830
|
+
number_of_calls = number_of_calls + 1
|
|
831
|
+
return '123456789'
|
|
832
|
+
end
|
|
833
|
+
|
|
834
|
+
|
|
835
|
+
-- Tests the "get substring" block with a variable.
|
|
836
|
+
function test_substring_simple()
|
|
837
|
+
text = '123456789'
|
|
838
|
+
assertEquals(string.sub(text, 2, 3), '23', 'substring # simple')
|
|
839
|
+
assertEquals(string.sub(text, true and 2 or nil, true and 3 or nil), '23', 'substring # simple order')
|
|
840
|
+
assertEquals(string.sub(text, -3, -2), '78', 'substring #-end simple')
|
|
841
|
+
-- The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
|
|
842
|
+
assertEquals(string.sub(text, -(0 + 3), -(0 + 2)), '78', 'substring #-end simple order')
|
|
843
|
+
assertEquals(string.sub(text, 1, -1), text, 'substring first-last simple')
|
|
844
|
+
assertEquals(string.sub(text, 2, -2), '2345678', 'substring # #-end simple')
|
|
845
|
+
assertEquals(string.sub(text, -7, 4), '34', 'substring #-end # simple')
|
|
846
|
+
assertEquals(string.sub(text, 1, 4), '1234', 'substring first # simple')
|
|
847
|
+
assertEquals(string.sub(text, 1, -2), '12345678', 'substring first #-end simple')
|
|
848
|
+
assertEquals(string.sub(text, 7, -1), '789', 'substring # last simple')
|
|
849
|
+
assertEquals(string.sub(text, -3, -1), '789', 'substring #-end last simple')
|
|
850
|
+
assertEquals(string.sub(text, 1, -1), '123456789', 'substring all with # #-end simple')
|
|
851
|
+
assertEquals(string.sub(text, -9, 9), '123456789', 'substring all with #-end # simple')
|
|
852
|
+
-- Checks that the whole string is properly retrieved even if the value for start and end is not a simple number. This is especially important in generators where substring uses [x:length - y] for # #-end.
|
|
853
|
+
assertEquals(string.sub(text, 0 + 1, -(0 + 1)), '123456789', 'substring all with # #-end math simple')
|
|
854
|
+
end
|
|
855
|
+
|
|
856
|
+
|
|
857
|
+
-- Tests the "get substring" block with a function call.
|
|
858
|
+
function test_substring_complex()
|
|
859
|
+
number_of_calls = 0
|
|
860
|
+
assertEquals(string.sub(get_numbers(), 2, 3), '23', 'substring # complex')
|
|
861
|
+
check_number_of_calls('substring # complex')
|
|
862
|
+
number_of_calls = 0
|
|
863
|
+
assertEquals(string.sub(true and get_numbers() or nil, true and 2 or nil, true and 3 or nil), '23', 'substring # complex order')
|
|
864
|
+
check_number_of_calls('substring # complex order')
|
|
865
|
+
number_of_calls = 0
|
|
866
|
+
-- The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
|
|
867
|
+
assertEquals(string.sub(get_numbers(), -3, -2), '78', 'substring #-end complex')
|
|
868
|
+
check_number_of_calls('substring #-end complex')
|
|
869
|
+
number_of_calls = 0
|
|
870
|
+
assertEquals(string.sub(true and get_numbers() or nil, -(0 + 3), -(0 + 2)), '78', 'substring #-end order order')
|
|
871
|
+
check_number_of_calls('substring #-end order order')
|
|
872
|
+
number_of_calls = 0
|
|
873
|
+
assertEquals(string.sub(get_numbers(), 1, -1), text, 'substring first-last')
|
|
874
|
+
check_number_of_calls('substring first-last')
|
|
875
|
+
number_of_calls = 0
|
|
876
|
+
assertEquals(string.sub(get_numbers(), 2, -2), '2345678', 'substring # #-end complex')
|
|
877
|
+
check_number_of_calls('substring # #-end complex')
|
|
878
|
+
number_of_calls = 0
|
|
879
|
+
assertEquals(string.sub(get_numbers(), -7, 4), '34', 'substring #-end # complex')
|
|
880
|
+
check_number_of_calls('substring #-end # complex')
|
|
881
|
+
number_of_calls = 0
|
|
882
|
+
assertEquals(string.sub(get_numbers(), 1, 4), '1234', 'substring first # complex')
|
|
883
|
+
check_number_of_calls('substring first # complex')
|
|
884
|
+
number_of_calls = 0
|
|
885
|
+
assertEquals(string.sub(get_numbers(), 1, -2), '12345678', 'substring first #-end complex')
|
|
886
|
+
check_number_of_calls('substring first #-end complex')
|
|
887
|
+
number_of_calls = 0
|
|
888
|
+
assertEquals(string.sub(get_numbers(), 7, -1), '789', 'substring # last complex')
|
|
889
|
+
check_number_of_calls('substring # last complex')
|
|
890
|
+
number_of_calls = 0
|
|
891
|
+
assertEquals(string.sub(get_numbers(), -3, -1), '789', 'substring #-end last complex')
|
|
892
|
+
check_number_of_calls('substring #-end last complex')
|
|
893
|
+
number_of_calls = 0
|
|
894
|
+
assertEquals(string.sub(get_numbers(), 1, -1), '123456789', 'substring all with # #-end complex')
|
|
895
|
+
check_number_of_calls('substring all with # #-end complex')
|
|
896
|
+
number_of_calls = 0
|
|
897
|
+
assertEquals(string.sub(get_numbers(), -9, 9), '123456789', 'substring all with #-end # complex')
|
|
898
|
+
check_number_of_calls('substring all with #-end # complex')
|
|
899
|
+
number_of_calls = 0
|
|
900
|
+
-- Checks that the whole string is properly retrieved even if the value for start and end is not a simple number. This is especially important in generators where substring uses [x:length - y] for # #-end.
|
|
901
|
+
assertEquals(string.sub(get_numbers(), 0 + 1, -(0 + 1)), '123456789', 'substring all with # #-end math complex')
|
|
902
|
+
check_number_of_calls('substring all with # #-end math complex')
|
|
903
|
+
end
|
|
904
|
+
|
|
905
|
+
|
|
906
|
+
function text_titlecase(str)
|
|
907
|
+
local buf = {}
|
|
908
|
+
local inWord = false
|
|
909
|
+
for i = 1, #str do
|
|
910
|
+
local c = string.sub(str, i, i)
|
|
911
|
+
if inWord then
|
|
912
|
+
table.insert(buf, string.lower(c))
|
|
913
|
+
if string.find(c, "%s") then
|
|
914
|
+
inWord = false
|
|
915
|
+
end
|
|
916
|
+
else
|
|
917
|
+
table.insert(buf, string.upper(c))
|
|
918
|
+
inWord = true
|
|
919
|
+
end
|
|
920
|
+
end
|
|
921
|
+
return table.concat(buf)
|
|
922
|
+
end
|
|
923
|
+
|
|
924
|
+
-- Tests the "change casing" block.
|
|
925
|
+
function test_case()
|
|
926
|
+
text = 'Hello World'
|
|
927
|
+
assertEquals(string.upper(text), 'HELLO WORLD', 'uppercase')
|
|
928
|
+
assertEquals(string.upper(true and text or nil), 'HELLO WORLD', 'uppercase order')
|
|
929
|
+
text = 'Hello World'
|
|
930
|
+
assertEquals(string.lower(text), 'hello world', 'lowercase')
|
|
931
|
+
assertEquals(string.lower(true and text or nil), 'hello world', 'lowercase order')
|
|
932
|
+
text = 'heLLo WorlD'
|
|
933
|
+
assertEquals(text_titlecase(text), 'Hello World', 'titlecase')
|
|
934
|
+
assertEquals(text_titlecase(true and text or nil), 'Hello World', 'titlecase order')
|
|
935
|
+
end
|
|
936
|
+
|
|
937
|
+
|
|
938
|
+
-- Tests the "trim" block.
|
|
939
|
+
function test_trim()
|
|
940
|
+
text = ' abc def '
|
|
941
|
+
assertEquals(string.gsub(text, "^%s*(.-)%s*$", "%1"), 'abc def', 'trim both')
|
|
942
|
+
assertEquals(string.gsub(true and text or nil, "^%s*(.-)%s*$", "%1"), 'abc def', 'trim both order')
|
|
943
|
+
assertEquals(string.gsub(text, "^%s*(,-)", "%1"), 'abc def ', 'trim left')
|
|
944
|
+
assertEquals(string.gsub(true and text or nil, "^%s*(,-)", "%1"), 'abc def ', 'trim left order')
|
|
945
|
+
assertEquals(string.gsub(text, "(.-)%s*$", "%1"), ' abc def', 'trim right')
|
|
946
|
+
assertEquals(string.gsub(true and text or nil, "(.-)%s*$", "%1"), ' abc def', 'trim right order')
|
|
947
|
+
end
|
|
948
|
+
|
|
949
|
+
|
|
950
|
+
function text_count(haystack, needle)
|
|
951
|
+
if #needle == 0 then
|
|
952
|
+
return #haystack + 1
|
|
953
|
+
end
|
|
954
|
+
local i = 1
|
|
955
|
+
local count = 0
|
|
956
|
+
while true do
|
|
957
|
+
i = string.find(haystack, needle, i, true)
|
|
958
|
+
if i == nil then
|
|
959
|
+
break
|
|
960
|
+
end
|
|
961
|
+
count = count + 1
|
|
962
|
+
i = i + #needle
|
|
963
|
+
end
|
|
964
|
+
return count
|
|
965
|
+
end
|
|
966
|
+
|
|
967
|
+
-- Tests the "trim" block.
|
|
968
|
+
function test_count_text()
|
|
969
|
+
text = 'woolloomooloo'
|
|
970
|
+
assertEquals(text_count(text, 'o'), 8, 'len 1')
|
|
971
|
+
assertEquals(text_count(text, 'oo'), 4, 'len 2')
|
|
972
|
+
assertEquals(text_count(text, 'loo'), 2, 'len 3')
|
|
973
|
+
assertEquals(text_count(text, 'wool'), 1, 'start')
|
|
974
|
+
assertEquals(text_count(text, 'chicken'), 0, 'missing')
|
|
975
|
+
assertEquals(text_count(text, ''), 14, 'empty needle')
|
|
976
|
+
assertEquals(text_count('', 'chicken'), 0, 'empty source')
|
|
977
|
+
end
|
|
978
|
+
|
|
979
|
+
|
|
980
|
+
-- Tests the "trim" block.
|
|
981
|
+
function test_text_reverse()
|
|
982
|
+
assertEquals(string.reverse(''), '', 'empty string')
|
|
983
|
+
assertEquals(string.reverse('a'), 'a', 'len 1')
|
|
984
|
+
assertEquals(string.reverse('ab'), 'ba', 'len 2')
|
|
985
|
+
assertEquals(string.reverse('woolloomooloo'), 'ooloomoolloow', 'longer')
|
|
986
|
+
end
|
|
987
|
+
|
|
988
|
+
|
|
989
|
+
function text_replace(haystack, needle, replacement)
|
|
990
|
+
local buf = {}
|
|
991
|
+
local i = 1
|
|
992
|
+
while i <= #haystack do
|
|
993
|
+
if string.sub(haystack, i, i + #needle - 1) == needle then
|
|
994
|
+
for j = 1, #replacement do
|
|
995
|
+
table.insert(buf, string.sub(replacement, j, j))
|
|
996
|
+
end
|
|
997
|
+
i = i + #needle
|
|
998
|
+
else
|
|
999
|
+
table.insert(buf, string.sub(haystack, i, i))
|
|
1000
|
+
i = i + 1
|
|
1001
|
+
end
|
|
1002
|
+
end
|
|
1003
|
+
return table.concat(buf)
|
|
1004
|
+
end
|
|
1005
|
+
|
|
1006
|
+
-- Tests the "trim" block.
|
|
1007
|
+
function test_replace()
|
|
1008
|
+
assertEquals(text_replace('woolloomooloo', 'oo', '123'), 'w123ll123m123l123', 'replace all instances 1')
|
|
1009
|
+
assertEquals(text_replace('woolloomooloo', '.oo', 'X'), 'woolloomooloo', 'literal string replacement')
|
|
1010
|
+
assertEquals(text_replace('woolloomooloo', 'abc', 'X'), 'woolloomooloo', 'not found')
|
|
1011
|
+
assertEquals(text_replace('woolloomooloo', 'o', ''), 'wllml', 'empty replacement 1')
|
|
1012
|
+
assertEquals(text_replace('aaaaa', 'aaaaa', ''), '', 'empty replacement 2')
|
|
1013
|
+
assertEquals(text_replace('aaaaa', 'a', ''), '', 'empty replacement 3')
|
|
1014
|
+
assertEquals(text_replace('', 'a', 'chicken'), '', 'empty source')
|
|
1015
|
+
end
|
|
1016
|
+
|
|
1017
|
+
|
|
1018
|
+
-- Checks that the number of calls is one in order
|
|
1019
|
+
-- to confirm that a function was only called once.
|
|
1020
|
+
function check_number_of_calls2(test_name)
|
|
1021
|
+
test_name = test_name .. 'number of calls'
|
|
1022
|
+
assertEquals(number_of_calls, 1, test_name)
|
|
1023
|
+
end
|
|
1024
|
+
|
|
1025
|
+
|
|
1026
|
+
function create_list_repeated(item, count)
|
|
1027
|
+
local t = {}
|
|
1028
|
+
for i = 1, count do
|
|
1029
|
+
table.insert(t, item)
|
|
1030
|
+
end
|
|
1031
|
+
return t
|
|
1032
|
+
end
|
|
1033
|
+
|
|
1034
|
+
-- Tests the "create list with" and "create empty list" blocks.
|
|
1035
|
+
function test_create_lists()
|
|
1036
|
+
assertEquals({}, {}, 'create empty')
|
|
1037
|
+
assertEquals({true, 'love'}, {true, 'love'}, 'create items')
|
|
1038
|
+
assertEquals(create_list_repeated('Eject', 3), {'Eject', 'Eject', 'Eject'}, 'create repeated')
|
|
1039
|
+
assertEquals(create_list_repeated('Eject', 0 + 3), {'Eject', 'Eject', 'Eject'}, 'create repeated order')
|
|
1040
|
+
end
|
|
1041
|
+
|
|
1042
|
+
|
|
1043
|
+
-- Creates an empty list for use with the empty test.
|
|
1044
|
+
function get_empty_list()
|
|
1045
|
+
return {}
|
|
1046
|
+
end
|
|
1047
|
+
|
|
1048
|
+
|
|
1049
|
+
-- Tests the "is empty" block.
|
|
1050
|
+
function test_lists_empty()
|
|
1051
|
+
assertEquals(#{0} == 0, false, 'not empty')
|
|
1052
|
+
assertEquals(#{} == 0, true, 'empty')
|
|
1053
|
+
assertEquals(#get_empty_list() == 0, true, 'empty complex')
|
|
1054
|
+
assertEquals(#(true and {} or nil) == 0, true, 'empty order')
|
|
1055
|
+
end
|
|
1056
|
+
|
|
1057
|
+
|
|
1058
|
+
-- Tests the "length" block.
|
|
1059
|
+
function test_lists_length()
|
|
1060
|
+
assertEquals(#{}, 0, 'zero length')
|
|
1061
|
+
assertEquals(#{'cat'}, 1, 'one length')
|
|
1062
|
+
assertEquals(#{'cat', true, {}}, 3, 'three length')
|
|
1063
|
+
assertEquals(#(true and {'cat', true} or nil), 2, 'two length order')
|
|
1064
|
+
end
|
|
1065
|
+
|
|
1066
|
+
|
|
1067
|
+
function last_index(t, elem)
|
|
1068
|
+
for i = #t, 1, -1 do
|
|
1069
|
+
if t[i] == elem then
|
|
1070
|
+
return i
|
|
1071
|
+
end
|
|
1072
|
+
end
|
|
1073
|
+
return 0
|
|
1074
|
+
end
|
|
1075
|
+
|
|
1076
|
+
-- Tests the "find" block with a variable.
|
|
1077
|
+
function test_find_lists_simple()
|
|
1078
|
+
list = {'Alice', 'Eve', 'Bob', 'Eve'}
|
|
1079
|
+
assertEquals(first_index(list, 'Eve'), 2, 'find first simple')
|
|
1080
|
+
assertEquals(last_index(list, 'Eve'), 4, 'find last simple')
|
|
1081
|
+
assertEquals(first_index(list, 'Dave'), 0, 'find none simple')
|
|
1082
|
+
end
|
|
1083
|
+
|
|
1084
|
+
|
|
1085
|
+
-- Creates a list for use with the find test.
|
|
1086
|
+
function get_names()
|
|
1087
|
+
number_of_calls = number_of_calls + 1
|
|
1088
|
+
return {'Alice', 'Eve', 'Bob', 'Eve'}
|
|
1089
|
+
end
|
|
1090
|
+
|
|
1091
|
+
|
|
1092
|
+
-- Tests the "find" block with a function call.
|
|
1093
|
+
function test_find_lists_complex()
|
|
1094
|
+
number_of_calls = 0
|
|
1095
|
+
assertEquals(first_index(get_names(), 'Eve'), 2, 'find first complex')
|
|
1096
|
+
check_number_of_calls('find first complex')
|
|
1097
|
+
number_of_calls = 0
|
|
1098
|
+
assertEquals(first_index(true and get_names() or nil, 'Eve'), 2, 'find first order complex')
|
|
1099
|
+
check_number_of_calls('find first order complex')
|
|
1100
|
+
number_of_calls = 0
|
|
1101
|
+
assertEquals(last_index(get_names(), 'Eve'), 4, 'find last complex')
|
|
1102
|
+
check_number_of_calls('find last complex')
|
|
1103
|
+
number_of_calls = 0
|
|
1104
|
+
assertEquals(last_index(true and get_names() or nil, 'Eve'), 4, 'find last order complex')
|
|
1105
|
+
check_number_of_calls('find last order complex')
|
|
1106
|
+
number_of_calls = 0
|
|
1107
|
+
assertEquals(first_index(get_names(), 'Dave'), 0, 'find none complex')
|
|
1108
|
+
check_number_of_calls('find none complex')
|
|
1109
|
+
number_of_calls = 0
|
|
1110
|
+
assertEquals(first_index(true and get_names() or nil, 'Dave'), 0, 'find none order complex')
|
|
1111
|
+
check_number_of_calls('find none order complex')
|
|
1112
|
+
end
|
|
1113
|
+
|
|
1114
|
+
|
|
1115
|
+
-- Tests the "get" block with a variable.
|
|
1116
|
+
function test_get_lists_simple()
|
|
1117
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1118
|
+
assertEquals(list[1], 'Kirk', 'get first simple')
|
|
1119
|
+
assertEquals(list[#list], 'McCoy', 'get last simple')
|
|
1120
|
+
assertEquals(first_index(list, list[math.random(#list)]) > 0, true, 'get random simple')
|
|
1121
|
+
assertEquals(list[2], 'Spock', 'get # simple')
|
|
1122
|
+
assertEquals(list[true and 2 or nil], 'Spock', 'get # order simple')
|
|
1123
|
+
assertEquals(list[#list + 1 - 3], 'Kirk', 'get #-end simple')
|
|
1124
|
+
-- The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
|
|
1125
|
+
assertEquals(list[#list + 1 - (0 + 3)], 'Kirk', 'get #-end order simple')
|
|
1126
|
+
end
|
|
1127
|
+
|
|
1128
|
+
|
|
1129
|
+
function list_get_last(t)
|
|
1130
|
+
return t[#t]
|
|
1131
|
+
end
|
|
1132
|
+
|
|
1133
|
+
function list_get_random(t)
|
|
1134
|
+
return t[math.random(#t)]
|
|
1135
|
+
end
|
|
1136
|
+
|
|
1137
|
+
function list_get_from_end(t, at)
|
|
1138
|
+
return t[#t + 1 - at]
|
|
1139
|
+
end
|
|
1140
|
+
|
|
1141
|
+
-- Tests the "get" block with create list call.
|
|
1142
|
+
function test_get_lists_create_list()
|
|
1143
|
+
assertEquals(({'Kirk', 'Spock', 'McCoy'})[1], 'Kirk', 'get first create list')
|
|
1144
|
+
assertEquals(list_get_last(({'Kirk', 'Spock', 'McCoy'})), 'McCoy', 'get last simple')
|
|
1145
|
+
assertEquals(first_index({'Kirk', 'Spock', 'McCoy'}, list_get_random(({'Kirk', 'Spock', 'McCoy'}))) > 0, true, 'get random simple')
|
|
1146
|
+
assertEquals(({'Kirk', 'Spock', 'McCoy'})[2], 'Spock', 'get # simple')
|
|
1147
|
+
assertEquals(({'Kirk', 'Spock', 'McCoy'})[true and 2 or nil], 'Spock', 'get # order simple')
|
|
1148
|
+
assertEquals(list_get_from_end(({'Kirk', 'Spock', 'McCoy'}), 3), 'Kirk', 'get #-end simple')
|
|
1149
|
+
-- The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
|
|
1150
|
+
assertEquals(list_get_from_end(({'Kirk', 'Spock', 'McCoy'}), 0 + 3), 'Kirk', 'get #-end order simple')
|
|
1151
|
+
end
|
|
1152
|
+
|
|
1153
|
+
|
|
1154
|
+
-- Creates a list for use with the get test.
|
|
1155
|
+
function get_star_wars()
|
|
1156
|
+
number_of_calls = number_of_calls + 1
|
|
1157
|
+
return {'Kirk', 'Spock', 'McCoy'}
|
|
1158
|
+
end
|
|
1159
|
+
|
|
1160
|
+
|
|
1161
|
+
-- Tests the "get" block with a function call.
|
|
1162
|
+
function test_get_lists_complex()
|
|
1163
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1164
|
+
number_of_calls = 0
|
|
1165
|
+
assertEquals((get_star_wars())[1], 'Kirk', 'get first complex')
|
|
1166
|
+
check_number_of_calls('get first complex')
|
|
1167
|
+
number_of_calls = 0
|
|
1168
|
+
assertEquals((true and get_star_wars() or nil)[1], 'Kirk', 'get first order complex')
|
|
1169
|
+
check_number_of_calls('get first order complex')
|
|
1170
|
+
number_of_calls = 0
|
|
1171
|
+
assertEquals(list_get_last((get_star_wars())), 'McCoy', 'get last complex')
|
|
1172
|
+
check_number_of_calls('get last complex')
|
|
1173
|
+
number_of_calls = 0
|
|
1174
|
+
assertEquals(list_get_last((true and get_star_wars() or nil)), 'McCoy', 'get last order complex')
|
|
1175
|
+
check_number_of_calls('get last order complex')
|
|
1176
|
+
number_of_calls = 0
|
|
1177
|
+
assertEquals(first_index(list, list_get_random((get_star_wars()))) > 0, true, 'get random complex')
|
|
1178
|
+
check_number_of_calls('get random complex')
|
|
1179
|
+
number_of_calls = 0
|
|
1180
|
+
assertEquals(first_index(list, list_get_random((true and get_star_wars() or nil))) > 0, true, 'get random order complex')
|
|
1181
|
+
check_number_of_calls('get random order complex')
|
|
1182
|
+
number_of_calls = 0
|
|
1183
|
+
assertEquals((get_star_wars())[2], 'Spock', 'get # complex')
|
|
1184
|
+
check_number_of_calls('get # complex')
|
|
1185
|
+
number_of_calls = 0
|
|
1186
|
+
assertEquals((true and get_star_wars() or nil)[true and 2 or nil], 'Spock', 'get # order complex')
|
|
1187
|
+
check_number_of_calls('get # order complex')
|
|
1188
|
+
number_of_calls = 0
|
|
1189
|
+
assertEquals(list_get_from_end((get_star_wars()), 3), 'Kirk', 'get #-end complex')
|
|
1190
|
+
check_number_of_calls('get #-end complex')
|
|
1191
|
+
number_of_calls = 0
|
|
1192
|
+
-- The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
|
|
1193
|
+
assertEquals(list_get_from_end((true and get_star_wars() or nil), 0 + 3), 'Kirk', 'get #-end order complex')
|
|
1194
|
+
check_number_of_calls('get #-end order complex')
|
|
1195
|
+
end
|
|
1196
|
+
|
|
1197
|
+
|
|
1198
|
+
function list_remove_last(t)
|
|
1199
|
+
return table.remove(t, #t)
|
|
1200
|
+
end
|
|
1201
|
+
|
|
1202
|
+
function list_remove_random(t)
|
|
1203
|
+
return table.remove(t, math.random(#t))
|
|
1204
|
+
end
|
|
1205
|
+
|
|
1206
|
+
function list_remove_from_end(t, at)
|
|
1207
|
+
return table.remove(t, #t + 1 - at)
|
|
1208
|
+
end
|
|
1209
|
+
|
|
1210
|
+
-- Tests the "get and remove" block.
|
|
1211
|
+
function test_getRemove()
|
|
1212
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1213
|
+
assertEquals(table.remove(list, 1), 'Kirk', 'getremove first')
|
|
1214
|
+
assertEquals(list, {'Spock', 'McCoy'}, 'getremove first list')
|
|
1215
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1216
|
+
assertEquals(table.remove((true and list or nil), 1), 'Kirk', 'getremove first order')
|
|
1217
|
+
assertEquals(list, {'Spock', 'McCoy'}, 'getremove first order list')
|
|
1218
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1219
|
+
assertEquals(table.remove(list, #list), 'McCoy', 'getremove last')
|
|
1220
|
+
assertEquals(list, {'Kirk', 'Spock'}, 'getremove last list')
|
|
1221
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1222
|
+
assertEquals(list_remove_last((true and list or nil)), 'McCoy', 'getremove last order')
|
|
1223
|
+
assertEquals(list, {'Kirk', 'Spock'}, 'getremove last order list')
|
|
1224
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1225
|
+
assertEquals(first_index(list, table.remove(list, math.random(#list))) == 0, true, 'getremove random')
|
|
1226
|
+
assertEquals(#list, 2, 'getremove random list')
|
|
1227
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1228
|
+
assertEquals(first_index(list, list_remove_random((true and list or nil))) == 0, true, 'getremove random order')
|
|
1229
|
+
assertEquals(#list, 2, 'getremove random order list')
|
|
1230
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1231
|
+
assertEquals(table.remove(list, 2), 'Spock', 'getremove #')
|
|
1232
|
+
assertEquals(list, {'Kirk', 'McCoy'}, 'getremove # list')
|
|
1233
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1234
|
+
assertEquals(table.remove((true and list or nil), true and 2 or nil), 'Spock', 'getremove # order')
|
|
1235
|
+
assertEquals(list, {'Kirk', 'McCoy'}, 'getremove # order list')
|
|
1236
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1237
|
+
assertEquals(table.remove(list, #list + 1 - 3), 'Kirk', 'getremove #-end')
|
|
1238
|
+
assertEquals(list, {'Spock', 'McCoy'}, 'getremove #-end list')
|
|
1239
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1240
|
+
-- The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
|
|
1241
|
+
assertEquals(list_remove_from_end((true and list or nil), 0 + 3), 'Kirk', 'getremove #-end order')
|
|
1242
|
+
assertEquals(list, {'Spock', 'McCoy'}, 'getremove #-end order list')
|
|
1243
|
+
end
|
|
1244
|
+
|
|
1245
|
+
|
|
1246
|
+
-- Tests the "remove" block.
|
|
1247
|
+
function test_remove()
|
|
1248
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1249
|
+
table.remove(list, 1)
|
|
1250
|
+
assertEquals(list, {'Spock', 'McCoy'}, 'remove first list')
|
|
1251
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1252
|
+
table.remove((true and list or nil), 1)
|
|
1253
|
+
assertEquals(list, {'Spock', 'McCoy'}, 'remove first order list')
|
|
1254
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1255
|
+
table.remove(list, #list)
|
|
1256
|
+
assertEquals(list, {'Kirk', 'Spock'}, 'remove last list')
|
|
1257
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1258
|
+
tmp_list = (true and list or nil)
|
|
1259
|
+
table.remove(tmp_list, #tmp_list)
|
|
1260
|
+
assertEquals(list, {'Kirk', 'Spock'}, 'remove last order list')
|
|
1261
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1262
|
+
table.remove(list, math.random(#list))
|
|
1263
|
+
assertEquals(#list, 2, 'remove random list')
|
|
1264
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1265
|
+
tmp_list2 = (true and list or nil)
|
|
1266
|
+
table.remove(tmp_list2, math.random(#tmp_list2))
|
|
1267
|
+
assertEquals(#list, 2, 'remove random order list')
|
|
1268
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1269
|
+
table.remove(list, 2)
|
|
1270
|
+
assertEquals(list, {'Kirk', 'McCoy'}, 'remove # list')
|
|
1271
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1272
|
+
table.remove((true and list or nil), true and 2 or nil)
|
|
1273
|
+
assertEquals(list, {'Kirk', 'McCoy'}, 'remove # order list')
|
|
1274
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1275
|
+
table.remove(list, #list + 1 - 3)
|
|
1276
|
+
assertEquals(list, {'Spock', 'McCoy'}, 'remove #-end list')
|
|
1277
|
+
list = {'Kirk', 'Spock', 'McCoy'}
|
|
1278
|
+
-- The order for index for #-end is addition because this will catch
|
|
1279
|
+
-- errors in generators where most perform the operation ... - index.
|
|
1280
|
+
tmp_list3 = (true and list or nil)
|
|
1281
|
+
table.remove(tmp_list3, #tmp_list3 + 1 - (0 + 3))
|
|
1282
|
+
assertEquals(list, {'Spock', 'McCoy'}, 'remove #-end order list')
|
|
1283
|
+
end
|
|
1284
|
+
|
|
1285
|
+
|
|
1286
|
+
-- Tests the "set" block.
|
|
1287
|
+
function test_set()
|
|
1288
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1289
|
+
list[1] = 'Jean-Luc'
|
|
1290
|
+
assertEquals(list, {'Jean-Luc', 'Riker', 'Crusher'}, 'set first list')
|
|
1291
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1292
|
+
(true and list or nil)[1] = 'Jean-Luc'
|
|
1293
|
+
assertEquals(list, {'Jean-Luc', 'Riker', 'Crusher'}, 'set first order list')
|
|
1294
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1295
|
+
list[#list] = 'Beverly'
|
|
1296
|
+
assertEquals(list, {'Picard', 'Riker', 'Beverly'}, 'set last list')
|
|
1297
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1298
|
+
tmp_list4 = (true and list or nil)
|
|
1299
|
+
tmp_list4[#tmp_list4] = 'Beverly'
|
|
1300
|
+
assertEquals(list, {'Picard', 'Riker', 'Beverly'}, 'set last order list')
|
|
1301
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1302
|
+
list[math.random(#list)] = 'Data'
|
|
1303
|
+
assertEquals(#list, 3, 'set random list')
|
|
1304
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1305
|
+
tmp_list5 = (true and list or nil)
|
|
1306
|
+
tmp_list5[math.random(#tmp_list5)] = 'Data'
|
|
1307
|
+
assertEquals(#list, 3, 'set random order list')
|
|
1308
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1309
|
+
list[3] = 'Pulaski'
|
|
1310
|
+
assertEquals(list, {'Picard', 'Riker', 'Pulaski'}, 'set # list')
|
|
1311
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1312
|
+
(true and list or nil)[(true and 3 or nil)] = 'Pulaski'
|
|
1313
|
+
assertEquals(list, {'Picard', 'Riker', 'Pulaski'}, 'set # order list')
|
|
1314
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1315
|
+
list[#list + 1 - 1] = 'Pulaski'
|
|
1316
|
+
assertEquals(list, {'Picard', 'Riker', 'Pulaski'}, 'set #-end list')
|
|
1317
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1318
|
+
-- The order for index for #-end is addition because this will catch
|
|
1319
|
+
-- errors in generators where most perform the operation ... - index.
|
|
1320
|
+
tmp_list6 = (true and list or nil)
|
|
1321
|
+
tmp_list6[#tmp_list6 + 1 - (0 + 2)] = 'Pulaski'
|
|
1322
|
+
assertEquals(list, {'Picard', 'Pulaski', 'Crusher'}, 'set #-end order list')
|
|
1323
|
+
end
|
|
1324
|
+
|
|
1325
|
+
|
|
1326
|
+
-- Tests the "insert" block.
|
|
1327
|
+
function test_insert()
|
|
1328
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1329
|
+
table.insert(list, 1, 'Data')
|
|
1330
|
+
assertEquals(list, {'Data', 'Picard', 'Riker', 'Crusher'}, 'insert first list')
|
|
1331
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1332
|
+
table.insert((true and list or nil), 1, 'Data')
|
|
1333
|
+
assertEquals(list, {'Data', 'Picard', 'Riker', 'Crusher'}, 'insert first order list')
|
|
1334
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1335
|
+
table.insert(list, #list + 1, 'Data')
|
|
1336
|
+
assertEquals(list, {'Picard', 'Riker', 'Crusher', 'Data'}, 'insert last list')
|
|
1337
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1338
|
+
tmp_list7 = (true and list or nil)
|
|
1339
|
+
table.insert(tmp_list7, #tmp_list7 + 1, 'Data')
|
|
1340
|
+
assertEquals(list, {'Picard', 'Riker', 'Crusher', 'Data'}, 'insert last order list')
|
|
1341
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1342
|
+
table.insert(list, math.random(#list), 'Data')
|
|
1343
|
+
assertEquals(#list, 4, 'insert random list')
|
|
1344
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1345
|
+
tmp_list8 = (true and list or nil)
|
|
1346
|
+
table.insert(tmp_list8, math.random(#tmp_list8), 'Data')
|
|
1347
|
+
assertEquals(#list, 4, 'insert random order list')
|
|
1348
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1349
|
+
table.insert(list, 3, 'Data')
|
|
1350
|
+
assertEquals(list, {'Picard', 'Riker', 'Data', 'Crusher'}, 'insert # list')
|
|
1351
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1352
|
+
table.insert((true and list or nil), (true and 3 or nil), 'Data')
|
|
1353
|
+
assertEquals(list, {'Picard', 'Riker', 'Data', 'Crusher'}, 'insert # order list')
|
|
1354
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1355
|
+
table.insert(list, #list + 1 - 1, 'Data')
|
|
1356
|
+
assertEquals(list, {'Picard', 'Riker', 'Data', 'Crusher'}, 'insert #-end list')
|
|
1357
|
+
list = {'Picard', 'Riker', 'Crusher'}
|
|
1358
|
+
-- The order for index for #-end is addition because this will catch
|
|
1359
|
+
-- errors in generators where most perform the operation ... - index.
|
|
1360
|
+
tmp_list9 = (true and list or nil)
|
|
1361
|
+
table.insert(tmp_list9, #tmp_list9 + 1 - (0 + 2), 'Data')
|
|
1362
|
+
assertEquals(list, {'Picard', 'Data', 'Riker', 'Crusher'}, 'insert #-end order list')
|
|
1363
|
+
end
|
|
1364
|
+
|
|
1365
|
+
|
|
1366
|
+
function list_sublist_from_start_from_start(source, at1, at2)
|
|
1367
|
+
local t = {}
|
|
1368
|
+
local start = at1
|
|
1369
|
+
local finish = at2
|
|
1370
|
+
for i = start, finish do
|
|
1371
|
+
table.insert(t, source[i])
|
|
1372
|
+
end
|
|
1373
|
+
return t
|
|
1374
|
+
end
|
|
1375
|
+
|
|
1376
|
+
function list_sublist_from_end_from_end(source, at1, at2)
|
|
1377
|
+
local t = {}
|
|
1378
|
+
local start = #source + 1 - at1
|
|
1379
|
+
local finish = #source + 1 - at2
|
|
1380
|
+
for i = start, finish do
|
|
1381
|
+
table.insert(t, source[i])
|
|
1382
|
+
end
|
|
1383
|
+
return t
|
|
1384
|
+
end
|
|
1385
|
+
|
|
1386
|
+
function list_sublist_first_last(source)
|
|
1387
|
+
local t = {}
|
|
1388
|
+
local start = 1
|
|
1389
|
+
local finish = #source
|
|
1390
|
+
for i = start, finish do
|
|
1391
|
+
table.insert(t, source[i])
|
|
1392
|
+
end
|
|
1393
|
+
return t
|
|
1394
|
+
end
|
|
1395
|
+
|
|
1396
|
+
function list_sublist_from_start_from_end(source, at1, at2)
|
|
1397
|
+
local t = {}
|
|
1398
|
+
local start = at1
|
|
1399
|
+
local finish = #source + 1 - at2
|
|
1400
|
+
for i = start, finish do
|
|
1401
|
+
table.insert(t, source[i])
|
|
1402
|
+
end
|
|
1403
|
+
return t
|
|
1404
|
+
end
|
|
1405
|
+
|
|
1406
|
+
function list_sublist_from_end_from_start(source, at1, at2)
|
|
1407
|
+
local t = {}
|
|
1408
|
+
local start = #source + 1 - at1
|
|
1409
|
+
local finish = at2
|
|
1410
|
+
for i = start, finish do
|
|
1411
|
+
table.insert(t, source[i])
|
|
1412
|
+
end
|
|
1413
|
+
return t
|
|
1414
|
+
end
|
|
1415
|
+
|
|
1416
|
+
function list_sublist_first_from_start(source, at2)
|
|
1417
|
+
local t = {}
|
|
1418
|
+
local start = 1
|
|
1419
|
+
local finish = at2
|
|
1420
|
+
for i = start, finish do
|
|
1421
|
+
table.insert(t, source[i])
|
|
1422
|
+
end
|
|
1423
|
+
return t
|
|
1424
|
+
end
|
|
1425
|
+
|
|
1426
|
+
function list_sublist_first_from_end(source, at2)
|
|
1427
|
+
local t = {}
|
|
1428
|
+
local start = 1
|
|
1429
|
+
local finish = #source + 1 - at2
|
|
1430
|
+
for i = start, finish do
|
|
1431
|
+
table.insert(t, source[i])
|
|
1432
|
+
end
|
|
1433
|
+
return t
|
|
1434
|
+
end
|
|
1435
|
+
|
|
1436
|
+
function list_sublist_from_start_last(source, at1)
|
|
1437
|
+
local t = {}
|
|
1438
|
+
local start = at1
|
|
1439
|
+
local finish = #source
|
|
1440
|
+
for i = start, finish do
|
|
1441
|
+
table.insert(t, source[i])
|
|
1442
|
+
end
|
|
1443
|
+
return t
|
|
1444
|
+
end
|
|
1445
|
+
|
|
1446
|
+
function list_sublist_from_end_last(source, at1)
|
|
1447
|
+
local t = {}
|
|
1448
|
+
local start = #source + 1 - at1
|
|
1449
|
+
local finish = #source
|
|
1450
|
+
for i = start, finish do
|
|
1451
|
+
table.insert(t, source[i])
|
|
1452
|
+
end
|
|
1453
|
+
return t
|
|
1454
|
+
end
|
|
1455
|
+
|
|
1456
|
+
-- Tests the "get sub-list" block with a variable.
|
|
1457
|
+
function test_sublist_simple()
|
|
1458
|
+
list = {'Columbia', 'Challenger', 'Discovery', 'Atlantis', 'Endeavour'}
|
|
1459
|
+
assertEquals(list_sublist_from_start_from_start(list, 2, 3), {'Challenger', 'Discovery'}, 'sublist # simple')
|
|
1460
|
+
assertEquals(list_sublist_from_start_from_start(list, true and 2 or nil, true and 3 or nil), {'Challenger', 'Discovery'}, 'sublist # simple order')
|
|
1461
|
+
assertEquals(list_sublist_from_end_from_end(list, 3, 2), {'Discovery', 'Atlantis'}, 'sublist #-end simple')
|
|
1462
|
+
-- The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
|
|
1463
|
+
assertEquals(list_sublist_from_end_from_end(list, 0 + 3, 0 + 2), {'Discovery', 'Atlantis'}, 'sublist #-end simple order')
|
|
1464
|
+
assertEquals(list_sublist_first_last(list), list, 'sublist first-last simple')
|
|
1465
|
+
changing_list = {'Columbia', 'Challenger', 'Discovery', 'Atlantis', 'Endeavour'}
|
|
1466
|
+
list_copy = list_sublist_first_last(changing_list)
|
|
1467
|
+
table.remove(changing_list, math.random(#changing_list))
|
|
1468
|
+
assertEquals(list_copy, list, 'sublist first-last simple copy check')
|
|
1469
|
+
assertEquals(list_sublist_from_start_from_end(list, 2, 2), {'Challenger', 'Discovery', 'Atlantis'}, 'sublist # #-end simple')
|
|
1470
|
+
assertEquals(list_sublist_from_end_from_start(list, 3, 4), {'Discovery', 'Atlantis'}, 'sublist #-end # simple')
|
|
1471
|
+
assertEquals(list_sublist_first_from_start(list, 4), {'Columbia', 'Challenger', 'Discovery', 'Atlantis'}, 'sublist first # simple')
|
|
1472
|
+
assertEquals(list_sublist_first_from_end(list, 4), {'Columbia', 'Challenger'}, 'sublist first #-end simple')
|
|
1473
|
+
assertEquals(list_sublist_from_start_last(list, 4), {'Atlantis', 'Endeavour'}, 'sublist # last simple')
|
|
1474
|
+
assertEquals(list_sublist_from_end_last(list, 4), {'Challenger', 'Discovery', 'Atlantis', 'Endeavour'}, 'sublist #-end last simple')
|
|
1475
|
+
assertEquals(list_sublist_from_start_from_end(list, 1, 1), list, 'sublist all with # #-end simple')
|
|
1476
|
+
assertEquals(list_sublist_from_end_from_start(list, 5, 5), list, 'sublist all with #-end # simple')
|
|
1477
|
+
-- Checks that the whole list is properly retrieved even if the value for start and end is not a simple number. This is especially important in generators where sublist uses [x:length - y] for # #-end.
|
|
1478
|
+
assertEquals(list_sublist_from_start_from_end(list, 0 + 1, 0 + 1), list, 'sublist all with # #-end math simple')
|
|
1479
|
+
end
|
|
1480
|
+
|
|
1481
|
+
|
|
1482
|
+
-- Creates a list for use with the sublist test.
|
|
1483
|
+
function get_space_shuttles()
|
|
1484
|
+
number_of_calls = number_of_calls + 1
|
|
1485
|
+
return {'Columbia', 'Challenger', 'Discovery', 'Atlantis', 'Endeavour'}
|
|
1486
|
+
end
|
|
1487
|
+
|
|
1488
|
+
|
|
1489
|
+
-- Tests the "get sub-list" block with a function call.
|
|
1490
|
+
function test_sublist_complex()
|
|
1491
|
+
number_of_calls = 0
|
|
1492
|
+
assertEquals(list_sublist_from_start_from_start(get_space_shuttles(), 2, 3), {'Challenger', 'Discovery'}, 'sublist # start complex')
|
|
1493
|
+
check_number_of_calls('sublist # start complex')
|
|
1494
|
+
number_of_calls = 0
|
|
1495
|
+
assertEquals(list_sublist_from_start_from_start(true and get_space_shuttles() or nil, true and 2 or nil, true and 3 or nil), {'Challenger', 'Discovery'}, 'sublist # start order complex')
|
|
1496
|
+
check_number_of_calls('sublist # start order complex')
|
|
1497
|
+
number_of_calls = 0
|
|
1498
|
+
-- The order for index for #-end is addition because this will catch errors in generators where most perform the operation ... - index.
|
|
1499
|
+
assertEquals(list_sublist_from_end_from_end(get_space_shuttles(), 3, 2), {'Discovery', 'Atlantis'}, 'sublist # end complex')
|
|
1500
|
+
assertEquals(number_of_calls, 1, 'sublist # end complex number of calls')
|
|
1501
|
+
number_of_calls = 0
|
|
1502
|
+
assertEquals(list_sublist_from_end_from_end(true and get_space_shuttles() or nil, 0 + 3, 0 + 2), {'Discovery', 'Atlantis'}, 'sublist # end order complex')
|
|
1503
|
+
check_number_of_calls('sublist # end order complex')
|
|
1504
|
+
number_of_calls = 0
|
|
1505
|
+
assertEquals(list_sublist_first_last(get_space_shuttles()), list, 'sublist first-last complex')
|
|
1506
|
+
check_number_of_calls('sublist first-last complex')
|
|
1507
|
+
number_of_calls = 0
|
|
1508
|
+
assertEquals(list_sublist_from_start_from_end(get_space_shuttles(), 2, 2), {'Challenger', 'Discovery', 'Atlantis'}, 'sublist # #-end complex')
|
|
1509
|
+
check_number_of_calls('sublist # #-end complex')
|
|
1510
|
+
number_of_calls = 0
|
|
1511
|
+
assertEquals(list_sublist_from_end_from_start(get_space_shuttles(), 3, 4), {'Discovery', 'Atlantis'}, 'sublist #-end # complex')
|
|
1512
|
+
check_number_of_calls('sublist #-end # complex')
|
|
1513
|
+
number_of_calls = 0
|
|
1514
|
+
assertEquals(list_sublist_first_from_start(get_space_shuttles(), 4), {'Columbia', 'Challenger', 'Discovery', 'Atlantis'}, 'sublist first # complex')
|
|
1515
|
+
check_number_of_calls('sublist first # complex')
|
|
1516
|
+
number_of_calls = 0
|
|
1517
|
+
assertEquals(list_sublist_first_from_end(get_space_shuttles(), 4), {'Columbia', 'Challenger'}, 'sublist first #-end complex')
|
|
1518
|
+
check_number_of_calls('sublist first #-end complex')
|
|
1519
|
+
number_of_calls = 0
|
|
1520
|
+
assertEquals(list_sublist_from_start_last(get_space_shuttles(), 4), {'Atlantis', 'Endeavour'}, 'sublist # last complex')
|
|
1521
|
+
check_number_of_calls('sublist # last complex')
|
|
1522
|
+
number_of_calls = 0
|
|
1523
|
+
assertEquals(list_sublist_from_end_last(get_space_shuttles(), 4), {'Challenger', 'Discovery', 'Atlantis', 'Endeavour'}, 'sublist #-end last simple')
|
|
1524
|
+
check_number_of_calls('sublist #-end last simple')
|
|
1525
|
+
number_of_calls = 0
|
|
1526
|
+
assertEquals(list_sublist_from_start_from_end(get_space_shuttles(), 1, 1), list, 'sublist all with # #-end complex')
|
|
1527
|
+
check_number_of_calls('sublist all with # #-end complex')
|
|
1528
|
+
number_of_calls = 0
|
|
1529
|
+
assertEquals(list_sublist_from_end_from_start(get_space_shuttles(), 5, 5), list, 'sublist all with #-end # complex')
|
|
1530
|
+
check_number_of_calls('sublist all with #-end # complex')
|
|
1531
|
+
number_of_calls = 0
|
|
1532
|
+
-- Checks that the whole list is properly retrieved even if the value for start and end is not a simple number. This is especially important in generators where sublist uses [x:length - y] for # #-end.
|
|
1533
|
+
assertEquals(list_sublist_from_start_from_end(get_space_shuttles(), 0 + 1, 0 + 1), list, 'sublist all with # #-end math complex')
|
|
1534
|
+
check_number_of_calls('sublist all with # #-end math complex')
|
|
1535
|
+
end
|
|
1536
|
+
|
|
1537
|
+
|
|
1538
|
+
-- Tests the "join" block.
|
|
1539
|
+
function test_join()
|
|
1540
|
+
list = {'Vulcan', 'Klingon', 'Borg'}
|
|
1541
|
+
assertEquals(table.concat(list, ','), 'Vulcan,Klingon,Borg', 'join')
|
|
1542
|
+
assertEquals(table.concat(true and list or nil, ','), 'Vulcan,Klingon,Borg', 'join order')
|
|
1543
|
+
end
|
|
1544
|
+
|
|
1545
|
+
|
|
1546
|
+
function list_string_split(input, delim)
|
|
1547
|
+
local t = {}
|
|
1548
|
+
local pos = 1
|
|
1549
|
+
while true do
|
|
1550
|
+
next_delim = string.find(input, delim, pos)
|
|
1551
|
+
if next_delim == nil then
|
|
1552
|
+
table.insert(t, string.sub(input, pos))
|
|
1553
|
+
break
|
|
1554
|
+
else
|
|
1555
|
+
table.insert(t, string.sub(input, pos, next_delim-1))
|
|
1556
|
+
pos = next_delim + #delim
|
|
1557
|
+
end
|
|
1558
|
+
end
|
|
1559
|
+
return t
|
|
1560
|
+
end
|
|
1561
|
+
|
|
1562
|
+
-- Tests the "split" block.
|
|
1563
|
+
function test_split()
|
|
1564
|
+
text = 'Vulcan,Klingon,Borg'
|
|
1565
|
+
assertEquals(list_string_split(text, ','), {'Vulcan', 'Klingon', 'Borg'}, 'split')
|
|
1566
|
+
assertEquals(list_string_split(true and text or nil, ','), {'Vulcan', 'Klingon', 'Borg'}, 'split order')
|
|
1567
|
+
end
|
|
1568
|
+
|
|
1569
|
+
|
|
1570
|
+
function list_sort(list, typev, direction)
|
|
1571
|
+
local t = {}
|
|
1572
|
+
for n,v in pairs(list) do table.insert(t, v) end
|
|
1573
|
+
local compareFuncs = {
|
|
1574
|
+
NUMERIC = function(a, b)
|
|
1575
|
+
return (tonumber(tostring(a)) or 0)
|
|
1576
|
+
< (tonumber(tostring(b)) or 0) end,
|
|
1577
|
+
TEXT = function(a, b)
|
|
1578
|
+
return tostring(a) < tostring(b) end,
|
|
1579
|
+
IGNORE_CASE = function(a, b)
|
|
1580
|
+
return string.lower(tostring(a)) < string.lower(tostring(b)) end
|
|
1581
|
+
}
|
|
1582
|
+
local compareTemp = compareFuncs[typev]
|
|
1583
|
+
local compare = compareTemp
|
|
1584
|
+
if direction == -1
|
|
1585
|
+
then compare = function(a, b) return compareTemp(b, a) end
|
|
1586
|
+
end
|
|
1587
|
+
table.sort(t, compare)
|
|
1588
|
+
return t
|
|
1589
|
+
end
|
|
1590
|
+
|
|
1591
|
+
-- Tests the "alphabetic sort" block.
|
|
1592
|
+
function test_sort_alphabetic()
|
|
1593
|
+
list = {'Vulcan', 'klingon', 'Borg'}
|
|
1594
|
+
assertEquals(list_sort(list,"TEXT", 1), {'Borg', 'Vulcan', 'klingon'}, 'sort alphabetic ascending')
|
|
1595
|
+
assertEquals(list_sort(true and list or nil,"TEXT", 1), {'Borg', 'Vulcan', 'klingon'}, 'sort alphabetic ascending order')
|
|
1596
|
+
end
|
|
1597
|
+
|
|
1598
|
+
|
|
1599
|
+
-- Tests the "alphabetic sort ignore case" block.
|
|
1600
|
+
function test_sort_ignoreCase()
|
|
1601
|
+
list = {'Vulcan', 'klingon', 'Borg'}
|
|
1602
|
+
assertEquals(list_sort(list,"IGNORE_CASE", 1), {'Borg', 'klingon', 'Vulcan'}, 'sort ignore case ascending')
|
|
1603
|
+
assertEquals(list_sort(true and list or nil,"IGNORE_CASE", 1), {'Borg', 'klingon', 'Vulcan'}, 'sort ignore case ascending order')
|
|
1604
|
+
end
|
|
1605
|
+
|
|
1606
|
+
|
|
1607
|
+
-- Tests the "numeric sort" block.
|
|
1608
|
+
function test_sort_numeric()
|
|
1609
|
+
list = {8, 18, -1}
|
|
1610
|
+
assertEquals(list_sort(list,"NUMERIC", -1), {18, 8, -1}, 'sort numeric descending')
|
|
1611
|
+
assertEquals(list_sort(true and list or nil,"NUMERIC", -1), {18, 8, -1}, 'sort numeric descending order')
|
|
1612
|
+
end
|
|
1613
|
+
|
|
1614
|
+
|
|
1615
|
+
function list_reverse(input)
|
|
1616
|
+
local reversed = {}
|
|
1617
|
+
for i = #input, 1, -1 do
|
|
1618
|
+
table.insert(reversed, input[i])
|
|
1619
|
+
end
|
|
1620
|
+
return reversed
|
|
1621
|
+
end
|
|
1622
|
+
|
|
1623
|
+
-- Tests the "list reverse" block.
|
|
1624
|
+
function test_lists_reverse()
|
|
1625
|
+
list = {8, 18, -1, 64}
|
|
1626
|
+
assertEquals(list_reverse(list), {64, -1, 18, 8}, 'reverse a copy')
|
|
1627
|
+
assertEquals(list, {8, 18, -1, 64}, 'reverse a copy original')
|
|
1628
|
+
list = {}
|
|
1629
|
+
assertEquals(list_reverse(list), {}, 'empty list')
|
|
1630
|
+
end
|
|
1631
|
+
|
|
1632
|
+
|
|
1633
|
+
-- Describe this function...
|
|
1634
|
+
function test_procedure()
|
|
1635
|
+
procedure_1(8, 2)
|
|
1636
|
+
assertEquals(proc_z, 4, 'procedure with global')
|
|
1637
|
+
proc_w = false
|
|
1638
|
+
procedure_2(false)
|
|
1639
|
+
assertEquals(proc_w, true, 'procedure no return')
|
|
1640
|
+
proc_w = false
|
|
1641
|
+
procedure_2(true)
|
|
1642
|
+
assertEquals(proc_w, false, 'procedure return')
|
|
1643
|
+
end
|
|
1644
|
+
|
|
1645
|
+
|
|
1646
|
+
-- Describe this function...
|
|
1647
|
+
function procedure_1(proc_x, proc_y)
|
|
1648
|
+
proc_z = proc_x / proc_y
|
|
1649
|
+
end
|
|
1650
|
+
|
|
1651
|
+
|
|
1652
|
+
-- Describe this function...
|
|
1653
|
+
function procedure_2(proc_x)
|
|
1654
|
+
if proc_x then
|
|
1655
|
+
return
|
|
1656
|
+
end
|
|
1657
|
+
proc_w = true
|
|
1658
|
+
end
|
|
1659
|
+
|
|
1660
|
+
|
|
1661
|
+
-- Describe this function...
|
|
1662
|
+
function test_function()
|
|
1663
|
+
assertEquals(function_1(2, 3), -1, 'function with arguments')
|
|
1664
|
+
assertEquals(func_z, 'side effect', 'function with side effect')
|
|
1665
|
+
func_a = 'unchanged'
|
|
1666
|
+
func_c = 'global'
|
|
1667
|
+
assertEquals(function_2(2), '3global', 'function with global')
|
|
1668
|
+
assertEquals(func_a, 'unchanged', 'function with scope')
|
|
1669
|
+
assertEquals(function_3(true), true, 'function return')
|
|
1670
|
+
assertEquals(function_3(false), false, 'function no return')
|
|
1671
|
+
end
|
|
1672
|
+
|
|
1673
|
+
|
|
1674
|
+
-- Describe this function...
|
|
1675
|
+
function function_1(func_x, func_y)
|
|
1676
|
+
func_z = 'side effect'
|
|
1677
|
+
return func_x - func_y
|
|
1678
|
+
end
|
|
1679
|
+
|
|
1680
|
+
|
|
1681
|
+
-- Describe this function...
|
|
1682
|
+
function function_2(func_a)
|
|
1683
|
+
func_a = func_a + 1
|
|
1684
|
+
return func_a .. func_c
|
|
1685
|
+
end
|
|
1686
|
+
|
|
1687
|
+
|
|
1688
|
+
-- Describe this function...
|
|
1689
|
+
function function_3(func_a)
|
|
1690
|
+
if func_a then
|
|
1691
|
+
return true
|
|
1692
|
+
end
|
|
1693
|
+
return false
|
|
1694
|
+
end
|
|
1695
|
+
|
|
1696
|
+
|
|
1697
|
+
-- Describe this function...
|
|
1698
|
+
function recurse(n)
|
|
1699
|
+
if n > 0 then
|
|
1700
|
+
text = table.concat({recurse(n - 1), n, recurse(n - 1)})
|
|
1701
|
+
else
|
|
1702
|
+
text = '-'
|
|
1703
|
+
end
|
|
1704
|
+
return text
|
|
1705
|
+
end
|
|
1706
|
+
|
|
1707
|
+
|
|
1708
|
+
|
|
1709
|
+
unittestResults = {}
|
|
1710
|
+
print('\n====================\n\nRunning suite: Logic')
|
|
1711
|
+
assertEquals(true, true, 'True')
|
|
1712
|
+
assertEquals(false, false, 'False')
|
|
1713
|
+
assertEquals(not false, true, 'Not true')
|
|
1714
|
+
assertEquals(not true, false, 'Not false')
|
|
1715
|
+
test_if()
|
|
1716
|
+
test_ifelse()
|
|
1717
|
+
test_equalities()
|
|
1718
|
+
test_and()
|
|
1719
|
+
test_or()
|
|
1720
|
+
test_ternary()
|
|
1721
|
+
print(unittest_report())
|
|
1722
|
+
unittestResults = nil
|
|
1723
|
+
|
|
1724
|
+
unittestResults = {}
|
|
1725
|
+
print('\n====================\n\nRunning suite: Loops 1')
|
|
1726
|
+
test_repeat()
|
|
1727
|
+
test_repeat_ext()
|
|
1728
|
+
test_while()
|
|
1729
|
+
test_foreach()
|
|
1730
|
+
print(unittest_report())
|
|
1731
|
+
unittestResults = nil
|
|
1732
|
+
|
|
1733
|
+
unittestResults = {}
|
|
1734
|
+
print('\n====================\n\nRunning suite: Loops 2')
|
|
1735
|
+
test_count_loops()
|
|
1736
|
+
test_count_by()
|
|
1737
|
+
print(unittest_report())
|
|
1738
|
+
unittestResults = nil
|
|
1739
|
+
|
|
1740
|
+
unittestResults = {}
|
|
1741
|
+
print('\n====================\n\nRunning suite: Loops 3')
|
|
1742
|
+
test_break()
|
|
1743
|
+
test_continue()
|
|
1744
|
+
print(unittest_report())
|
|
1745
|
+
unittestResults = nil
|
|
1746
|
+
|
|
1747
|
+
unittestResults = {}
|
|
1748
|
+
print('\n====================\n\nRunning suite: Math')
|
|
1749
|
+
test_arithmetic()
|
|
1750
|
+
test_single()
|
|
1751
|
+
test_trig()
|
|
1752
|
+
test_constant()
|
|
1753
|
+
test_change()
|
|
1754
|
+
test_number_properties()
|
|
1755
|
+
test_round()
|
|
1756
|
+
test_operations_on_list()
|
|
1757
|
+
test_constraint()
|
|
1758
|
+
test_mod()
|
|
1759
|
+
test_random_integer()
|
|
1760
|
+
test_random_fraction()
|
|
1761
|
+
test_atan2()
|
|
1762
|
+
print(unittest_report())
|
|
1763
|
+
unittestResults = nil
|
|
1764
|
+
|
|
1765
|
+
unittestResults = {}
|
|
1766
|
+
print('\n====================\n\nRunning suite: Text')
|
|
1767
|
+
test_text_length()
|
|
1768
|
+
test_empty_text()
|
|
1769
|
+
test_create_text()
|
|
1770
|
+
test_append()
|
|
1771
|
+
test_find_text_simple()
|
|
1772
|
+
test_find_text_complex()
|
|
1773
|
+
test_get_text_simple()
|
|
1774
|
+
test_get_text_complex()
|
|
1775
|
+
test_substring_simple()
|
|
1776
|
+
test_substring_complex()
|
|
1777
|
+
test_case()
|
|
1778
|
+
test_trim()
|
|
1779
|
+
test_count_text()
|
|
1780
|
+
test_text_reverse()
|
|
1781
|
+
test_replace()
|
|
1782
|
+
print(unittest_report())
|
|
1783
|
+
unittestResults = nil
|
|
1784
|
+
|
|
1785
|
+
unittestResults = {}
|
|
1786
|
+
print('\n====================\n\nRunning suite: Lists')
|
|
1787
|
+
test_create_lists()
|
|
1788
|
+
test_lists_empty()
|
|
1789
|
+
test_lists_length()
|
|
1790
|
+
test_find_lists_simple()
|
|
1791
|
+
test_find_lists_complex()
|
|
1792
|
+
test_get_lists_simple()
|
|
1793
|
+
test_get_lists_create_list()
|
|
1794
|
+
test_get_lists_complex()
|
|
1795
|
+
test_getRemove()
|
|
1796
|
+
test_remove()
|
|
1797
|
+
test_set()
|
|
1798
|
+
test_insert()
|
|
1799
|
+
test_sublist_simple()
|
|
1800
|
+
test_sublist_complex()
|
|
1801
|
+
test_join()
|
|
1802
|
+
test_split()
|
|
1803
|
+
test_sort_alphabetic()
|
|
1804
|
+
test_sort_ignoreCase()
|
|
1805
|
+
test_sort_numeric()
|
|
1806
|
+
test_lists_reverse()
|
|
1807
|
+
print(unittest_report())
|
|
1808
|
+
unittestResults = nil
|
|
1809
|
+
|
|
1810
|
+
unittestResults = {}
|
|
1811
|
+
print('\n====================\n\nRunning suite: Variables')
|
|
1812
|
+
item = 123
|
|
1813
|
+
assertEquals(item, 123, 'variable')
|
|
1814
|
+
if2 = 123
|
|
1815
|
+
assertEquals(if2, 123, 'reserved variable')
|
|
1816
|
+
print(unittest_report())
|
|
1817
|
+
unittestResults = nil
|
|
1818
|
+
|
|
1819
|
+
local _ = -- Intentionally non-connected variable.
|
|
1820
|
+
naked
|
|
1821
|
+
|
|
1822
|
+
unittestResults = {}
|
|
1823
|
+
print('\n====================\n\nRunning suite: Functions')
|
|
1824
|
+
test_procedure()
|
|
1825
|
+
test_function()
|
|
1826
|
+
assertEquals(recurse(3), '-1-2-1-3-1-2-1-', 'test recurse')
|
|
1827
|
+
print(unittest_report())
|
|
1828
|
+
unittestResults = nil
|