diff --git a/precise_compilation/ace_engine.json b/precise_compilation/ace_engine.json new file mode 100644 index 0000000000000000000000000000000000000000..864601816647b6a13eccce66165c3b65e8a08477 --- /dev/null +++ b/precise_compilation/ace_engine.json @@ -0,0 +1,253 @@ +{ + "adapted_test_targets": [ + "foundation/arkui/ace_engine/test/unittest/adapter/ohos/entrance:container_test", + "foundation/arkui/ace_engine/test/unittest/adapter/ohos/capability:html_convert_test", + "foundation/arkui/ace_engine/test/unittest/frameworks/core/common:container_scope_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:viewport_config_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:ui_content_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:form_render_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:form_render_group_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:form_render_delegate_proxy_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:form_render_delegate_stub_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:form_render_dispatcher_stub_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:form_render_delegate_impl_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:form_render_dispatcher_impl_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:drawable_descriptor_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:ui_event_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:extension_custom_node_test_ng", + "foundation/arkui/ace_engine/test/unittest/interfaces:ace_forward_compatibility_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:navigation_controller_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:native_node_napi_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:native_key_event_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:ui_input_event_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:drag_and_drop_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:node_transition_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:animate_impl_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:dialog_model_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:node_extened_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:node_animate_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:js_drawable_descriptor_test", + "foundation/arkui/ace_engine/test/unittest/interfaces:xcomponent_controller_test", + "foundation/arkui/ace_engine/test/unittest/core/common:common_test", + "foundation/arkui/ace_engine/test/unittest/core/common/form:form_manager_test", + "foundation/arkui/ace_engine/test/unittest/core/common/plugin:plugin_manager_test", + "foundation/arkui/ace_engine/test/unittest/core/layout:box_layout_algorithm_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/layout:layout_property_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/layout:layout_wrapper_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/layout:layout_wrapper_build_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/layout:layout_wrapper_node_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/layout/safe_area:safeArea_test_expandSafeArea_ng", + "foundation/arkui/ace_engine/test/unittest/core/render:painter_test", + "foundation/arkui/ace_engine/test/unittest/core/render:drawing_prop_convertor_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/render:render_context_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/render:render_property_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:drag_animation_helper_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:drag_drop_func_wrapper_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:drag_drop_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:drag_drop_report_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:drag_drop_proxy_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:full_screen_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:post_event_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:select_overlay_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:select_overlay_proxy_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:shared_overlay_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:display_sync_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:frame_rate_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:focus_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:focus_view_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:safe_area_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:navigation_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/manager:drag_drop_behavior_reporter_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/accessibility:accessibility_linux_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/accessibility:accessibility_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/accessibility:accessibility_adapter_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/accessibility:js_inspector_test", + "foundation/arkui/ace_engine/test/unittest/core/rosen:arkui_rosen_render_context_test", + "foundation/arkui/ace_engine/test/unittest/core/rosen:gradient_style_modifier_test", + "foundation/arkui/ace_engine/test/unittest/core/syntax:lazy_for_each_syntax_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/syntax:lazy_for_each_builder_syntax_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/syntax:for_each_syntax_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/syntax:if_else_syntax_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/syntax:content_slot_syntax_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/syntax:repeat_node_cache_syntax_test", + "foundation/arkui/ace_engine/test/unittest/core/image:image_provider_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/image:image_file_cache_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:view_stack_processor_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:distributed_ui_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:frame_node_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:frame_node_drop_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:geometry_node_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:inspector_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:ui_node_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:view_abstract_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:view_full_update_model_ng_test", + "foundation/arkui/ace_engine/test/unittest/core/base:view_partial_update_model_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:observer_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:view_abstract_model_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:short_cuts_little_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/base:short_cuts_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/gestures:gestures_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/waterflow:water_flow_test_original", + "foundation/arkui/ace_engine/test/unittest/core/pattern/waterflow:water_flow_test_segmented", + "foundation/arkui/ace_engine/test/unittest/core/pattern/waterflow:water_flow_test_sw", + "foundation/arkui/ace_engine/test/unittest/core/pattern/toggle:toggle_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/security_component:security_component_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/checkbox:checkbox_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/stage:stage_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/stepper:stepper_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/xcomponent:xcomponent_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/indexer:indexer_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/bubble:bubble_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/form_link:form_link_test", + "foundation/arkui/ace_engine/test/unittest/core/pattern/custom_frame_node:custom_frame_node_test", + "foundation/arkui/ace_engine/test/unittest/core/pattern/animator:animator_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/container_modal:container_modal_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/form:form_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/form:form_node_test", + "foundation/arkui/ace_engine/test/unittest/core/pattern/form:form_pattern_test", + "foundation/arkui/ace_engine/test/unittest/core/pattern/checkboxgroup:checkboxgroup_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/common_view:common_view_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/text_drag:text_drag_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/qrcode:qrcode_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/dialog:dialog_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/picker:date_picker_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/refresh:refresh_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/navrouter:navrouter_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/data_panel:data_panel_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/node_container:node_container_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/button:button_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/recycle_node:recycle_node_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/menu:menu_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/loading_progress:loading_progress_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/blank:blank_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/shape:shape_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/grid_col:grid_col_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/panel:panel_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/custom:custom_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/custom_node_ext:custom_node_ext_test", + "foundation/arkui/ace_engine/test/unittest/core/pattern/linear_layout:linear_layout_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/calendar:calendar_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/patternlock:patternlock_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/movingphoto:movingphoto_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/badge:badge_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/particle:particle_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/text_input:TextInputTest", + "foundation/arkui/ace_engine/test/unittest/core/pattern/video:video_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/calendar_picker:calendar_picker_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/side_bar:side_bar_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/image_animator:image_animator_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/render_node:render_node_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/image:image_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/divider:divider_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/grid:grid_test_regular", + "foundation/arkui/ace_engine/test/unittest/core/pattern/grid:grid_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/canvas:canvas_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/model:model_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/time_picker:time_picker_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/swiper:swiper_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/linear_split:linear_split_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/withtheme:withtheme_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/app_bar:app_bar_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/stack:stack_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/scrollable:scrollable_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/rich_editor_drag:rich_editor_drag_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/search:search_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/navigation:navigation_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/text_clock:text_clock_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/counter:counter_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/overlay:overlay_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/view_context:view_context_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/symbol:symbol_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/radio:radio_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/folder_stack:folder_stack_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/rich_editor:rich_editor_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/grid_container:grid_container_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/scroll:scroll_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/text_picker:text_picker_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/navigator:navigator_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/gauge:gauge_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/text_timer:text_timer_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/linear_indicator:linear_indicator_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/tabs:tabs_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/flex:flex_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/hyperlink:hyperlink_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/ui_extension:ui_extension_pattern_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/ui_extension:ui_extension_component_testtwo_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/ui_extension:accessibility_session_adapter_ui_extension_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/ui_extension:ui_extension_manager_test", + "foundation/arkui/ace_engine/test/unittest/core/pattern/ui_extension:platform_pattern_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/ui_extension:modal_ui_extension_proxy_impl_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/ui_extension:isolated_pattern_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/ui_extension:platform_event_proxy_test", + "foundation/arkui/ace_engine/test/unittest/core/pattern/ui_extension:security_ui_extension_pattern_test", + "foundation/arkui/ace_engine/test/unittest/core/pattern/window_scene:window_scene_test", + "foundation/arkui/ace_engine/test/unittest/core/pattern/rating:rating_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/select:select_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/relative_container:relative_container_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/select_overlay:select_overlay_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/progress:progress_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/marquee:marquee_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/scroll_bar:scroll_bar_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/slider:slider_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/text:text_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/text:text_test_nullptr", + "foundation/arkui/ace_engine/test/unittest/core/pattern/list:list_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pattern/grid_row:grid_row_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:event_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:click_event_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:drag_event_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:drag_event_test_ng_base", + "foundation/arkui/ace_engine/test/unittest/core/event:event_hub_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:focus_hub_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:gesture_event_hub_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:input_event_hub_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:long_press_event_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:mouse_style_manager_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:pan_event_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:scrollable_event_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:state_style_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:touch_event_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:response_ctrl_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:input_event_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:focus_box_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:axis_event_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/property:grid_property_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/property:accessibility_property_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/property:border_property_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/property:calc_length_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/property:gradient_property_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/property:measure_utils_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/property:property_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/property:layout_constraint_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/property:templates_parser_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/pipeline:pipeline_context_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/animation:geometry_transition_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/svg:parse_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/svg:svg_dom_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/svg:svg_utils_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/svg:svg_context_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/svg:svg_node_test_ng", + "foundation/arkui/ace_engine/test/unittest/base:geometry_test", + "foundation/arkui/ace_engine/test/unittest/base:util_test", + "foundation/arkui/ace_engine/test/unittest/bridge/common/utils:bridge_utils_test", + "foundation/arkui/ace_engine/test/unittest/bridge/common/sourcemap:bridge_source_map_test" + ], + "adapting_test_targets": [ + "foundation/arkui/ace_engine/frameworks/core/animation/test/unittest/svg_animate:SvgAnimateTest", + "foundation/arkui/ace_engine/frameworks/core/animation/test/unittest/framework:AnimationTest", + "foundation/arkui/ace_engine/frameworks/core/animation/test/unittest/spring_chain:SpringChainTest", + "foundation/arkui/ace_engine/frameworks/bridge/test/unittest/pluginfrontend:PluginFrontendDelegateTest", + "foundation/arkui/ace_engine/frameworks/bridge/test/unittest/pluginfrontend:PluginFrontendTest", + "foundation/arkui/ace_engine/test/unittest/core/common/resource:resource_manager_test", + "foundation/arkui/ace_engine/test/unittest/core/common/recorder:event_recorder_test", + "foundation/arkui/ace_engine/test/unittest/core/common/others:thread_checker_test", + "foundation/arkui/ace_engine/test/unittest/core/common/ime:ime_test", + "foundation/arkui/ace_engine/test/unittest/core/image:image_cache_test", + "foundation/arkui/ace_engine/test/unittest/core/image:ImageProviderTest", + "foundation/arkui/ace_engine/test/unittest/core/image:ImageCompressorTest", + "foundation/arkui/ace_engine/test/unittest/core/pattern/web:web_pattern_unit_test_ohos", + "foundation/arkui/ace_engine/test/unittest/core/pattern/plugin:plugin_pattern_test_ng", + "foundation/arkui/ace_engine/test/unittest/core/event:resample_and_velocity_test_ng" + ] + +} diff --git a/precise_compilation/ace_engine_tdd.py b/precise_compilation/ace_engine_tdd.py new file mode 100644 index 0000000000000000000000000000000000000000..a7b2f1b7a10a4eae9b1d1cb46d9a2248fa45dbc2 --- /dev/null +++ b/precise_compilation/ace_engine_tdd.py @@ -0,0 +1,220 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2025 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import os +import re +import json +import mmap +from functools import lru_cache +from collections import defaultdict + + +class BuildProcessor: + + def __init__(self, root_dir, ace_root): + self.root_dir = root_dir + self.ace_root = ace_root + self.build_info = defaultdict(lambda: {"name": "", "source_list": [], "deps_list": [], "include_list": [], "config_list": []}) + self.data_json = [] + self.group_json = [] + + self.unittest_pattern = re.compile( + r'(ace|ohos)_unittest\("([^"]*)"\)\s*\{(.*?)(?=\})', + re.DOTALL | re.MULTILINE + ) + self.group_pattern = re.compile( + r'group\("([^"]*)"\)\s*\{(.*?)(?=\})', + re.DOTALL | re.MULTILINE + ) + self.sources_pattern = re.compile(r'sources\s*=\s*\[(.*?)\]', re.DOTALL) + self.deps_pattern = re.compile(r'deps\s*[+]?=\s*\[(.*?)\]', re.DOTALL) + self.includes_pattern = re.compile(r'include_dirs\s*[+]?=\s*\[(.*?)\]', re.DOTALL) + self.configs_pattern = re.compile(r'configs\s*[+]?=\s*\[(.*?)\]', re.DOTALL) + + def execute(self): + for root, _, files in os.walk(self.root_dir): + if "BUILD.gn" in files: + path = os.path.join(root, "BUILD.gn") + self.parse_build_gn(path) + self.parse_groups(path) + + change_files, oh_fields = self.process_changes() + + if len(oh_fields) == 1 and oh_fields[0] == "arkui_ace_engine": + print(" ".join(self.analyze_impact(change_files))) + else: + print(f"TDDarkuarkui_ace_engine") + self.generate_output() + + def parse_build_gn(self, file_path): + content = self._read_file(file_path) + processed_content = "\n".join(line.split("#")[0].rstrip() + for line in content.splitlines()) + + for match in self.unittest_pattern.finditer(processed_content): + self._process_unittest(match, file_path) + + def process_file(self, file_path): + content = self._read_file(file_path) + return {header for line in content.split('\n') + if (header := self._process_includes(line))} + + def parse_groups(self, file_path): + content = self._read_file(file_path) + processed_content = "\n".join(line.split("#")[0].rstrip() + for line in content.splitlines()) + + for match in self.group_pattern.finditer(processed_content): + self._process_group(match, file_path) + + def process_changes(self): + change_info = self._read_json("change_info.json") + openharmony_fields = [v["name"] for v in change_info.values() if "name" in v] + + change_files = [] + file_operations = { + "added": lambda x: x, + "rename": lambda x: [item for pair in x for item in pair], + "modified": lambda x: x, + "deleted": lambda x: x + } + + for value in change_info.values(): + changed_files = value.get("changed_file_list", {}) + for op, processor in file_operations.items(): + if op in changed_files: + change_files.extend(processor(changed_files[op])) + + return ( + [os.path.join(self.ace_root, f) for f in change_files], + openharmony_fields + ) + + def generate_output(self): + with open("test_targets.json", "w") as f: + json.dump(self.data_json, f, indent=2) + + with open("groups.json", "w") as f: + json.dump(self.group_json, f, indent=2) + + def analyze_impact(self, change_files): + tdd_data = self._read_json("test/testfwk/developer_test/precise_compilation/ace_engine.json") or {} + adapted_targets = set(tdd_data.get("adapted_test_targets", [])) + adapting_targets = set(tdd_data.get("adapting_test_targets", [])) + + change_set = set(change_files) + impacted = [] + + for target in self.data_json: + target_sets = { + "source_list": set(target["source_list"]), + "deps_list": set(target["deps_list"]), + "includes_list": set(target["includes_list"]), + "configs_list": set(target["configs_list"]), + "source_h": set(target["source_h"]), + "dep_h": set(target["dep_h"]), + "includes_h": set(target["includes_h"]), + "configs_h": set(target["configs_h"]) + } + if any(change_set & s for s in target_sets.values()): + impacted.append(target["test_target"]) + if target["test_target"] in adapting_targets: + return ["TDDarkui_ace_engine"] + + return ["TDDarkui_ace_engine"] if not impacted else impacted + + @lru_cache(maxsize=128) + def _read_file(self, file_path): + try: + with open(file_path, 'r', encoding='utf-8') as f: + return f.read() + except Exception as e: + return "" + + def _process_includes(self, line): + for pattern in [r'#include\s*"(.*?)"', r'#include\s*<(.*?)>']: + match = re.match(pattern, line) + if match and (header := match.group(1)).endswith('.h'): + return header + return None + + def _process_unittest(self, match, file_path): + target_name = match.group(2) + target_content = match.group(3) + base_path = os.path.dirname(file_path) + + sources = self._get_gn_content(self.sources_pattern, target_content, base_path) + deps = self._get_gn_content(self.deps_pattern, target_content, base_path) + includes = self._get_gn_content(self.includes_pattern, target_content, base_path) + configs = self._get_gn_content(self.configs_pattern, target_content, base_path) + + source_h = {h for s in sources for h in self.process_file(s)} + dep_h = {h for d in deps for h in self.process_file(d)} + include_h = {h for s in includes for h in self.process_file(s)} + config_h = {h for d in configs for h in self.process_file(d)} + + build_target = f"{os.path.dirname(file_path)}:{target_name}" + self.data_json.append({ + "test_target": build_target, + "source_list": sources, + "deps_list": deps, + "includes_list": includes, + "configs_list": configs, + "source_h": list(source_h), + "dep_h": list(dep_h), + "includes_h": list(include_h), + "configs_h": list(config_h) + }) + + def _process_group(self, match, file_path): + group_name = match.group(1) + group_content = match.group(2) + base_path = os.path.dirname(file_path) + + deps = [self._normalize_path(d, base_path).replace("/:", ":") + for d in self._get_gn_content(self.deps_pattern, group_content, "")] + + self.group_json.append({ + "group_name": f"{base_path}:{group_name}", + "deps_list": deps + }) + + def _get_gn_content(self, pattern, content, base_path): + if not (match := pattern.search(content)): + return [] + return [self._normalize_path(s, base_path) + for s in match.group(1).split(',') if s.strip()] + + def _normalize_path(self, s, base_path): + s = s.strip().strip('"') + if '/' not in s: + return os.path.join(base_path, s) + return s.replace('$ace_root', self.ace_root) + + def _read_json(self, path): + try: + with open(path, 'r', encoding='utf-8') as f: + return json.load(f) + except Exception as e: + return {} + + + +if __name__ == "__main__": + processor = BuildProcessor( + root_dir="foundation/arkui/ace_engine", + ace_root="foundation/arkui/ace_engine" + ) + processor.execute()