Best JavaScript code snippet using ng-mocks
many-actions.gyp
Source:many-actions.gyp
1# Copyright (c) 2012 Google Inc. All rights reserved.2# Use of this source code is governed by a BSD-style license that can be3# found in the LICENSE file.4{5 'target_defaults': {6 'msvs_cygwin_dirs': ['../../../../<(DEPTH)/third_party/cygwin'],7 },8 'targets': [9 {10 'target_name': 'a',11 'type': 'none',12 'actions': [13 {14 'action_name': 'do_0',15 'inputs': [],16 'outputs': ['<(PRODUCT_DIR)/generated_0.h'],17 'action': [18 'touch',19 '<(PRODUCT_DIR)/generated_0.h',20 ],21 },22 {23 'action_name': 'do_1',24 'inputs': [],25 'outputs': ['<(PRODUCT_DIR)/generated_1.h'],26 'action': [27 'touch',28 '<(PRODUCT_DIR)/generated_1.h',29 ],30 },31 {32 'action_name': 'do_2',33 'inputs': [],34 'outputs': ['<(PRODUCT_DIR)/generated_2.h'],35 'action': [36 'touch',37 '<(PRODUCT_DIR)/generated_2.h',38 ],39 },40 {41 'action_name': 'do_3',42 'inputs': [],43 'outputs': ['<(PRODUCT_DIR)/generated_3.h'],44 'action': [45 'touch',46 '<(PRODUCT_DIR)/generated_3.h',47 ],48 },49 {50 'action_name': 'do_4',51 'inputs': [],52 'outputs': ['<(PRODUCT_DIR)/generated_4.h'],53 'action': [54 'touch',55 '<(PRODUCT_DIR)/generated_4.h',56 ],57 },58 {59 'action_name': 'do_5',60 'inputs': [],61 'outputs': ['<(PRODUCT_DIR)/generated_5.h'],62 'action': [63 'touch',64 '<(PRODUCT_DIR)/generated_5.h',65 ],66 },67 {68 'action_name': 'do_6',69 'inputs': [],70 'outputs': ['<(PRODUCT_DIR)/generated_6.h'],71 'action': [72 'touch',73 '<(PRODUCT_DIR)/generated_6.h',74 ],75 },76 {77 'action_name': 'do_7',78 'inputs': [],79 'outputs': ['<(PRODUCT_DIR)/generated_7.h'],80 'action': [81 'touch',82 '<(PRODUCT_DIR)/generated_7.h',83 ],84 },85 {86 'action_name': 'do_8',87 'inputs': [],88 'outputs': ['<(PRODUCT_DIR)/generated_8.h'],89 'action': [90 'touch',91 '<(PRODUCT_DIR)/generated_8.h',92 ],93 },94 {95 'action_name': 'do_9',96 'inputs': [],97 'outputs': ['<(PRODUCT_DIR)/generated_9.h'],98 'action': [99 'touch',100 '<(PRODUCT_DIR)/generated_9.h',101 ],102 },103 {104 'action_name': 'do_10',105 'inputs': [],106 'outputs': ['<(PRODUCT_DIR)/generated_10.h'],107 'action': [108 'touch',109 '<(PRODUCT_DIR)/generated_10.h',110 ],111 },112 {113 'action_name': 'do_11',114 'inputs': [],115 'outputs': ['<(PRODUCT_DIR)/generated_11.h'],116 'action': [117 'touch',118 '<(PRODUCT_DIR)/generated_11.h',119 ],120 },121 {122 'action_name': 'do_12',123 'inputs': [],124 'outputs': ['<(PRODUCT_DIR)/generated_12.h'],125 'action': [126 'touch',127 '<(PRODUCT_DIR)/generated_12.h',128 ],129 },130 {131 'action_name': 'do_13',132 'inputs': [],133 'outputs': ['<(PRODUCT_DIR)/generated_13.h'],134 'action': [135 'touch',136 '<(PRODUCT_DIR)/generated_13.h',137 ],138 },139 {140 'action_name': 'do_14',141 'inputs': [],142 'outputs': ['<(PRODUCT_DIR)/generated_14.h'],143 'action': [144 'touch',145 '<(PRODUCT_DIR)/generated_14.h',146 ],147 },148 {149 'action_name': 'do_15',150 'inputs': [],151 'outputs': ['<(PRODUCT_DIR)/generated_15.h'],152 'action': [153 'touch',154 '<(PRODUCT_DIR)/generated_15.h',155 ],156 },157 {158 'action_name': 'do_16',159 'inputs': [],160 'outputs': ['<(PRODUCT_DIR)/generated_16.h'],161 'action': [162 'touch',163 '<(PRODUCT_DIR)/generated_16.h',164 ],165 },166 {167 'action_name': 'do_17',168 'inputs': [],169 'outputs': ['<(PRODUCT_DIR)/generated_17.h'],170 'action': [171 'touch',172 '<(PRODUCT_DIR)/generated_17.h',173 ],174 },175 {176 'action_name': 'do_18',177 'inputs': [],178 'outputs': ['<(PRODUCT_DIR)/generated_18.h'],179 'action': [180 'touch',181 '<(PRODUCT_DIR)/generated_18.h',182 ],183 },184 {185 'action_name': 'do_19',186 'inputs': [],187 'outputs': ['<(PRODUCT_DIR)/generated_19.h'],188 'action': [189 'touch',190 '<(PRODUCT_DIR)/generated_19.h',191 ],192 },193 {194 'action_name': 'do_20',195 'inputs': [],196 'outputs': ['<(PRODUCT_DIR)/generated_20.h'],197 'action': [198 'touch',199 '<(PRODUCT_DIR)/generated_20.h',200 ],201 },202 {203 'action_name': 'do_21',204 'inputs': [],205 'outputs': ['<(PRODUCT_DIR)/generated_21.h'],206 'action': [207 'touch',208 '<(PRODUCT_DIR)/generated_21.h',209 ],210 },211 {212 'action_name': 'do_22',213 'inputs': [],214 'outputs': ['<(PRODUCT_DIR)/generated_22.h'],215 'action': [216 'touch',217 '<(PRODUCT_DIR)/generated_22.h',218 ],219 },220 {221 'action_name': 'do_23',222 'inputs': [],223 'outputs': ['<(PRODUCT_DIR)/generated_23.h'],224 'action': [225 'touch',226 '<(PRODUCT_DIR)/generated_23.h',227 ],228 },229 {230 'action_name': 'do_24',231 'inputs': [],232 'outputs': ['<(PRODUCT_DIR)/generated_24.h'],233 'action': [234 'touch',235 '<(PRODUCT_DIR)/generated_24.h',236 ],237 },238 {239 'action_name': 'do_25',240 'inputs': [],241 'outputs': ['<(PRODUCT_DIR)/generated_25.h'],242 'action': [243 'touch',244 '<(PRODUCT_DIR)/generated_25.h',245 ],246 },247 {248 'action_name': 'do_26',249 'inputs': [],250 'outputs': ['<(PRODUCT_DIR)/generated_26.h'],251 'action': [252 'touch',253 '<(PRODUCT_DIR)/generated_26.h',254 ],255 },256 {257 'action_name': 'do_27',258 'inputs': [],259 'outputs': ['<(PRODUCT_DIR)/generated_27.h'],260 'action': [261 'touch',262 '<(PRODUCT_DIR)/generated_27.h',263 ],264 },265 {266 'action_name': 'do_28',267 'inputs': [],268 'outputs': ['<(PRODUCT_DIR)/generated_28.h'],269 'action': [270 'touch',271 '<(PRODUCT_DIR)/generated_28.h',272 ],273 },274 {275 'action_name': 'do_29',276 'inputs': [],277 'outputs': ['<(PRODUCT_DIR)/generated_29.h'],278 'action': [279 'touch',280 '<(PRODUCT_DIR)/generated_29.h',281 ],282 },283 {284 'action_name': 'do_30',285 'inputs': [],286 'outputs': ['<(PRODUCT_DIR)/generated_30.h'],287 'action': [288 'touch',289 '<(PRODUCT_DIR)/generated_30.h',290 ],291 },292 {293 'action_name': 'do_31',294 'inputs': [],295 'outputs': ['<(PRODUCT_DIR)/generated_31.h'],296 'action': [297 'touch',298 '<(PRODUCT_DIR)/generated_31.h',299 ],300 },301 {302 'action_name': 'do_32',303 'inputs': [],304 'outputs': ['<(PRODUCT_DIR)/generated_32.h'],305 'action': [306 'touch',307 '<(PRODUCT_DIR)/generated_32.h',308 ],309 },310 {311 'action_name': 'do_33',312 'inputs': [],313 'outputs': ['<(PRODUCT_DIR)/generated_33.h'],314 'action': [315 'touch',316 '<(PRODUCT_DIR)/generated_33.h',317 ],318 },319 {320 'action_name': 'do_34',321 'inputs': [],322 'outputs': ['<(PRODUCT_DIR)/generated_34.h'],323 'action': [324 'touch',325 '<(PRODUCT_DIR)/generated_34.h',326 ],327 },328 {329 'action_name': 'do_35',330 'inputs': [],331 'outputs': ['<(PRODUCT_DIR)/generated_35.h'],332 'action': [333 'touch',334 '<(PRODUCT_DIR)/generated_35.h',335 ],336 },337 {338 'action_name': 'do_36',339 'inputs': [],340 'outputs': ['<(PRODUCT_DIR)/generated_36.h'],341 'action': [342 'touch',343 '<(PRODUCT_DIR)/generated_36.h',344 ],345 },346 {347 'action_name': 'do_37',348 'inputs': [],349 'outputs': ['<(PRODUCT_DIR)/generated_37.h'],350 'action': [351 'touch',352 '<(PRODUCT_DIR)/generated_37.h',353 ],354 },355 {356 'action_name': 'do_38',357 'inputs': [],358 'outputs': ['<(PRODUCT_DIR)/generated_38.h'],359 'action': [360 'touch',361 '<(PRODUCT_DIR)/generated_38.h',362 ],363 },364 {365 'action_name': 'do_39',366 'inputs': [],367 'outputs': ['<(PRODUCT_DIR)/generated_39.h'],368 'action': [369 'touch',370 '<(PRODUCT_DIR)/generated_39.h',371 ],372 },373 {374 'action_name': 'do_40',375 'inputs': [],376 'outputs': ['<(PRODUCT_DIR)/generated_40.h'],377 'action': [378 'touch',379 '<(PRODUCT_DIR)/generated_40.h',380 ],381 },382 {383 'action_name': 'do_41',384 'inputs': [],385 'outputs': ['<(PRODUCT_DIR)/generated_41.h'],386 'action': [387 'touch',388 '<(PRODUCT_DIR)/generated_41.h',389 ],390 },391 {392 'action_name': 'do_42',393 'inputs': [],394 'outputs': ['<(PRODUCT_DIR)/generated_42.h'],395 'action': [396 'touch',397 '<(PRODUCT_DIR)/generated_42.h',398 ],399 },400 {401 'action_name': 'do_43',402 'inputs': [],403 'outputs': ['<(PRODUCT_DIR)/generated_43.h'],404 'action': [405 'touch',406 '<(PRODUCT_DIR)/generated_43.h',407 ],408 },409 {410 'action_name': 'do_44',411 'inputs': [],412 'outputs': ['<(PRODUCT_DIR)/generated_44.h'],413 'action': [414 'touch',415 '<(PRODUCT_DIR)/generated_44.h',416 ],417 },418 {419 'action_name': 'do_45',420 'inputs': [],421 'outputs': ['<(PRODUCT_DIR)/generated_45.h'],422 'action': [423 'touch',424 '<(PRODUCT_DIR)/generated_45.h',425 ],426 },427 {428 'action_name': 'do_46',429 'inputs': [],430 'outputs': ['<(PRODUCT_DIR)/generated_46.h'],431 'action': [432 'touch',433 '<(PRODUCT_DIR)/generated_46.h',434 ],435 },436 {437 'action_name': 'do_47',438 'inputs': [],439 'outputs': ['<(PRODUCT_DIR)/generated_47.h'],440 'action': [441 'touch',442 '<(PRODUCT_DIR)/generated_47.h',443 ],444 },445 {446 'action_name': 'do_48',447 'inputs': [],448 'outputs': ['<(PRODUCT_DIR)/generated_48.h'],449 'action': [450 'touch',451 '<(PRODUCT_DIR)/generated_48.h',452 ],453 },454 {455 'action_name': 'do_49',456 'inputs': [],457 'outputs': ['<(PRODUCT_DIR)/generated_49.h'],458 'action': [459 'touch',460 '<(PRODUCT_DIR)/generated_49.h',461 ],462 },463 {464 'action_name': 'do_50',465 'inputs': [],466 'outputs': ['<(PRODUCT_DIR)/generated_50.h'],467 'action': [468 'touch',469 '<(PRODUCT_DIR)/generated_50.h',470 ],471 },472 {473 'action_name': 'do_51',474 'inputs': [],475 'outputs': ['<(PRODUCT_DIR)/generated_51.h'],476 'action': [477 'touch',478 '<(PRODUCT_DIR)/generated_51.h',479 ],480 },481 {482 'action_name': 'do_52',483 'inputs': [],484 'outputs': ['<(PRODUCT_DIR)/generated_52.h'],485 'action': [486 'touch',487 '<(PRODUCT_DIR)/generated_52.h',488 ],489 },490 {491 'action_name': 'do_53',492 'inputs': [],493 'outputs': ['<(PRODUCT_DIR)/generated_53.h'],494 'action': [495 'touch',496 '<(PRODUCT_DIR)/generated_53.h',497 ],498 },499 {500 'action_name': 'do_54',501 'inputs': [],502 'outputs': ['<(PRODUCT_DIR)/generated_54.h'],503 'action': [504 'touch',505 '<(PRODUCT_DIR)/generated_54.h',506 ],507 },508 {509 'action_name': 'do_55',510 'inputs': [],511 'outputs': ['<(PRODUCT_DIR)/generated_55.h'],512 'action': [513 'touch',514 '<(PRODUCT_DIR)/generated_55.h',515 ],516 },517 {518 'action_name': 'do_56',519 'inputs': [],520 'outputs': ['<(PRODUCT_DIR)/generated_56.h'],521 'action': [522 'touch',523 '<(PRODUCT_DIR)/generated_56.h',524 ],525 },526 {527 'action_name': 'do_57',528 'inputs': [],529 'outputs': ['<(PRODUCT_DIR)/generated_57.h'],530 'action': [531 'touch',532 '<(PRODUCT_DIR)/generated_57.h',533 ],534 },535 {536 'action_name': 'do_58',537 'inputs': [],538 'outputs': ['<(PRODUCT_DIR)/generated_58.h'],539 'action': [540 'touch',541 '<(PRODUCT_DIR)/generated_58.h',542 ],543 },544 {545 'action_name': 'do_59',546 'inputs': [],547 'outputs': ['<(PRODUCT_DIR)/generated_59.h'],548 'action': [549 'touch',550 '<(PRODUCT_DIR)/generated_59.h',551 ],552 },553 {554 'action_name': 'do_60',555 'inputs': [],556 'outputs': ['<(PRODUCT_DIR)/generated_60.h'],557 'action': [558 'touch',559 '<(PRODUCT_DIR)/generated_60.h',560 ],561 },562 {563 'action_name': 'do_61',564 'inputs': [],565 'outputs': ['<(PRODUCT_DIR)/generated_61.h'],566 'action': [567 'touch',568 '<(PRODUCT_DIR)/generated_61.h',569 ],570 },571 {572 'action_name': 'do_62',573 'inputs': [],574 'outputs': ['<(PRODUCT_DIR)/generated_62.h'],575 'action': [576 'touch',577 '<(PRODUCT_DIR)/generated_62.h',578 ],579 },580 {581 'action_name': 'do_63',582 'inputs': [],583 'outputs': ['<(PRODUCT_DIR)/generated_63.h'],584 'action': [585 'touch',586 '<(PRODUCT_DIR)/generated_63.h',587 ],588 },589 {590 'action_name': 'do_64',591 'inputs': [],592 'outputs': ['<(PRODUCT_DIR)/generated_64.h'],593 'action': [594 'touch',595 '<(PRODUCT_DIR)/generated_64.h',596 ],597 },598 {599 'action_name': 'do_65',600 'inputs': [],601 'outputs': ['<(PRODUCT_DIR)/generated_65.h'],602 'action': [603 'touch',604 '<(PRODUCT_DIR)/generated_65.h',605 ],606 },607 {608 'action_name': 'do_66',609 'inputs': [],610 'outputs': ['<(PRODUCT_DIR)/generated_66.h'],611 'action': [612 'touch',613 '<(PRODUCT_DIR)/generated_66.h',614 ],615 },616 {617 'action_name': 'do_67',618 'inputs': [],619 'outputs': ['<(PRODUCT_DIR)/generated_67.h'],620 'action': [621 'touch',622 '<(PRODUCT_DIR)/generated_67.h',623 ],624 },625 {626 'action_name': 'do_68',627 'inputs': [],628 'outputs': ['<(PRODUCT_DIR)/generated_68.h'],629 'action': [630 'touch',631 '<(PRODUCT_DIR)/generated_68.h',632 ],633 },634 {635 'action_name': 'do_69',636 'inputs': [],637 'outputs': ['<(PRODUCT_DIR)/generated_69.h'],638 'action': [639 'touch',640 '<(PRODUCT_DIR)/generated_69.h',641 ],642 },643 {644 'action_name': 'do_70',645 'inputs': [],646 'outputs': ['<(PRODUCT_DIR)/generated_70.h'],647 'action': [648 'touch',649 '<(PRODUCT_DIR)/generated_70.h',650 ],651 },652 {653 'action_name': 'do_71',654 'inputs': [],655 'outputs': ['<(PRODUCT_DIR)/generated_71.h'],656 'action': [657 'touch',658 '<(PRODUCT_DIR)/generated_71.h',659 ],660 },661 {662 'action_name': 'do_72',663 'inputs': [],664 'outputs': ['<(PRODUCT_DIR)/generated_72.h'],665 'action': [666 'touch',667 '<(PRODUCT_DIR)/generated_72.h',668 ],669 },670 {671 'action_name': 'do_73',672 'inputs': [],673 'outputs': ['<(PRODUCT_DIR)/generated_73.h'],674 'action': [675 'touch',676 '<(PRODUCT_DIR)/generated_73.h',677 ],678 },679 {680 'action_name': 'do_74',681 'inputs': [],682 'outputs': ['<(PRODUCT_DIR)/generated_74.h'],683 'action': [684 'touch',685 '<(PRODUCT_DIR)/generated_74.h',686 ],687 },688 {689 'action_name': 'do_75',690 'inputs': [],691 'outputs': ['<(PRODUCT_DIR)/generated_75.h'],692 'action': [693 'touch',694 '<(PRODUCT_DIR)/generated_75.h',695 ],696 },697 {698 'action_name': 'do_76',699 'inputs': [],700 'outputs': ['<(PRODUCT_DIR)/generated_76.h'],701 'action': [702 'touch',703 '<(PRODUCT_DIR)/generated_76.h',704 ],705 },706 {707 'action_name': 'do_77',708 'inputs': [],709 'outputs': ['<(PRODUCT_DIR)/generated_77.h'],710 'action': [711 'touch',712 '<(PRODUCT_DIR)/generated_77.h',713 ],714 },715 {716 'action_name': 'do_78',717 'inputs': [],718 'outputs': ['<(PRODUCT_DIR)/generated_78.h'],719 'action': [720 'touch',721 '<(PRODUCT_DIR)/generated_78.h',722 ],723 },724 {725 'action_name': 'do_79',726 'inputs': [],727 'outputs': ['<(PRODUCT_DIR)/generated_79.h'],728 'action': [729 'touch',730 '<(PRODUCT_DIR)/generated_79.h',731 ],732 },733 {734 'action_name': 'do_80',735 'inputs': [],736 'outputs': ['<(PRODUCT_DIR)/generated_80.h'],737 'action': [738 'touch',739 '<(PRODUCT_DIR)/generated_80.h',740 ],741 },742 {743 'action_name': 'do_81',744 'inputs': [],745 'outputs': ['<(PRODUCT_DIR)/generated_81.h'],746 'action': [747 'touch',748 '<(PRODUCT_DIR)/generated_81.h',749 ],750 },751 {752 'action_name': 'do_82',753 'inputs': [],754 'outputs': ['<(PRODUCT_DIR)/generated_82.h'],755 'action': [756 'touch',757 '<(PRODUCT_DIR)/generated_82.h',758 ],759 },760 {761 'action_name': 'do_83',762 'inputs': [],763 'outputs': ['<(PRODUCT_DIR)/generated_83.h'],764 'action': [765 'touch',766 '<(PRODUCT_DIR)/generated_83.h',767 ],768 },769 {770 'action_name': 'do_84',771 'inputs': [],772 'outputs': ['<(PRODUCT_DIR)/generated_84.h'],773 'action': [774 'touch',775 '<(PRODUCT_DIR)/generated_84.h',776 ],777 },778 {779 'action_name': 'do_85',780 'inputs': [],781 'outputs': ['<(PRODUCT_DIR)/generated_85.h'],782 'action': [783 'touch',784 '<(PRODUCT_DIR)/generated_85.h',785 ],786 },787 {788 'action_name': 'do_86',789 'inputs': [],790 'outputs': ['<(PRODUCT_DIR)/generated_86.h'],791 'action': [792 'touch',793 '<(PRODUCT_DIR)/generated_86.h',794 ],795 },796 {797 'action_name': 'do_87',798 'inputs': [],799 'outputs': ['<(PRODUCT_DIR)/generated_87.h'],800 'action': [801 'touch',802 '<(PRODUCT_DIR)/generated_87.h',803 ],804 },805 {806 'action_name': 'do_88',807 'inputs': [],808 'outputs': ['<(PRODUCT_DIR)/generated_88.h'],809 'action': [810 'touch',811 '<(PRODUCT_DIR)/generated_88.h',812 ],813 },814 {815 'action_name': 'do_89',816 'inputs': [],817 'outputs': ['<(PRODUCT_DIR)/generated_89.h'],818 'action': [819 'touch',820 '<(PRODUCT_DIR)/generated_89.h',821 ],822 },823 {824 'action_name': 'do_90',825 'inputs': [],826 'outputs': ['<(PRODUCT_DIR)/generated_90.h'],827 'action': [828 'touch',829 '<(PRODUCT_DIR)/generated_90.h',830 ],831 },832 {833 'action_name': 'do_91',834 'inputs': [],835 'outputs': ['<(PRODUCT_DIR)/generated_91.h'],836 'action': [837 'touch',838 '<(PRODUCT_DIR)/generated_91.h',839 ],840 },841 {842 'action_name': 'do_92',843 'inputs': [],844 'outputs': ['<(PRODUCT_DIR)/generated_92.h'],845 'action': [846 'touch',847 '<(PRODUCT_DIR)/generated_92.h',848 ],849 },850 {851 'action_name': 'do_93',852 'inputs': [],853 'outputs': ['<(PRODUCT_DIR)/generated_93.h'],854 'action': [855 'touch',856 '<(PRODUCT_DIR)/generated_93.h',857 ],858 },859 {860 'action_name': 'do_94',861 'inputs': [],862 'outputs': ['<(PRODUCT_DIR)/generated_94.h'],863 'action': [864 'touch',865 '<(PRODUCT_DIR)/generated_94.h',866 ],867 },868 {869 'action_name': 'do_95',870 'inputs': [],871 'outputs': ['<(PRODUCT_DIR)/generated_95.h'],872 'action': [873 'touch',874 '<(PRODUCT_DIR)/generated_95.h',875 ],876 },877 {878 'action_name': 'do_96',879 'inputs': [],880 'outputs': ['<(PRODUCT_DIR)/generated_96.h'],881 'action': [882 'touch',883 '<(PRODUCT_DIR)/generated_96.h',884 ],885 },886 {887 'action_name': 'do_97',888 'inputs': [],889 'outputs': ['<(PRODUCT_DIR)/generated_97.h'],890 'action': [891 'touch',892 '<(PRODUCT_DIR)/generated_97.h',893 ],894 },895 {896 'action_name': 'do_98',897 'inputs': [],898 'outputs': ['<(PRODUCT_DIR)/generated_98.h'],899 'action': [900 'touch',901 '<(PRODUCT_DIR)/generated_98.h',902 ],903 },904 {905 'action_name': 'do_99',906 'inputs': [],907 'outputs': ['<(PRODUCT_DIR)/generated_99.h'],908 'action': [909 'touch',910 '<(PRODUCT_DIR)/generated_99.h',911 ],912 },913 {914 'action_name': 'do_100',915 'inputs': [],916 'outputs': ['<(PRODUCT_DIR)/generated_100.h'],917 'action': [918 'touch',919 '<(PRODUCT_DIR)/generated_100.h',920 ],921 },922 {923 'action_name': 'do_101',924 'inputs': [],925 'outputs': ['<(PRODUCT_DIR)/generated_101.h'],926 'action': [927 'touch',928 '<(PRODUCT_DIR)/generated_101.h',929 ],930 },931 {932 'action_name': 'do_102',933 'inputs': [],934 'outputs': ['<(PRODUCT_DIR)/generated_102.h'],935 'action': [936 'touch',937 '<(PRODUCT_DIR)/generated_102.h',938 ],939 },940 {941 'action_name': 'do_103',942 'inputs': [],943 'outputs': ['<(PRODUCT_DIR)/generated_103.h'],944 'action': [945 'touch',946 '<(PRODUCT_DIR)/generated_103.h',947 ],948 },949 {950 'action_name': 'do_104',951 'inputs': [],952 'outputs': ['<(PRODUCT_DIR)/generated_104.h'],953 'action': [954 'touch',955 '<(PRODUCT_DIR)/generated_104.h',956 ],957 },958 {959 'action_name': 'do_105',960 'inputs': [],961 'outputs': ['<(PRODUCT_DIR)/generated_105.h'],962 'action': [963 'touch',964 '<(PRODUCT_DIR)/generated_105.h',965 ],966 },967 {968 'action_name': 'do_106',969 'inputs': [],970 'outputs': ['<(PRODUCT_DIR)/generated_106.h'],971 'action': [972 'touch',973 '<(PRODUCT_DIR)/generated_106.h',974 ],975 },976 {977 'action_name': 'do_107',978 'inputs': [],979 'outputs': ['<(PRODUCT_DIR)/generated_107.h'],980 'action': [981 'touch',982 '<(PRODUCT_DIR)/generated_107.h',983 ],984 },985 {986 'action_name': 'do_108',987 'inputs': [],988 'outputs': ['<(PRODUCT_DIR)/generated_108.h'],989 'action': [990 'touch',991 '<(PRODUCT_DIR)/generated_108.h',992 ],993 },994 {995 'action_name': 'do_109',996 'inputs': [],997 'outputs': ['<(PRODUCT_DIR)/generated_109.h'],998 'action': [999 'touch',1000 '<(PRODUCT_DIR)/generated_109.h',1001 ],1002 },1003 {1004 'action_name': 'do_110',1005 'inputs': [],1006 'outputs': ['<(PRODUCT_DIR)/generated_110.h'],1007 'action': [1008 'touch',1009 '<(PRODUCT_DIR)/generated_110.h',1010 ],1011 },1012 {1013 'action_name': 'do_111',1014 'inputs': [],1015 'outputs': ['<(PRODUCT_DIR)/generated_111.h'],1016 'action': [1017 'touch',1018 '<(PRODUCT_DIR)/generated_111.h',1019 ],1020 },1021 {1022 'action_name': 'do_112',1023 'inputs': [],1024 'outputs': ['<(PRODUCT_DIR)/generated_112.h'],1025 'action': [1026 'touch',1027 '<(PRODUCT_DIR)/generated_112.h',1028 ],1029 },1030 {1031 'action_name': 'do_113',1032 'inputs': [],1033 'outputs': ['<(PRODUCT_DIR)/generated_113.h'],1034 'action': [1035 'touch',1036 '<(PRODUCT_DIR)/generated_113.h',1037 ],1038 },1039 {1040 'action_name': 'do_114',1041 'inputs': [],1042 'outputs': ['<(PRODUCT_DIR)/generated_114.h'],1043 'action': [1044 'touch',1045 '<(PRODUCT_DIR)/generated_114.h',1046 ],1047 },1048 {1049 'action_name': 'do_115',1050 'inputs': [],1051 'outputs': ['<(PRODUCT_DIR)/generated_115.h'],1052 'action': [1053 'touch',1054 '<(PRODUCT_DIR)/generated_115.h',1055 ],1056 },1057 {1058 'action_name': 'do_116',1059 'inputs': [],1060 'outputs': ['<(PRODUCT_DIR)/generated_116.h'],1061 'action': [1062 'touch',1063 '<(PRODUCT_DIR)/generated_116.h',1064 ],1065 },1066 {1067 'action_name': 'do_117',1068 'inputs': [],1069 'outputs': ['<(PRODUCT_DIR)/generated_117.h'],1070 'action': [1071 'touch',1072 '<(PRODUCT_DIR)/generated_117.h',1073 ],1074 },1075 {1076 'action_name': 'do_118',1077 'inputs': [],1078 'outputs': ['<(PRODUCT_DIR)/generated_118.h'],1079 'action': [1080 'touch',1081 '<(PRODUCT_DIR)/generated_118.h',1082 ],1083 },1084 {1085 'action_name': 'do_119',1086 'inputs': [],1087 'outputs': ['<(PRODUCT_DIR)/generated_119.h'],1088 'action': [1089 'touch',1090 '<(PRODUCT_DIR)/generated_119.h',1091 ],1092 },1093 {1094 'action_name': 'do_120',1095 'inputs': [],1096 'outputs': ['<(PRODUCT_DIR)/generated_120.h'],1097 'action': [1098 'touch',1099 '<(PRODUCT_DIR)/generated_120.h',1100 ],1101 },1102 {1103 'action_name': 'do_121',1104 'inputs': [],1105 'outputs': ['<(PRODUCT_DIR)/generated_121.h'],1106 'action': [1107 'touch',1108 '<(PRODUCT_DIR)/generated_121.h',1109 ],1110 },1111 {1112 'action_name': 'do_122',1113 'inputs': [],1114 'outputs': ['<(PRODUCT_DIR)/generated_122.h'],1115 'action': [1116 'touch',1117 '<(PRODUCT_DIR)/generated_122.h',1118 ],1119 },1120 {1121 'action_name': 'do_123',1122 'inputs': [],1123 'outputs': ['<(PRODUCT_DIR)/generated_123.h'],1124 'action': [1125 'touch',1126 '<(PRODUCT_DIR)/generated_123.h',1127 ],1128 },1129 {1130 'action_name': 'do_124',1131 'inputs': [],1132 'outputs': ['<(PRODUCT_DIR)/generated_124.h'],1133 'action': [1134 'touch',1135 '<(PRODUCT_DIR)/generated_124.h',1136 ],1137 },1138 {1139 'action_name': 'do_125',1140 'inputs': [],1141 'outputs': ['<(PRODUCT_DIR)/generated_125.h'],1142 'action': [1143 'touch',1144 '<(PRODUCT_DIR)/generated_125.h',1145 ],1146 },1147 {1148 'action_name': 'do_126',1149 'inputs': [],1150 'outputs': ['<(PRODUCT_DIR)/generated_126.h'],1151 'action': [1152 'touch',1153 '<(PRODUCT_DIR)/generated_126.h',1154 ],1155 },1156 {1157 'action_name': 'do_127',1158 'inputs': [],1159 'outputs': ['<(PRODUCT_DIR)/generated_127.h'],1160 'action': [1161 'touch',1162 '<(PRODUCT_DIR)/generated_127.h',1163 ],1164 },1165 {1166 'action_name': 'do_128',1167 'inputs': [],1168 'outputs': ['<(PRODUCT_DIR)/generated_128.h'],1169 'action': [1170 'touch',1171 '<(PRODUCT_DIR)/generated_128.h',1172 ],1173 },1174 {1175 'action_name': 'do_129',1176 'inputs': [],1177 'outputs': ['<(PRODUCT_DIR)/generated_129.h'],1178 'action': [1179 'touch',1180 '<(PRODUCT_DIR)/generated_129.h',1181 ],1182 },1183 {1184 'action_name': 'do_130',1185 'inputs': [],1186 'outputs': ['<(PRODUCT_DIR)/generated_130.h'],1187 'action': [1188 'touch',1189 '<(PRODUCT_DIR)/generated_130.h',1190 ],1191 },1192 {1193 'action_name': 'do_131',1194 'inputs': [],1195 'outputs': ['<(PRODUCT_DIR)/generated_131.h'],1196 'action': [1197 'touch',1198 '<(PRODUCT_DIR)/generated_131.h',1199 ],1200 },1201 {1202 'action_name': 'do_132',1203 'inputs': [],1204 'outputs': ['<(PRODUCT_DIR)/generated_132.h'],1205 'action': [1206 'touch',1207 '<(PRODUCT_DIR)/generated_132.h',1208 ],1209 },1210 {1211 'action_name': 'do_133',1212 'inputs': [],1213 'outputs': ['<(PRODUCT_DIR)/generated_133.h'],1214 'action': [1215 'touch',1216 '<(PRODUCT_DIR)/generated_133.h',1217 ],1218 },1219 {1220 'action_name': 'do_134',1221 'inputs': [],1222 'outputs': ['<(PRODUCT_DIR)/generated_134.h'],1223 'action': [1224 'touch',1225 '<(PRODUCT_DIR)/generated_134.h',1226 ],1227 },1228 {1229 'action_name': 'do_135',1230 'inputs': [],1231 'outputs': ['<(PRODUCT_DIR)/generated_135.h'],1232 'action': [1233 'touch',1234 '<(PRODUCT_DIR)/generated_135.h',1235 ],1236 },1237 {1238 'action_name': 'do_136',1239 'inputs': [],1240 'outputs': ['<(PRODUCT_DIR)/generated_136.h'],1241 'action': [1242 'touch',1243 '<(PRODUCT_DIR)/generated_136.h',1244 ],1245 },1246 {1247 'action_name': 'do_137',1248 'inputs': [],1249 'outputs': ['<(PRODUCT_DIR)/generated_137.h'],1250 'action': [1251 'touch',1252 '<(PRODUCT_DIR)/generated_137.h',1253 ],1254 },1255 {1256 'action_name': 'do_138',1257 'inputs': [],1258 'outputs': ['<(PRODUCT_DIR)/generated_138.h'],1259 'action': [1260 'touch',1261 '<(PRODUCT_DIR)/generated_138.h',1262 ],1263 },1264 {1265 'action_name': 'do_139',1266 'inputs': [],1267 'outputs': ['<(PRODUCT_DIR)/generated_139.h'],1268 'action': [1269 'touch',1270 '<(PRODUCT_DIR)/generated_139.h',1271 ],1272 },1273 {1274 'action_name': 'do_140',1275 'inputs': [],1276 'outputs': ['<(PRODUCT_DIR)/generated_140.h'],1277 'action': [1278 'touch',1279 '<(PRODUCT_DIR)/generated_140.h',1280 ],1281 },1282 {1283 'action_name': 'do_141',1284 'inputs': [],1285 'outputs': ['<(PRODUCT_DIR)/generated_141.h'],1286 'action': [1287 'touch',1288 '<(PRODUCT_DIR)/generated_141.h',1289 ],1290 },1291 {1292 'action_name': 'do_142',1293 'inputs': [],1294 'outputs': ['<(PRODUCT_DIR)/generated_142.h'],1295 'action': [1296 'touch',1297 '<(PRODUCT_DIR)/generated_142.h',1298 ],1299 },1300 {1301 'action_name': 'do_143',1302 'inputs': [],1303 'outputs': ['<(PRODUCT_DIR)/generated_143.h'],1304 'action': [1305 'touch',1306 '<(PRODUCT_DIR)/generated_143.h',1307 ],1308 },1309 {1310 'action_name': 'do_144',1311 'inputs': [],1312 'outputs': ['<(PRODUCT_DIR)/generated_144.h'],1313 'action': [1314 'touch',1315 '<(PRODUCT_DIR)/generated_144.h',1316 ],1317 },1318 {1319 'action_name': 'do_145',1320 'inputs': [],1321 'outputs': ['<(PRODUCT_DIR)/generated_145.h'],1322 'action': [1323 'touch',1324 '<(PRODUCT_DIR)/generated_145.h',1325 ],1326 },1327 {1328 'action_name': 'do_146',1329 'inputs': [],1330 'outputs': ['<(PRODUCT_DIR)/generated_146.h'],1331 'action': [1332 'touch',1333 '<(PRODUCT_DIR)/generated_146.h',1334 ],1335 },1336 {1337 'action_name': 'do_147',1338 'inputs': [],1339 'outputs': ['<(PRODUCT_DIR)/generated_147.h'],1340 'action': [1341 'touch',1342 '<(PRODUCT_DIR)/generated_147.h',1343 ],1344 },1345 {1346 'action_name': 'do_148',1347 'inputs': [],1348 'outputs': ['<(PRODUCT_DIR)/generated_148.h'],1349 'action': [1350 'touch',1351 '<(PRODUCT_DIR)/generated_148.h',1352 ],1353 },1354 {1355 'action_name': 'do_149',1356 'inputs': [],1357 'outputs': ['<(PRODUCT_DIR)/generated_149.h'],1358 'action': [1359 'touch',1360 '<(PRODUCT_DIR)/generated_149.h',1361 ],1362 },1363 {1364 'action_name': 'do_150',1365 'inputs': [],1366 'outputs': ['<(PRODUCT_DIR)/generated_150.h'],1367 'action': [1368 'touch',1369 '<(PRODUCT_DIR)/generated_150.h',1370 ],1371 },1372 {1373 'action_name': 'do_151',1374 'inputs': [],1375 'outputs': ['<(PRODUCT_DIR)/generated_151.h'],1376 'action': [1377 'touch',1378 '<(PRODUCT_DIR)/generated_151.h',1379 ],1380 },1381 {1382 'action_name': 'do_152',1383 'inputs': [],1384 'outputs': ['<(PRODUCT_DIR)/generated_152.h'],1385 'action': [1386 'touch',1387 '<(PRODUCT_DIR)/generated_152.h',1388 ],1389 },1390 {1391 'action_name': 'do_153',1392 'inputs': [],1393 'outputs': ['<(PRODUCT_DIR)/generated_153.h'],1394 'action': [1395 'touch',1396 '<(PRODUCT_DIR)/generated_153.h',1397 ],1398 },1399 {1400 'action_name': 'do_154',1401 'inputs': [],1402 'outputs': ['<(PRODUCT_DIR)/generated_154.h'],1403 'action': [1404 'touch',1405 '<(PRODUCT_DIR)/generated_154.h',1406 ],1407 },1408 {1409 'action_name': 'do_155',1410 'inputs': [],1411 'outputs': ['<(PRODUCT_DIR)/generated_155.h'],1412 'action': [1413 'touch',1414 '<(PRODUCT_DIR)/generated_155.h',1415 ],1416 },1417 {1418 'action_name': 'do_156',1419 'inputs': [],1420 'outputs': ['<(PRODUCT_DIR)/generated_156.h'],1421 'action': [1422 'touch',1423 '<(PRODUCT_DIR)/generated_156.h',1424 ],1425 },1426 {1427 'action_name': 'do_157',1428 'inputs': [],1429 'outputs': ['<(PRODUCT_DIR)/generated_157.h'],1430 'action': [1431 'touch',1432 '<(PRODUCT_DIR)/generated_157.h',1433 ],1434 },1435 {1436 'action_name': 'do_158',1437 'inputs': [],1438 'outputs': ['<(PRODUCT_DIR)/generated_158.h'],1439 'action': [1440 'touch',1441 '<(PRODUCT_DIR)/generated_158.h',1442 ],1443 },1444 {1445 'action_name': 'do_159',1446 'inputs': [],1447 'outputs': ['<(PRODUCT_DIR)/generated_159.h'],1448 'action': [1449 'touch',1450 '<(PRODUCT_DIR)/generated_159.h',1451 ],1452 },1453 {1454 'action_name': 'do_160',1455 'inputs': [],1456 'outputs': ['<(PRODUCT_DIR)/generated_160.h'],1457 'action': [1458 'touch',1459 '<(PRODUCT_DIR)/generated_160.h',1460 ],1461 },1462 {1463 'action_name': 'do_161',1464 'inputs': [],1465 'outputs': ['<(PRODUCT_DIR)/generated_161.h'],1466 'action': [1467 'touch',1468 '<(PRODUCT_DIR)/generated_161.h',1469 ],1470 },1471 {1472 'action_name': 'do_162',1473 'inputs': [],1474 'outputs': ['<(PRODUCT_DIR)/generated_162.h'],1475 'action': [1476 'touch',1477 '<(PRODUCT_DIR)/generated_162.h',1478 ],1479 },1480 {1481 'action_name': 'do_163',1482 'inputs': [],1483 'outputs': ['<(PRODUCT_DIR)/generated_163.h'],1484 'action': [1485 'touch',1486 '<(PRODUCT_DIR)/generated_163.h',1487 ],1488 },1489 {1490 'action_name': 'do_164',1491 'inputs': [],1492 'outputs': ['<(PRODUCT_DIR)/generated_164.h'],1493 'action': [1494 'touch',1495 '<(PRODUCT_DIR)/generated_164.h',1496 ],1497 },1498 {1499 'action_name': 'do_165',1500 'inputs': [],1501 'outputs': ['<(PRODUCT_DIR)/generated_165.h'],1502 'action': [1503 'touch',1504 '<(PRODUCT_DIR)/generated_165.h',1505 ],1506 },1507 {1508 'action_name': 'do_166',1509 'inputs': [],1510 'outputs': ['<(PRODUCT_DIR)/generated_166.h'],1511 'action': [1512 'touch',1513 '<(PRODUCT_DIR)/generated_166.h',1514 ],1515 },1516 {1517 'action_name': 'do_167',1518 'inputs': [],1519 'outputs': ['<(PRODUCT_DIR)/generated_167.h'],1520 'action': [1521 'touch',1522 '<(PRODUCT_DIR)/generated_167.h',1523 ],1524 },1525 {1526 'action_name': 'do_168',1527 'inputs': [],1528 'outputs': ['<(PRODUCT_DIR)/generated_168.h'],1529 'action': [1530 'touch',1531 '<(PRODUCT_DIR)/generated_168.h',1532 ],1533 },1534 {1535 'action_name': 'do_169',1536 'inputs': [],1537 'outputs': ['<(PRODUCT_DIR)/generated_169.h'],1538 'action': [1539 'touch',1540 '<(PRODUCT_DIR)/generated_169.h',1541 ],1542 },1543 {1544 'action_name': 'do_170',1545 'inputs': [],1546 'outputs': ['<(PRODUCT_DIR)/generated_170.h'],1547 'action': [1548 'touch',1549 '<(PRODUCT_DIR)/generated_170.h',1550 ],1551 },1552 {1553 'action_name': 'do_171',1554 'inputs': [],1555 'outputs': ['<(PRODUCT_DIR)/generated_171.h'],1556 'action': [1557 'touch',1558 '<(PRODUCT_DIR)/generated_171.h',1559 ],1560 },1561 {1562 'action_name': 'do_172',1563 'inputs': [],1564 'outputs': ['<(PRODUCT_DIR)/generated_172.h'],1565 'action': [1566 'touch',1567 '<(PRODUCT_DIR)/generated_172.h',1568 ],1569 },1570 {1571 'action_name': 'do_173',1572 'inputs': [],1573 'outputs': ['<(PRODUCT_DIR)/generated_173.h'],1574 'action': [1575 'touch',1576 '<(PRODUCT_DIR)/generated_173.h',1577 ],1578 },1579 {1580 'action_name': 'do_174',1581 'inputs': [],1582 'outputs': ['<(PRODUCT_DIR)/generated_174.h'],1583 'action': [1584 'touch',1585 '<(PRODUCT_DIR)/generated_174.h',1586 ],1587 },1588 {1589 'action_name': 'do_175',1590 'inputs': [],1591 'outputs': ['<(PRODUCT_DIR)/generated_175.h'],1592 'action': [1593 'touch',1594 '<(PRODUCT_DIR)/generated_175.h',1595 ],1596 },1597 {1598 'action_name': 'do_176',1599 'inputs': [],1600 'outputs': ['<(PRODUCT_DIR)/generated_176.h'],1601 'action': [1602 'touch',1603 '<(PRODUCT_DIR)/generated_176.h',1604 ],1605 },1606 {1607 'action_name': 'do_177',1608 'inputs': [],1609 'outputs': ['<(PRODUCT_DIR)/generated_177.h'],1610 'action': [1611 'touch',1612 '<(PRODUCT_DIR)/generated_177.h',1613 ],1614 },1615 {1616 'action_name': 'do_178',1617 'inputs': [],1618 'outputs': ['<(PRODUCT_DIR)/generated_178.h'],1619 'action': [1620 'touch',1621 '<(PRODUCT_DIR)/generated_178.h',1622 ],1623 },1624 {1625 'action_name': 'do_179',1626 'inputs': [],1627 'outputs': ['<(PRODUCT_DIR)/generated_179.h'],1628 'action': [1629 'touch',1630 '<(PRODUCT_DIR)/generated_179.h',1631 ],1632 },1633 {1634 'action_name': 'do_180',1635 'inputs': [],1636 'outputs': ['<(PRODUCT_DIR)/generated_180.h'],1637 'action': [1638 'touch',1639 '<(PRODUCT_DIR)/generated_180.h',1640 ],1641 },1642 {1643 'action_name': 'do_181',1644 'inputs': [],1645 'outputs': ['<(PRODUCT_DIR)/generated_181.h'],1646 'action': [1647 'touch',1648 '<(PRODUCT_DIR)/generated_181.h',1649 ],1650 },1651 {1652 'action_name': 'do_182',1653 'inputs': [],1654 'outputs': ['<(PRODUCT_DIR)/generated_182.h'],1655 'action': [1656 'touch',1657 '<(PRODUCT_DIR)/generated_182.h',1658 ],1659 },1660 {1661 'action_name': 'do_183',1662 'inputs': [],1663 'outputs': ['<(PRODUCT_DIR)/generated_183.h'],1664 'action': [1665 'touch',1666 '<(PRODUCT_DIR)/generated_183.h',1667 ],1668 },1669 {1670 'action_name': 'do_184',1671 'inputs': [],1672 'outputs': ['<(PRODUCT_DIR)/generated_184.h'],1673 'action': [1674 'touch',1675 '<(PRODUCT_DIR)/generated_184.h',1676 ],1677 },1678 {1679 'action_name': 'do_185',1680 'inputs': [],1681 'outputs': ['<(PRODUCT_DIR)/generated_185.h'],1682 'action': [1683 'touch',1684 '<(PRODUCT_DIR)/generated_185.h',1685 ],1686 },1687 {1688 'action_name': 'do_186',1689 'inputs': [],1690 'outputs': ['<(PRODUCT_DIR)/generated_186.h'],1691 'action': [1692 'touch',1693 '<(PRODUCT_DIR)/generated_186.h',1694 ],1695 },1696 {1697 'action_name': 'do_187',1698 'inputs': [],1699 'outputs': ['<(PRODUCT_DIR)/generated_187.h'],1700 'action': [1701 'touch',1702 '<(PRODUCT_DIR)/generated_187.h',1703 ],1704 },1705 {1706 'action_name': 'do_188',1707 'inputs': [],1708 'outputs': ['<(PRODUCT_DIR)/generated_188.h'],1709 'action': [1710 'touch',1711 '<(PRODUCT_DIR)/generated_188.h',1712 ],1713 },1714 {1715 'action_name': 'do_189',1716 'inputs': [],1717 'outputs': ['<(PRODUCT_DIR)/generated_189.h'],1718 'action': [1719 'touch',1720 '<(PRODUCT_DIR)/generated_189.h',1721 ],1722 },1723 {1724 'action_name': 'do_190',1725 'inputs': [],1726 'outputs': ['<(PRODUCT_DIR)/generated_190.h'],1727 'action': [1728 'touch',1729 '<(PRODUCT_DIR)/generated_190.h',1730 ],1731 },1732 {1733 'action_name': 'do_191',1734 'inputs': [],1735 'outputs': ['<(PRODUCT_DIR)/generated_191.h'],1736 'action': [1737 'touch',1738 '<(PRODUCT_DIR)/generated_191.h',1739 ],1740 },1741 {1742 'action_name': 'do_192',1743 'inputs': [],1744 'outputs': ['<(PRODUCT_DIR)/generated_192.h'],1745 'action': [1746 'touch',1747 '<(PRODUCT_DIR)/generated_192.h',1748 ],1749 },1750 {1751 'action_name': 'do_193',1752 'inputs': [],1753 'outputs': ['<(PRODUCT_DIR)/generated_193.h'],1754 'action': [1755 'touch',1756 '<(PRODUCT_DIR)/generated_193.h',1757 ],1758 },1759 {1760 'action_name': 'do_194',1761 'inputs': [],1762 'outputs': ['<(PRODUCT_DIR)/generated_194.h'],1763 'action': [1764 'touch',1765 '<(PRODUCT_DIR)/generated_194.h',1766 ],1767 },1768 {1769 'action_name': 'do_195',1770 'inputs': [],1771 'outputs': ['<(PRODUCT_DIR)/generated_195.h'],1772 'action': [1773 'touch',1774 '<(PRODUCT_DIR)/generated_195.h',1775 ],1776 },1777 {1778 'action_name': 'do_196',1779 'inputs': [],1780 'outputs': ['<(PRODUCT_DIR)/generated_196.h'],1781 'action': [1782 'touch',1783 '<(PRODUCT_DIR)/generated_196.h',1784 ],1785 },1786 {1787 'action_name': 'do_197',1788 'inputs': [],1789 'outputs': ['<(PRODUCT_DIR)/generated_197.h'],1790 'action': [1791 'touch',1792 '<(PRODUCT_DIR)/generated_197.h',1793 ],1794 },1795 {1796 'action_name': 'do_198',1797 'inputs': [],1798 'outputs': ['<(PRODUCT_DIR)/generated_198.h'],1799 'action': [1800 'touch',1801 '<(PRODUCT_DIR)/generated_198.h',1802 ],1803 },1804 {1805 'action_name': 'do_199',1806 'inputs': [],1807 'outputs': ['<(PRODUCT_DIR)/generated_199.h'],1808 'action': [1809 'touch',1810 '<(PRODUCT_DIR)/generated_199.h',1811 ],1812 },1813 ],1814 },1815 ],...
pinch_tester.js
Source:pinch_tester.js
...93 }94 });95 function testZoomOut() {96 pincher.reset();97 var t = new touch();98 // Make sure start event doesn't change state99 var oldState = pincher.status();100 t.addTouchPoint(100, 100);101 pincher.handleTouchStart(t.events());102 assertEqual(oldState, pincher.status());103 t.addTouchPoint(300, 300);104 pincher.handleTouchStart(t.events());105 assertEqual(oldState, pincher.status());106 // Make sure extra move event doesn't change state107 pincher.handleTouchMove(t.events());108 assertEqual(oldState, pincher.status());109 t.updateTouchPoint(0, 150, 150);110 t.updateTouchPoint(1, 250, 250);111 pincher.handleTouchMove(t.events());112 assertTrue(pincher.status().clampedScale < 0.9);113 // Make sure end event doesn't change state114 oldState = pincher.status();115 t.releaseTouchPoint(1);116 pincher.handleTouchEnd(t.events());117 assertEqual(oldState, pincher.status());118 t.releaseTouchPoint(0);119 pincher.handleTouchEnd(t.events());120 assertEqual(oldState, pincher.status());121 }122 function testZoomIn() {123 pincher.reset();124 var t = new touch();125 var oldState = pincher.status();126 t.addTouchPoint(150, 150);127 pincher.handleTouchStart(t.events());128 assertEqual(oldState, pincher.status());129 t.addTouchPoint(250, 250);130 pincher.handleTouchStart(t.events());131 assertEqual(oldState, pincher.status());132 t.updateTouchPoint(0, 100, 100);133 t.updateTouchPoint(1, 300, 300);134 pincher.handleTouchMove(t.events());135 assertTrue(pincher.status().clampedScale > 1.1);136 oldState = pincher.status();137 t.releaseTouchPoint(1);138 pincher.handleTouchEnd(t.events());139 assertEqual(oldState, pincher.status());140 t.releaseTouchPoint(0);141 pincher.handleTouchEnd(t.events());142 assertEqual(oldState, pincher.status());143 }144 function testZoomOutAndPan() {145 pincher.reset();146 var t = new touch();147 t.addTouchPoint(100, 100);148 pincher.handleTouchStart(t.events());149 t.addTouchPoint(300, 300);150 pincher.handleTouchStart(t.events());151 t.updateTouchPoint(0, 150, 150);152 t.updateTouchPoint(1, 250, 250);153 pincher.handleTouchMove(t.events());154 t.updateTouchPoint(0, 150, 150, 10, -5);155 t.updateTouchPoint(1, 250, 250, 10, -5);156 pincher.handleTouchMove(t.events());157 t.releaseTouchPoint(1);158 pincher.handleTouchEnd(t.events());159 t.releaseTouchPoint(0);160 pincher.handleTouchEnd(t.events());161 assertClose(pincher.status().shiftX, 10);162 assertClose(pincher.status().shiftY, -5);163 assertTrue(pincher.status().clampedScale < 0.9);164 }165 function testReversible() {166 pincher.reset();167 var t = new touch();168 t.addTouchPoint(100, 100);169 pincher.handleTouchStart(t.events());170 t.addTouchPoint(300, 300);171 pincher.handleTouchStart(t.events());172 t.updateTouchPoint(0, 0, 0);173 t.updateTouchPoint(1, 400, 400);174 pincher.handleTouchMove(t.events());175 t.releaseTouchPoint(1);176 pincher.handleTouchEnd(t.events());177 t.releaseTouchPoint(0);178 pincher.handleTouchEnd(t.events());179 t.addTouchPoint(0, 0);180 pincher.handleTouchStart(t.events());181 t.addTouchPoint(400, 400);182 pincher.handleTouchStart(t.events());183 t.updateTouchPoint(0, 100, 100);184 t.updateTouchPoint(1, 300, 300);185 pincher.handleTouchMove(t.events());186 t.releaseTouchPoint(1);187 pincher.handleTouchEnd(t.events());188 t.releaseTouchPoint(0);189 pincher.handleTouchEnd(t.events());190 assertClose(pincher.status().clampedScale, 1);191 }192 function testMultitouchZoomOut() {193 pincher.reset();194 var t = new touch();195 var oldState = pincher.status();196 t.addTouchPoint(100, 100);197 pincher.handleTouchStart(t.events());198 assertEqual(oldState, pincher.status());199 t.addTouchPoint(300, 300);200 pincher.handleTouchStart(t.events());201 assertEqual(oldState, pincher.status());202 t.addTouchPoint(100, 300);203 pincher.handleTouchStart(t.events());204 assertEqual(oldState, pincher.status());205 t.addTouchPoint(300, 100);206 pincher.handleTouchStart(t.events());207 assertEqual(oldState, pincher.status());208 // Multi-touch zoom out.209 t.updateTouchPoint(0, 150, 150);210 t.updateTouchPoint(1, 250, 250);211 t.updateTouchPoint(2, 150, 250);212 t.updateTouchPoint(3, 250, 150);213 pincher.handleTouchMove(t.events());214 oldState = pincher.status();215 t.releaseTouchPoint(3);216 pincher.handleTouchEnd(t.events());217 assertEqual(oldState, pincher.status());218 t.releaseTouchPoint(2);219 pincher.handleTouchEnd(t.events());220 assertEqual(oldState, pincher.status());221 t.releaseTouchPoint(1);222 pincher.handleTouchEnd(t.events());223 assertEqual(oldState, pincher.status());224 t.releaseTouchPoint(0);225 pincher.handleTouchEnd(t.events());226 assertEqual(oldState, pincher.status());227 assertTrue(pincher.status().clampedScale < 0.9);228 }229 function testZoomOutThenMulti() {230 pincher.reset();231 var t = new touch();232 var oldState = pincher.status();233 t.addTouchPoint(100, 100);234 pincher.handleTouchStart(t.events());235 assertEqual(oldState, pincher.status());236 t.addTouchPoint(300, 300);237 pincher.handleTouchStart(t.events());238 assertEqual(oldState, pincher.status());239 // Zoom out.240 t.updateTouchPoint(0, 150, 150);241 t.updateTouchPoint(1, 250, 250);242 pincher.handleTouchMove(t.events());243 assertTrue(pincher.status().clampedScale < 0.9);244 // Make sure adding and removing more point doesn't change state245 oldState = pincher.status();246 t.addTouchPoint(600, 600);247 pincher.handleTouchStart(t.events());248 assertEqual(oldState, pincher.status());249 t.releaseTouchPoint(2);250 pincher.handleTouchEnd(t.events());251 assertEqual(oldState, pincher.status());252 // More than two fingers.253 t.addTouchPoint(150, 250);254 pincher.handleTouchStart(t.events());255 t.addTouchPoint(250, 150);256 pincher.handleTouchStart(t.events());257 assertEqual(oldState, pincher.status());258 t.updateTouchPoint(0, 100, 100);259 t.updateTouchPoint(1, 300, 300);260 t.updateTouchPoint(2, 100, 300);261 t.updateTouchPoint(3, 300, 100);262 pincher.handleTouchMove(t.events());263 assertClose(pincher.status().scale, 1);264 oldState = pincher.status();265 t.releaseTouchPoint(3);266 t.releaseTouchPoint(2);267 t.releaseTouchPoint(1);268 t.releaseTouchPoint(0);269 pincher.handleTouchEnd(t.events());270 assertEqual(oldState, pincher.status());271 }272 function testCancel() {273 pincher.reset();274 var t = new touch();275 t.addTouchPoint(100, 100);276 pincher.handleTouchStart(t.events());277 t.addTouchPoint(300, 300);278 pincher.handleTouchStart(t.events());279 t.updateTouchPoint(0, 150, 150);280 t.updateTouchPoint(1, 250, 250);281 pincher.handleTouchMove(t.events());282 assertTrue(pincher.status().clampedScale < 0.9);283 var oldState = pincher.status();284 t.releaseTouchPoint(1);285 t.releaseTouchPoint(0);286 pincher.handleTouchCancel(t.events());287 assertEqual(oldState, pincher.status());288 t.addTouchPoint(150, 150);289 pincher.handleTouchStart(t.events());290 t.addTouchPoint(250, 250);291 pincher.handleTouchStart(t.events());292 t.updateTouchPoint(0, 100, 100);293 t.updateTouchPoint(1, 300, 300);294 pincher.handleTouchMove(t.events());295 assertClose(pincher.status().clampedScale, 1);296 }297 function testSingularity() {298 pincher.reset();299 var t = new touch();300 t.addTouchPoint(100, 100);301 pincher.handleTouchStart(t.events());302 t.addTouchPoint(100, 100);303 pincher.handleTouchStart(t.events());304 t.updateTouchPoint(0, 150, 150);305 t.updateTouchPoint(1, 50, 50);306 pincher.handleTouchMove(t.events());307 assertTrue(pincher.status().clampedScale > 1.1);308 assertTrue(pincher.status().clampedScale < 100);309 assertTrue(pincher.status().scale < 100);310 pincher.handleTouchCancel();311 }312 function testMinSpan() {313 pincher.reset();314 var t = new touch();315 t.addTouchPoint(50, 50);316 pincher.handleTouchStart(t.events());317 t.addTouchPoint(150, 150);318 pincher.handleTouchStart(t.events());319 t.updateTouchPoint(0, 100, 100);320 t.updateTouchPoint(1, 100, 100);321 pincher.handleTouchMove(t.events());322 assertTrue(pincher.status().clampedScale < 0.9);323 assertTrue(pincher.status().clampedScale > 0);324 assertTrue(pincher.status().scale > 0);325 pincher.handleTouchCancel();326 }327 function testFontScaling() {328 pincher.reset();329 useFontScaling(1.5);330 assertClose(pincher.status().clampedScale, 1.5);331 var t = new touch();332 // Start touch.333 var oldState = pincher.status();334 t.addTouchPoint(100, 100);335 pincher.handleTouchStart(t.events());336 t.addTouchPoint(300, 300);337 pincher.handleTouchStart(t.events());338 // Pinch to zoom out.339 t.updateTouchPoint(0, 150, 150);340 t.updateTouchPoint(1, 250, 250);341 pincher.handleTouchMove(t.events());342 // Verify scale is smaller.343 assertTrue(pincher.status().clampedScale < 0.9 * oldState.clampedScale);344 pincher.handleTouchCancel();345 useFontScaling(0.8);346 assertClose(pincher.status().clampedScale, 0.8);347 // Start touch.348 t = new touch();349 oldState = pincher.status();350 t.addTouchPoint(150, 150);351 pincher.handleTouchStart(t.events());352 t.addTouchPoint(250, 250);353 pincher.handleTouchStart(t.events());354 // Pinch to zoom in.355 t.updateTouchPoint(0, 100, 100);356 t.updateTouchPoint(1, 300, 300);357 pincher.handleTouchMove(t.events());358 // Verify scale is larger.359 assertTrue(pincher.status().clampedScale > 1.1 * oldState.clampedScale);360 pincher.handleTouchCancel();361 }362 return {...
touch-emulator.js
Source:touch-emulator.js
1(function(window, document, exportName, undefined) {2 "use strict";3 var isMultiTouch = false;4 var multiTouchStartPos;5 var eventTarget;6 var touchElements = {};7 // polyfills8 if(!document.createTouch) {9 document.createTouch = function(view, target, identifier, pageX, pageY, screenX, screenY, clientX, clientY) {10 // auto set11 if(clientX == undefined || clientY == undefined) {12 clientX = pageX - window.pageXOffset;13 clientY = pageY - window.pageYOffset;14 }15 return new Touch(target, identifier, {16 pageX: pageX,17 pageY: pageY,18 screenX: screenX,19 screenY: screenY,20 clientX: clientX,21 clientY: clientY22 });23 };24 }25 if(!document.createTouchList) {26 document.createTouchList = function() {27 var touchList = new TouchList();28 for (var i = 0; i < arguments.length; i++) {29 touchList[i] = arguments[i];30 }31 touchList.length = arguments.length;32 return touchList;33 };34 }35 /**36 * create an touch point37 * @constructor38 * @param target39 * @param identifier40 * @param pos41 * @param deltaX42 * @param deltaY43 * @returns {Object} touchPoint44 */45 function Touch(target, identifier, pos, deltaX, deltaY) {46 deltaX = deltaX || 0;47 deltaY = deltaY || 0;48 this.identifier = identifier;49 this.target = target;50 this.clientX = pos.clientX + deltaX;51 this.clientY = pos.clientY + deltaY;52 this.screenX = pos.screenX + deltaX;53 this.screenY = pos.screenY + deltaY;54 this.pageX = pos.pageX + deltaX;55 this.pageY = pos.pageY + deltaY;56 }57 /**58 * create empty touchlist with the methods59 * @constructor60 * @returns touchList61 */62 function TouchList() {63 var touchList = [];64 touchList.item = function(index) {65 return this[index] || null;66 };67 // specified by Mozilla68 touchList.identifiedTouch = function(id) {69 return this[id + 1] || null;70 };71 return touchList;72 }73 /**74 * Simple trick to fake touch event support75 * this is enough for most libraries like Modernizr and Hammer76 */77 function fakeTouchSupport() {78 var objs = [window, document.documentElement];79 var props = ['ontouchstart', 'ontouchmove', 'ontouchcancel', 'ontouchend'];80 for(var o=0; o<objs.length; o++) {81 for(var p=0; p<props.length; p++) {82 if(objs[o] && objs[o][props[p]] == undefined) {83 objs[o][props[p]] = null;84 }85 }86 }87 }88 /**89 * we don't have to emulate on a touch device90 * @returns {boolean}91 */92 function hasTouchSupport() {93 return ("ontouchstart" in window) || // touch events94 (window.Modernizr && window.Modernizr.touch) || // modernizr95 (navigator.msMaxTouchPoints || navigator.maxTouchPoints) > 2; // pointer events96 }97 /**98 * disable mouseevents on the page99 * @param ev100 */101 function preventMouseEvents(ev) {102 // 注éå¯ç¨é»è®¤äºä»¶103 // ev.preventDefault();104 // ev.stopPropagation();105 }106 /**107 * only trigger touches when the left mousebutton has been pressed108 * @param touchType109 * @returns {Function}110 */111 function onMouse(touchType) {112 return function(ev) {113 // prevent mouse events114 preventMouseEvents(ev);115 if (ev.which !== 1) {116 return;117 }118 // The EventTarget on which the touch point started when it was first placed on the surface,119 // even if the touch point has since moved outside the interactive area of that element.120 // also, when the target doesnt exist anymore, we update it121 if (ev.type == 'mousedown' || !eventTarget || (eventTarget && !eventTarget.dispatchEvent)) {122 eventTarget = ev.target;123 }124 // shiftKey has been lost, so trigger a touchend125 if (isMultiTouch && !ev.shiftKey) {126 triggerTouch('touchend', ev);127 isMultiTouch = false;128 }129 triggerTouch(touchType, ev);130 // we're entering the multi-touch mode!131 if (!isMultiTouch && ev.shiftKey) {132 isMultiTouch = true;133 multiTouchStartPos = {134 pageX: ev.pageX,135 pageY: ev.pageY,136 clientX: ev.clientX,137 clientY: ev.clientY,138 screenX: ev.screenX,139 screenY: ev.screenY140 };141 triggerTouch('touchstart', ev);142 }143 // reset144 if (ev.type == 'mouseup') {145 multiTouchStartPos = null;146 isMultiTouch = false;147 eventTarget = null;148 }149 }150 }151 /**152 * trigger a touch event153 * @param eventName154 * @param mouseEv155 */156 function triggerTouch(eventName, mouseEv) {157 var touchEvent = document.createEvent('Event');158 touchEvent.initEvent(eventName, true, true);159 touchEvent.altKey = mouseEv.altKey;160 touchEvent.ctrlKey = mouseEv.ctrlKey;161 touchEvent.metaKey = mouseEv.metaKey;162 touchEvent.shiftKey = mouseEv.shiftKey;163 touchEvent.touches = getActiveTouches(mouseEv, eventName);164 touchEvent.targetTouches = getActiveTouches(mouseEv, eventName);165 touchEvent.changedTouches = getChangedTouches(mouseEv, eventName);166 eventTarget.dispatchEvent(touchEvent);167 }168 /**169 * create a touchList based on the mouse event170 * @param mouseEv171 * @returns {TouchList}172 */173 function createTouchList(mouseEv) {174 var touchList = new TouchList();175 if (isMultiTouch) {176 var f = TouchEmulator.multiTouchOffset;177 var deltaX = multiTouchStartPos.pageX - mouseEv.pageX;178 var deltaY = multiTouchStartPos.pageY - mouseEv.pageY;179 touchList.push(new Touch(eventTarget, 1, multiTouchStartPos, (deltaX*-1) - f, (deltaY*-1) + f));180 touchList.push(new Touch(eventTarget, 2, multiTouchStartPos, deltaX+f, deltaY-f));181 } else {182 touchList.push(new Touch(eventTarget, 1, mouseEv, 0, 0));183 }184 return touchList;185 }186 /**187 * receive all active touches188 * @param mouseEv189 * @returns {TouchList}190 */191 function getActiveTouches(mouseEv, eventName) {192 // empty list193 if (mouseEv.type == 'mouseup') {194 return new TouchList();195 }196 var touchList = createTouchList(mouseEv);197 if(isMultiTouch && mouseEv.type != 'mouseup' && eventName == 'touchend') {198 touchList.splice(1, 1);199 }200 return touchList;201 }202 /**203 * receive a filtered set of touches with only the changed pointers204 * @param mouseEv205 * @param eventName206 * @returns {TouchList}207 */208 function getChangedTouches(mouseEv, eventName) {209 var touchList = createTouchList(mouseEv);210 // we only want to return the added/removed item on multitouch211 // which is the second pointer, so remove the first pointer from the touchList212 //213 // but when the mouseEv.type is mouseup, we want to send all touches because then214 // no new input will be possible215 if(isMultiTouch && mouseEv.type != 'mouseup' &&216 (eventName == 'touchstart' || eventName == 'touchend')) {217 touchList.splice(0, 1);218 }219 return touchList;220 }221 /**222 * show the touchpoints on the screen223 */224 function showTouches(ev) {225 var touch, i, el, styles;226 // first all visible touches227 for(i = 0; i < ev.touches.length; i++) {228 touch = ev.touches[i];229 el = touchElements[touch.identifier];230 if(!el) {231 el = touchElements[touch.identifier] = document.createElement("div");232 document.body.appendChild(el);233 }234 styles = TouchEmulator.template(touch);235 for(var prop in styles) {236 el.style[prop] = styles[prop];237 }238 }239 // remove all ended touches240 if(ev.type == 'touchend' || ev.type == 'touchcancel') {241 for(i = 0; i < ev.changedTouches.length; i++) {242 touch = ev.changedTouches[i];243 el = touchElements[touch.identifier];244 if(el) {245 el.parentNode.removeChild(el);246 delete touchElements[touch.identifier];247 }248 }249 }250 }251 /**252 * TouchEmulator initializer253 */254 function TouchEmulator() {255 if (hasTouchSupport()) {256 return;257 }258 fakeTouchSupport();259 window.addEventListener("mousedown", onMouse('touchstart'), true);260 window.addEventListener("mousemove", onMouse('touchmove'), true);261 window.addEventListener("mouseup", onMouse('touchend'), true);262 window.addEventListener("mouseenter", preventMouseEvents, true);263 window.addEventListener("mouseleave", preventMouseEvents, true);264 window.addEventListener("mouseout", preventMouseEvents, true);265 window.addEventListener("mouseover", preventMouseEvents, true);266 // it uses itself!267 window.addEventListener("touchstart", showTouches, true);268 window.addEventListener("touchmove", showTouches, true);269 window.addEventListener("touchend", showTouches, true);270 window.addEventListener("touchcancel", showTouches, true);271 }272 // start distance when entering the multitouch mode273 TouchEmulator.multiTouchOffset = 75;274 /**275 * css template for the touch rendering276 * @param touch277 * @returns object278 */279 TouchEmulator.template = function(touch) {280 var size = 0;281 var transform = 'translate('+ (touch.clientX-(size/2)) +'px, '+ (touch.clientY-(size/2)) +'px)';282 return {283 position: 'fixed',284 left: 0,285 top: 0,286 background: '#fff',287 border: 'solid 1px #999',288 opacity: .6,289 borderRadius: '100%',290 height: size + 'px',291 width: size + 'px',292 padding: 0,293 margin: 0,294 display: 'block',295 overflow: 'hidden',296 pointerEvents: 'none',297 webkitUserSelect: 'none',298 mozUserSelect: 'none',299 userSelect: 'none',300 webkitTransform: transform,301 mozTransform: transform,302 transform: transform,303 zIndex: 100304 }305 };306 // export307 if (typeof define == "function" && define.amd) {308 define(function() {309 return TouchEmulator;310 });311 } else if (typeof module != "undefined" && module.exports) {312 module.exports = TouchEmulator;313 } else {314 window[exportName] = TouchEmulator;315 }...
TouchInteractionSupport.js
Source:TouchInteractionSupport.js
1define([2 "dojo/_base/lang",3 "dojo/_base/declare",4 "dojo/_base/event",5 "dojo/_base/connect",6 "dojo/_base/window"7], function(lang,declare,event,connect,win){8 return declare("dojox.geo.charting.TouchInteractionSupport",null, {9 // summary:10 // A class to handle touch interactions on a dojox/geo/charting/Map component.11 // tags:12 // private13 _map: null,14 _centerTouchLocation: null,15 _touchMoveListener: null,16 _touchEndListener: null,17 _touchEndTapListener: null,18 _touchStartListener: null,19 _initialFingerSpacing: null,20 _initialScale: null,21 _tapCount: null,22 _tapThreshold: null,23 _lastTap: null,24 _doubleTapPerformed:false,25 _oneFingerTouch:false,26 _tapCancel:false,27 constructor: function(map){28 // summary:29 // Constructs a new _TouchInteractionSupport instance30 // map: dojox.geo.charting.Map31 // the Map widget this class provides touch navigation for.32 this._map = map;33 this._centerTouchLocation = {x: 0,y: 0};34 this._tapCount = 0;35 this._lastTap = {x: 0,y: 0};36 this._tapThreshold = 100; // square distance in pixels37 },38 connect: function(){39 // summary:40 // install touch listeners41 this._touchStartListener = this._map.surface.connect("touchstart", this, this._touchStartHandler);42 },43 disconnect: function(){44 // summary:45 // disconnects any installed listeners. Must be called only when disposing of this instance46 if(this._touchStartListener){47 connect.disconnect(this._touchStartListener);48 this._touchStartListener = null;49 }50 },51 _getTouchBarycenter: function(touchEvent){52 // summary:53 // returns the midpoint of the two first fingers (or the first finger location if only one)54 // touchEvent: TouchEvent55 // a touch event56 // returns:57 // the midpoint58 // tags:59 // private60 var touches = touchEvent.touches;61 var firstTouch = touches[0];62 var secondTouch = null;63 if(touches.length > 1){64 secondTouch = touches[1];65 }else{66 secondTouch = touches[0];67 }68 var containerBounds = this._map._getContainerBounds();69 var middleX = (firstTouch.pageX + secondTouch.pageX) / 2.0 - containerBounds.x;70 var middleY = (firstTouch.pageY + secondTouch.pageY) / 2.0 - containerBounds.y;71 return {x: middleX,y: middleY}; // dojox/gfx/Point72 },73 _getFingerSpacing: function(touchEvent){74 // summary:75 // computes the distance between the first two fingers76 // touchEvent: a touch event77 // returns:78 // a distance. -1 if less than 2 fingers79 // tags:80 // private81 var touches = touchEvent.touches;82 var spacing = -1;83 if(touches.length >= 2){84 var dx = (touches[1].pageX - touches[0].pageX);85 var dy = (touches[1].pageY - touches[0].pageY);86 spacing = Math.sqrt(dx*dx + dy*dy);87 }88 return spacing;89 },90 _isDoubleTap: function(touchEvent){91 // summary:92 // checks whether the specified touchStart event is a double tap93 // (i.e. follows closely a previous touchStart at approximately the same location)94 // touchEvent: TouchEvent95 // a touch event96 // returns:97 // true if this event is considered a double tap98 // tags:99 // private100 var isDoubleTap = false;101 var touches = touchEvent.touches;102 if((this._tapCount > 0) && touches.length == 1){103 // test distance from last tap104 var dx = (touches[0].pageX - this._lastTap.x);105 var dy = (touches[0].pageY - this._lastTap.y);106 var distance = dx*dx + dy*dy;107 if(distance < this._tapThreshold){108 isDoubleTap = true;109 }else{110 this._tapCount = 0;111 }112 }113 this._tapCount++;114 this._lastTap.x = touches[0].pageX;115 this._lastTap.y = touches[0].pageY;116 setTimeout(lang.hitch(this,function(){117 this._tapCount = 0;}),300);118 return isDoubleTap;119 },120 _doubleTapHandler: function(touchEvent){121 // summary:122 // action performed on the map when a double tap was triggered123 // touchEvent: TouchEvent124 // a touch event125 // tags:126 // private127 var feature = this._getFeatureFromTouchEvent(touchEvent);128 if(feature){129 this._map.fitToMapArea(feature._bbox, 15, true);130 }else{131 // perform a basic 2x zoom on touch132 var touches = touchEvent.touches;133 var containerBounds = this._map._getContainerBounds();134 var offX = touches[0].pageX - containerBounds.x;135 var offY = touches[0].pageY - containerBounds.y;136 // clicked map point before zooming137 var mapPoint = this._map.screenCoordsToMapCoords(offX,offY);138 // zoom increment power139 this._map.setMapCenterAndScale(mapPoint.x, mapPoint.y,this._map.getMapScale()*2,true);140 }141 },142 _getFeatureFromTouchEvent: function(touchEvent){143 // summary:144 // utility function to return the feature located at this touch event location145 // touchEvent: TouchEvent146 // a touch event147 // returns:148 // the feature found if any, null otherwise.149 // tags:150 // private151 var feature = null;152 if(touchEvent.gfxTarget && touchEvent.gfxTarget.getParent){153 feature = this._map.mapObj.features[touchEvent.gfxTarget.getParent().id];154 }155 return feature; // dojox/geo/charting/Feature156 },157 _touchStartHandler: function(touchEvent){158 // summary:159 // action performed on the map when a touch start was triggered160 // touchEvent: TouchEvent161 // a touch event162 // tags:163 // private164 event.stop(touchEvent);165 this._oneFingerTouch = (touchEvent.touches.length == 1);166 this._tapCancel = !this._oneFingerTouch;167 // test double tap168 this._doubleTapPerformed = false;169 if(this._isDoubleTap(touchEvent)){170 //console.log("double tap recognized");171 this._doubleTapHandler(touchEvent);172 this._doubleTapPerformed = true;173 return;174 }175 // compute map midpoint between fingers176 var middlePoint = this._getTouchBarycenter(touchEvent);177 var mapPoint = this._map.screenCoordsToMapCoords(middlePoint.x,middlePoint.y);178 this._centerTouchLocation.x = mapPoint.x;179 this._centerTouchLocation.y = mapPoint.y;180 // store initial finger spacing to compute zoom later181 this._initialFingerSpacing = this._getFingerSpacing(touchEvent);182 // store initial map scale183 this._initialScale = this._map.getMapScale();184 // install touch move and up listeners (if not done by other fingers before)185 if(!this._touchMoveListener){186 this._touchMoveListener = connect.connect(win.global,"touchmove",this,this._touchMoveHandler);187 }188 if(!this._touchEndTapListener){189 this._touchEndTapListener = this._map.surface.connect("touchend", this, this._touchEndTapHandler);190 }191 if(!this._touchEndListener){192 this._touchEndListener = connect.connect(win.global,"touchend",this, this._touchEndHandler);193 }194 },195 _touchEndTapHandler: function(touchEvent){196 // summary:197 // action performed on the map when a tap was triggered198 // touchEvent: TouchEvent199 // a touch event200 // tags:201 // private202 var touches = touchEvent.touches;203 if(touches.length == 0){204 // test potential tap ?205 if(this._oneFingerTouch && !this._tapCancel){206 this._oneFingerTouch = false;207 setTimeout(lang.hitch(this,function(){208 // wait to check if double tap209 // perform test for single tap210 //console.log("double tap was performed ? " + this._doubleTapPerformed);211 if(!this._doubleTapPerformed){212 // test distance from last tap213 var dx = (touchEvent.changedTouches[0].pageX - this._lastTap.x);214 var dy = (touchEvent.changedTouches[0].pageY - this._lastTap.y);215 var distance = dx*dx + dy*dy;216 if(distance < this._tapThreshold){217 // single tap ok218 this._singleTapHandler(touchEvent);219 }220 }221 }), 350);222 }223 this._tapCancel = false;224 }225 },226 _touchEndHandler: function(touchEvent){227 // summary:228 // action performed on the map when a touch end was triggered229 // touchEvent: TouchEvent230 // a touch event231 // tags:232 // private233 event.stop(touchEvent);234 var touches = touchEvent.touches;235 if(touches.length == 0){236 // disconnect listeners only when all fingers are up237 if(this._touchMoveListener){238 connect.disconnect(this._touchMoveListener);239 this._touchMoveListener = null;240 }241 if(this._touchEndListener){242 connect.disconnect(this._touchEndListener);243 this._touchEndListener = null;244 }245 }else{246 // recompute touch center247 var middlePoint = this._getTouchBarycenter(touchEvent);248 var mapPoint = this._map.screenCoordsToMapCoords(middlePoint.x,middlePoint.y);249 this._centerTouchLocation.x = mapPoint.x;250 this._centerTouchLocation.y = mapPoint.y;251 }252 },253 _singleTapHandler: function(touchEvent){254 // summary:255 // action performed on the map when a single tap was triggered256 // touchEvent: TouchEvent257 // a touch event258 // tags:259 // private260 var feature = this._getFeatureFromTouchEvent(touchEvent);261 if(feature){262 // call feature handler263 feature._onclickHandler(touchEvent);264 }else{265 // unselect all266 for(var name in this._map.mapObj.features){267 this._map.mapObj.features[name].select(false);268 }269 this._map.onFeatureClick(null);270 }271 },272 _touchMoveHandler: function(touchEvent){273 // summary:274 // action performed on the map when a touch move was triggered275 // touchEvent: TouchEvent276 // a touch event277 // tags:278 // private279 // prevent browser interaction280 event.stop(touchEvent);281 // cancel tap if moved too far from first touch location282 if(!this._tapCancel){283 var dx = (touchEvent.touches[0].pageX - this._lastTap.x),284 dy = (touchEvent.touches[0].pageY - this._lastTap.y);285 var distance = dx*dx + dy*dy;286 if(distance > this._tapThreshold){287 this._tapCancel = true;288 }289 }290 var middlePoint = this._getTouchBarycenter(touchEvent);291 // compute map offset292 var mapPoint = this._map.screenCoordsToMapCoords(middlePoint.x,middlePoint.y),293 mapOffsetX = mapPoint.x - this._centerTouchLocation.x,294 mapOffsetY = mapPoint.y - this._centerTouchLocation.y;295 // compute scale factor296 var scaleFactor = 1;297 var touches = touchEvent.touches;298 if(touches.length >= 2){299 var fingerSpacing = this._getFingerSpacing(touchEvent);300 scaleFactor = fingerSpacing / this._initialFingerSpacing;301 // scale map302 this._map.setMapScale(this._initialScale*scaleFactor);303 }304 // adjust map center on barycentre305 var currentMapCenter = this._map.getMapCenter();306 this._map.setMapCenter(currentMapCenter.x - mapOffsetX, currentMapCenter.y - mapOffsetY);307 }308 });...
drag.py
Source:drag.py
1"""2Drag Behavior3=============4The :class:`~kivy.uix.behaviors.drag.DragBehavior`5`mixin <https://en.wikipedia.org/wiki/Mixin>`_ class provides Drag behavior.6When combined with a widget, dragging in the rectangle defined by the7:attr:`~kivy.uix.behaviors.drag.DragBehavior.drag_rectangle` will drag the8widget.9Example10-------11The following example creates a draggable label::12 from kivy.uix.label import Label13 from kivy.app import App14 from kivy.uix.behaviors import DragBehavior15 from kivy.lang import Builder16 # You could also put the following in your kv file...17 kv = '''18 <DragLabel>:19 # Define the properties for the DragLabel20 drag_rectangle: self.x, self.y, self.width, self.height21 drag_timeout: 1000000022 drag_distance: 023 FloatLayout:24 # Define the root widget25 DragLabel:26 size_hint: 0.25, 0.227 text: 'Drag me'28 '''29 class DragLabel(DragBehavior, Label):30 pass31 class TestApp(App):32 def build(self):33 return Builder.load_string(kv)34 TestApp().run()35"""36__all__ = ('DragBehavior', )37from kivy.clock import Clock38from kivy.properties import NumericProperty, ReferenceListProperty39from kivy.config import Config40from kivy.metrics import sp41from functools import partial42# When we are generating documentation, Config doesn't exist43_scroll_timeout = _scroll_distance = 044if Config:45 _scroll_timeout = Config.getint('widgets', 'scroll_timeout')46 _scroll_distance = Config.getint('widgets', 'scroll_distance')47class DragBehavior(object):48 '''49 The DragBehavior `mixin <https://en.wikipedia.org/wiki/Mixin>`_ provides50 Drag behavior. When combined with a widget, dragging in the rectangle51 defined by :attr:`drag_rectangle` will drag the widget. Please see52 the :mod:`drag behaviors module <kivy.uix.behaviors.drag>` documentation53 for more information.54 .. versionadded:: 1.8.055 '''56 drag_distance = NumericProperty(_scroll_distance)57 '''Distance to move before dragging the :class:`DragBehavior`, in pixels.58 As soon as the distance has been traveled, the :class:`DragBehavior` will59 start to drag, and no touch event will be dispatched to the children.60 It is advisable that you base this value on the dpi of your target device's61 screen.62 :attr:`drag_distance` is a :class:`~kivy.properties.NumericProperty` and63 defaults to the `scroll_distance` as defined in the user64 :class:`~kivy.config.Config` (20 pixels by default).65 '''66 drag_timeout = NumericProperty(_scroll_timeout)67 '''Timeout allowed to trigger the :attr:`drag_distance`, in milliseconds.68 If the user has not moved :attr:`drag_distance` within the timeout,69 dragging will be disabled, and the touch event will be dispatched to the70 children.71 :attr:`drag_timeout` is a :class:`~kivy.properties.NumericProperty` and72 defaults to the `scroll_timeout` as defined in the user73 :class:`~kivy.config.Config` (55 milliseconds by default).74 '''75 drag_rect_x = NumericProperty(0)76 '''X position of the axis aligned bounding rectangle where dragging77 is allowed (in window coordinates).78 :attr:`drag_rect_x` is a :class:`~kivy.properties.NumericProperty` and79 defaults to 0.80 '''81 drag_rect_y = NumericProperty(0)82 '''Y position of the axis aligned bounding rectangle where dragging83 is allowed (in window coordinates).84 :attr:`drag_rect_Y` is a :class:`~kivy.properties.NumericProperty` and85 defaults to 0.86 '''87 drag_rect_width = NumericProperty(100)88 '''Width of the axis aligned bounding rectangle where dragging is allowed.89 :attr:`drag_rect_width` is a :class:`~kivy.properties.NumericProperty` and90 defaults to 100.91 '''92 drag_rect_height = NumericProperty(100)93 '''Height of the axis aligned bounding rectangle where dragging is allowed.94 :attr:`drag_rect_height` is a :class:`~kivy.properties.NumericProperty` and95 defaults to 100.96 '''97 drag_rectangle = ReferenceListProperty(drag_rect_x, drag_rect_y,98 drag_rect_width, drag_rect_height)99 '''Position and size of the axis aligned bounding rectangle where dragging100 is allowed.101 :attr:`drag_rectangle` is a :class:`~kivy.properties.ReferenceListProperty`102 of (:attr:`drag_rect_x`, :attr:`drag_rect_y`, :attr:`drag_rect_width`,103 :attr:`drag_rect_height`) properties.104 '''105 def __init__(self, **kwargs):106 self._drag_touch = None107 super(DragBehavior, self).__init__(**kwargs)108 def _get_uid(self, prefix='sv'):109 return '{0}.{1}'.format(prefix, self.uid)110 def on_touch_down(self, touch):111 xx, yy, w, h = self.drag_rectangle112 x, y = touch.pos113 if not self.collide_point(x, y):114 touch.ud[self._get_uid('svavoid')] = True115 return super(DragBehavior, self).on_touch_down(touch)116 if self._drag_touch or ('button' in touch.profile and117 touch.button.startswith('scroll')) or\118 not ((xx < x <= xx + w) and (yy < y <= yy + h)):119 return super(DragBehavior, self).on_touch_down(touch)120 # no mouse scrolling, so the user is going to drag with this touch.121 self._drag_touch = touch122 uid = self._get_uid()123 touch.grab(self)124 touch.ud[uid] = {125 'mode': 'unknown',126 'dx': 0,127 'dy': 0}128 Clock.schedule_once(self._change_touch_mode,129 self.drag_timeout / 1000.)130 return True131 def on_touch_move(self, touch):132 if self._get_uid('svavoid') in touch.ud or\133 self._drag_touch is not touch:134 return super(DragBehavior, self).on_touch_move(touch) or\135 self._get_uid() in touch.ud136 if touch.grab_current is not self:137 return True138 uid = self._get_uid()139 ud = touch.ud[uid]140 mode = ud['mode']141 if mode == 'unknown':142 ud['dx'] += abs(touch.dx)143 ud['dy'] += abs(touch.dy)144 if ud['dx'] > sp(self.drag_distance):145 mode = 'drag'146 if ud['dy'] > sp(self.drag_distance):147 mode = 'drag'148 ud['mode'] = mode149 if mode == 'drag':150 self.x += touch.dx151 self.y += touch.dy152 return True153 def on_touch_up(self, touch):154 if self._get_uid('svavoid') in touch.ud:155 return super(DragBehavior, self).on_touch_up(touch)156 if self._drag_touch and self in [x() for x in touch.grab_list]:157 touch.ungrab(self)158 self._drag_touch = None159 ud = touch.ud[self._get_uid()]160 if ud['mode'] == 'unknown':161 super(DragBehavior, self).on_touch_down(touch)162 Clock.schedule_once(partial(self._do_touch_up, touch), .1)163 else:164 if self._drag_touch is not touch:165 super(DragBehavior, self).on_touch_up(touch)166 return self._get_uid() in touch.ud167 def _do_touch_up(self, touch, *largs):168 super(DragBehavior, self).on_touch_up(touch)169 # don't forget about grab event!170 for x in touch.grab_list[:]:171 touch.grab_list.remove(x)172 x = x()173 if not x:174 continue175 touch.grab_current = x176 super(DragBehavior, self).on_touch_up(touch)177 touch.grab_current = None178 def _change_touch_mode(self, *largs):179 if not self._drag_touch:180 return181 uid = self._get_uid()182 touch = self._drag_touch183 ud = touch.ud[uid]184 if ud['mode'] != 'unknown':185 return186 touch.ungrab(self)187 self._drag_touch = None188 touch.push()189 touch.apply_transform_2d(self.parent.to_widget)190 super(DragBehavior, self).on_touch_down(touch)191 touch.pop()...
ResponderTouchHistoryStore.js
Source:ResponderTouchHistoryStore.js
1/**2 * Copyright (c) Facebook, Inc. and its affiliates.3 *4 * This source code is licensed under the MIT license found in the5 * LICENSE file in the root directory of this source tree.6 *7 * @flow8 */9import {isStartish, isMoveish, isEndish} from './ResponderTopLevelEventTypes';10/**11 * Tracks the position and time of each active touch by `touch.identifier`. We12 * should typically only see IDs in the range of 1-20 because IDs get recycled13 * when touches end and start again.14 */15type TouchRecord = {|16 touchActive: boolean,17 startPageX: number,18 startPageY: number,19 startTimeStamp: number,20 currentPageX: number,21 currentPageY: number,22 currentTimeStamp: number,23 previousPageX: number,24 previousPageY: number,25 previousTimeStamp: number,26|};27const MAX_TOUCH_BANK = 20;28const touchBank: Array<TouchRecord> = [];29const touchHistory = {30 touchBank,31 numberActiveTouches: 0,32 // If there is only one active touch, we remember its location. This prevents33 // us having to loop through all of the touches all the time in the most34 // common case.35 indexOfSingleActiveTouch: -1,36 mostRecentTimeStamp: 0,37};38type Touch = {39 identifier: ?number,40 pageX: number,41 pageY: number,42 timestamp: number,43 ...44};45type TouchEvent = {46 changedTouches: Array<Touch>,47 touches: Array<Touch>,48 ...49};50function timestampForTouch(touch: Touch): number {51 // The legacy internal implementation provides "timeStamp", which has been52 // renamed to "timestamp". Let both work for now while we iron it out53 // TODO (evv): rename timeStamp to timestamp in internal code54 return (touch: any).timeStamp || touch.timestamp;55}56/**57 * TODO: Instead of making gestures recompute filtered velocity, we could58 * include a built in velocity computation that can be reused globally.59 */60function createTouchRecord(touch: Touch): TouchRecord {61 return {62 touchActive: true,63 startPageX: touch.pageX,64 startPageY: touch.pageY,65 startTimeStamp: timestampForTouch(touch),66 currentPageX: touch.pageX,67 currentPageY: touch.pageY,68 currentTimeStamp: timestampForTouch(touch),69 previousPageX: touch.pageX,70 previousPageY: touch.pageY,71 previousTimeStamp: timestampForTouch(touch),72 };73}74function resetTouchRecord(touchRecord: TouchRecord, touch: Touch): void {75 touchRecord.touchActive = true;76 touchRecord.startPageX = touch.pageX;77 touchRecord.startPageY = touch.pageY;78 touchRecord.startTimeStamp = timestampForTouch(touch);79 touchRecord.currentPageX = touch.pageX;80 touchRecord.currentPageY = touch.pageY;81 touchRecord.currentTimeStamp = timestampForTouch(touch);82 touchRecord.previousPageX = touch.pageX;83 touchRecord.previousPageY = touch.pageY;84 touchRecord.previousTimeStamp = timestampForTouch(touch);85}86function getTouchIdentifier({identifier}: Touch): number {87 if (identifier == null) {88 throw new Error('Touch object is missing identifier.');89 }90 if (__DEV__) {91 if (identifier > MAX_TOUCH_BANK) {92 console.error(93 'Touch identifier %s is greater than maximum supported %s which causes ' +94 'performance issues backfilling array locations for all of the indices.',95 identifier,96 MAX_TOUCH_BANK,97 );98 }99 }100 return identifier;101}102function recordTouchStart(touch: Touch): void {103 const identifier = getTouchIdentifier(touch);104 const touchRecord = touchBank[identifier];105 if (touchRecord) {106 resetTouchRecord(touchRecord, touch);107 } else {108 touchBank[identifier] = createTouchRecord(touch);109 }110 touchHistory.mostRecentTimeStamp = timestampForTouch(touch);111}112function recordTouchMove(touch: Touch): void {113 const touchRecord = touchBank[getTouchIdentifier(touch)];114 if (touchRecord) {115 touchRecord.touchActive = true;116 touchRecord.previousPageX = touchRecord.currentPageX;117 touchRecord.previousPageY = touchRecord.currentPageY;118 touchRecord.previousTimeStamp = touchRecord.currentTimeStamp;119 touchRecord.currentPageX = touch.pageX;120 touchRecord.currentPageY = touch.pageY;121 touchRecord.currentTimeStamp = timestampForTouch(touch);122 touchHistory.mostRecentTimeStamp = timestampForTouch(touch);123 } else {124 if (__DEV__) {125 console.warn(126 'Cannot record touch move without a touch start.\n' +127 'Touch Move: %s\n' +128 'Touch Bank: %s',129 printTouch(touch),130 printTouchBank(),131 );132 }133 }134}135function recordTouchEnd(touch: Touch): void {136 const touchRecord = touchBank[getTouchIdentifier(touch)];137 if (touchRecord) {138 touchRecord.touchActive = false;139 touchRecord.previousPageX = touchRecord.currentPageX;140 touchRecord.previousPageY = touchRecord.currentPageY;141 touchRecord.previousTimeStamp = touchRecord.currentTimeStamp;142 touchRecord.currentPageX = touch.pageX;143 touchRecord.currentPageY = touch.pageY;144 touchRecord.currentTimeStamp = timestampForTouch(touch);145 touchHistory.mostRecentTimeStamp = timestampForTouch(touch);146 } else {147 if (__DEV__) {148 console.warn(149 'Cannot record touch end without a touch start.\n' +150 'Touch End: %s\n' +151 'Touch Bank: %s',152 printTouch(touch),153 printTouchBank(),154 );155 }156 }157}158function printTouch(touch: Touch): string {159 return JSON.stringify({160 identifier: touch.identifier,161 pageX: touch.pageX,162 pageY: touch.pageY,163 timestamp: timestampForTouch(touch),164 });165}166function printTouchBank(): string {167 let printed = JSON.stringify(touchBank.slice(0, MAX_TOUCH_BANK));168 if (touchBank.length > MAX_TOUCH_BANK) {169 printed += ' (original size: ' + touchBank.length + ')';170 }171 return printed;172}173let instrumentationCallback: ?(string, TouchEvent) => void;174const ResponderTouchHistoryStore = {175 /**176 * Registers a listener which can be used to instrument every touch event.177 */178 instrument(callback: (string, TouchEvent) => void): void {179 instrumentationCallback = callback;180 },181 recordTouchTrack(topLevelType: string, nativeEvent: TouchEvent): void {182 if (instrumentationCallback != null) {183 instrumentationCallback(topLevelType, nativeEvent);184 }185 if (isMoveish(topLevelType)) {186 nativeEvent.changedTouches.forEach(recordTouchMove);187 } else if (isStartish(topLevelType)) {188 nativeEvent.changedTouches.forEach(recordTouchStart);189 touchHistory.numberActiveTouches = nativeEvent.touches.length;190 if (touchHistory.numberActiveTouches === 1) {191 touchHistory.indexOfSingleActiveTouch =192 nativeEvent.touches[0].identifier;193 }194 } else if (isEndish(topLevelType)) {195 nativeEvent.changedTouches.forEach(recordTouchEnd);196 touchHistory.numberActiveTouches = nativeEvent.touches.length;197 if (touchHistory.numberActiveTouches === 1) {198 for (let i = 0; i < touchBank.length; i++) {199 const touchTrackToCheck = touchBank[i];200 if (touchTrackToCheck != null && touchTrackToCheck.touchActive) {201 touchHistory.indexOfSingleActiveTouch = i;202 break;203 }204 }205 if (__DEV__) {206 const activeRecord = touchBank[touchHistory.indexOfSingleActiveTouch];207 if (activeRecord == null || !activeRecord.touchActive) {208 console.error('Cannot find single active touch.');209 }210 }211 }212 }213 },214 touchHistory,215};...
manipulate_touch_sensors.py
Source:manipulate_touch_sensors.py
1import os2import numpy as np3from gym import utils, error, spaces4from gym.envs.robotics.hand import manipulate5# Ensure we get the path separator correct on windows6MANIPULATE_BLOCK_XML = os.path.join('hand', 'manipulate_block_touch_sensors.xml')7MANIPULATE_EGG_XML = os.path.join('hand', 'manipulate_egg_touch_sensors.xml')8MANIPULATE_PEN_XML = os.path.join('hand', 'manipulate_pen_touch_sensors.xml')9class ManipulateTouchSensorsEnv(manipulate.ManipulateEnv):10 def __init__(11 self, model_path, target_position, target_rotation,12 target_position_range, reward_type, initial_qpos={},13 randomize_initial_position=True, randomize_initial_rotation=True,14 distance_threshold=0.01, rotation_threshold=0.1, n_substeps=20, relative_control=False,15 ignore_z_target_rotation=False, touch_visualisation="on_touch", touch_get_obs="sensordata",16 ):17 """Initializes a new Hand manipulation environment with touch sensors.18 Args:19 touch_visualisation (string): how touch sensor sites are visualised20 - "on_touch": shows touch sensor sites only when touch values > 021 - "always": always shows touch sensor sites22 - "off" or else: does not show touch sensor sites23 touch_get_obs (string): touch sensor readings24 - "boolean": returns 1 if touch sensor reading != 0.0 else 025 - "sensordata": returns original touch sensor readings from self.sim.data.sensordata[id]26 - "log": returns log(x+1) touch sensor readings from self.sim.data.sensordata[id]27 - "off" or else: does not add touch sensor readings to the observation28 """29 self.touch_visualisation = touch_visualisation30 self.touch_get_obs = touch_get_obs31 self._touch_sensor_id_site_id = []32 self._touch_sensor_id = []33 self.touch_color = [1, 0, 0, 0.5]34 self.notouch_color = [0, 0.5, 0, 0.2]35 manipulate.ManipulateEnv.__init__(36 self, model_path, target_position, target_rotation,37 target_position_range, reward_type, initial_qpos=initial_qpos,38 randomize_initial_position=randomize_initial_position, randomize_initial_rotation=randomize_initial_rotation,39 distance_threshold=distance_threshold, rotation_threshold=rotation_threshold, n_substeps=n_substeps, relative_control=relative_control,40 ignore_z_target_rotation=ignore_z_target_rotation,41 )42 for k, v in self.sim.model._sensor_name2id.items(): # get touch sensor site names and their ids43 if 'robot0:TS_' in k:44 self._touch_sensor_id_site_id.append((v, self.sim.model._site_name2id[k.replace('robot0:TS_', 'robot0:T_')]))45 self._touch_sensor_id.append(v)46 if self.touch_visualisation == 'off': # set touch sensors rgba values47 for _, site_id in self._touch_sensor_id_site_id:48 self.sim.model.site_rgba[site_id][3] = 0.049 elif self.touch_visualisation == 'always':50 pass51 obs = self._get_obs()52 self.observation_space = spaces.Dict(dict(53 desired_goal=spaces.Box(-np.inf, np.inf, shape=obs['achieved_goal'].shape, dtype='float32'),54 achieved_goal=spaces.Box(-np.inf, np.inf, shape=obs['achieved_goal'].shape, dtype='float32'),55 observation=spaces.Box(-np.inf, np.inf, shape=obs['observation'].shape, dtype='float32'),56 ))57 def _render_callback(self):58 super(ManipulateTouchSensorsEnv, self)._render_callback()59 if self.touch_visualisation == 'on_touch':60 for touch_sensor_id, site_id in self._touch_sensor_id_site_id:61 if self.sim.data.sensordata[touch_sensor_id] != 0.0:62 self.sim.model.site_rgba[site_id] = self.touch_color63 else:64 self.sim.model.site_rgba[site_id] = self.notouch_color65 def _get_obs(self):66 robot_qpos, robot_qvel = manipulate.robot_get_obs(self.sim)67 object_qvel = self.sim.data.get_joint_qvel('object:joint')68 achieved_goal = self._get_achieved_goal().ravel() # this contains the object position + rotation69 touch_values = [] # get touch sensor readings. if there is one, set value to 170 if self.touch_get_obs == 'sensordata':71 touch_values = self.sim.data.sensordata[self._touch_sensor_id]72 elif self.touch_get_obs == 'boolean':73 touch_values = self.sim.data.sensordata[self._touch_sensor_id] > 0.074 elif self.touch_get_obs == 'log':75 touch_values = np.log(self.sim.data.sensordata[self._touch_sensor_id] + 1.0)76 observation = np.concatenate([robot_qpos, robot_qvel, object_qvel, touch_values, achieved_goal])77 return {78 'observation': observation.copy(),79 'achieved_goal': achieved_goal.copy(),80 'desired_goal': self.goal.ravel().copy(),81 }82class HandBlockTouchSensorsEnv(ManipulateTouchSensorsEnv, utils.EzPickle):83 def __init__(self, target_position='random', target_rotation='xyz', touch_get_obs='sensordata', reward_type='sparse'):84 utils.EzPickle.__init__(self, target_position, target_rotation, touch_get_obs, reward_type)85 ManipulateTouchSensorsEnv.__init__(self,86 model_path=MANIPULATE_BLOCK_XML,87 touch_get_obs=touch_get_obs,88 target_rotation=target_rotation,89 target_position=target_position,90 target_position_range=np.array([(-0.04, 0.04), (-0.06, 0.02), (0.0, 0.06)]),91 reward_type=reward_type)92class HandEggTouchSensorsEnv(ManipulateTouchSensorsEnv, utils.EzPickle):93 def __init__(self, target_position='random', target_rotation='xyz', touch_get_obs='sensordata', reward_type='sparse'):94 utils.EzPickle.__init__(self, target_position, target_rotation, touch_get_obs, reward_type)95 ManipulateTouchSensorsEnv.__init__(self,96 model_path=MANIPULATE_EGG_XML,97 touch_get_obs=touch_get_obs,98 target_rotation=target_rotation,99 target_position=target_position,100 target_position_range=np.array([(-0.04, 0.04), (-0.06, 0.02), (0.0, 0.06)]),101 reward_type=reward_type)102class HandPenTouchSensorsEnv(ManipulateTouchSensorsEnv, utils.EzPickle):103 def __init__(self, target_position='random', target_rotation='xyz', touch_get_obs='sensordata', reward_type='sparse'):104 utils.EzPickle.__init__(self, target_position, target_rotation, touch_get_obs, reward_type)105 ManipulateTouchSensorsEnv.__init__(self,106 model_path=MANIPULATE_PEN_XML,107 touch_get_obs=touch_get_obs,108 target_rotation=target_rotation,109 target_position=target_position,110 target_position_range=np.array([(-0.04, 0.04), (-0.06, 0.02), (0.0, 0.06)]),111 randomize_initial_rotation=False, reward_type=reward_type,...
ui_touch_selection.gyp
Source:ui_touch_selection.gyp
1# Copyright 2014 The Chromium Authors. All rights reserved.2# Use of this source code is governed by a BSD-style license that can be3# found in the LICENSE file.4{5 'variables': {6 'chromium_code': 1,7 },8 'targets': [9 {10 'target_name': 'ui_touch_selection',11 'type': '<(component)',12 'dependencies': [13 '../../base/base.gyp:base',14 '../../skia/skia.gyp:skia',15 '../base/ui_base.gyp:ui_base',16 '../events/events.gyp:events',17 '../events/events.gyp:gesture_detection',18 '../gfx/gfx.gyp:gfx',19 '../gfx/gfx.gyp:gfx_geometry',20 ],21 'defines': [22 'UI_TOUCH_SELECTION_IMPLEMENTATION',23 ],24 'sources': [25 'longpress_drag_selector.cc',26 'longpress_drag_selector.h',27 'selection_event_type.h',28 'touch_handle.cc',29 'touch_handle.h',30 'touch_handle_orientation.h',31 'touch_selection_controller.cc',32 'touch_selection_controller.h',33 'touch_selection_draggable.h',34 'ui_touch_selection_export.h',35 ],36 'include_dirs': [37 '../..',38 ],39 'conditions': [40 ['use_aura==1', {41 'dependencies': [42 '../aura/aura.gyp:aura',43 '../aura_extra/aura_extra.gyp:aura_extra',44 '../compositor/compositor.gyp:compositor',45 '../gfx/gfx.gyp:gfx',46 '../resources/ui_resources.gyp:ui_resources',47 ],48 'sources': [49 'touch_handle_drawable_aura.cc',50 'touch_handle_drawable_aura.h',51 'touch_selection_menu_runner.cc',52 'touch_selection_menu_runner.h',53 ],54 }],55 ],56 },57 {58 'target_name': 'ui_touch_selection_test_support',59 'type': 'static_library',60 'dependencies': [61 'ui_touch_selection',62 ],63 'sources': [64 'touch_selection_controller_test_api.cc',65 'touch_selection_controller_test_api.h',66 ],67 },68 {69 'target_name': 'ui_touch_selection_unittests',70 'type': '<(gtest_target_type)',71 'dependencies': [72 '../../base/base.gyp:base',73 '../../base/base.gyp:run_all_unittests',74 '../../base/base.gyp:test_support_base',75 '../../testing/gmock.gyp:gmock',76 '../../testing/gtest.gyp:gtest',77 '../base/ui_base.gyp:ui_base',78 '../events/events.gyp:events_test_support',79 '../gfx/gfx.gyp:gfx',80 '../gfx/gfx.gyp:gfx_test_support',81 'ui_touch_selection',82 'ui_touch_selection_test_support',83 ],84 'sources': [85 'longpress_drag_selector_unittest.cc',86 'touch_handle_unittest.cc',87 'touch_selection_controller_unittest.cc',88 ],89 'include_dirs': [90 '../..',91 ],92 'conditions': [93 ['OS == "android"', {94 'dependencies': [95 '../../testing/android/native_test.gyp:native_test_native_code',96 ],97 }],98 ]99 },100 ],101 'conditions': [102 ['OS == "android"', {103 'targets': [104 {105 'target_name': 'selection_event_type_java',106 'type': 'none',107 'variables': {108 'source_file': 'selection_event_type.h',109 },110 'includes': [ '../../build/android/java_cpp_enum.gypi' ],111 },112 {113 'target_name': 'touch_handle_orientation_java',114 'type': 'none',115 'variables': {116 'source_file': 'touch_handle_orientation.h',117 },118 'includes': [ '../../build/android/java_cpp_enum.gypi' ],119 },120 {121 'target_name': 'ui_touch_selection_unittests_apk',122 'type': 'none',123 'dependencies': [124 'ui_touch_selection_unittests',125 ],126 'variables': {127 'test_suite_name': 'ui_touch_selection_unittests',128 },129 'includes': [ '../../build/apk_test.gypi' ],130 },131 ],132 'conditions': [133 ['test_isolation_mode != "noop"', {134 'targets': [135 {136 'target_name': 'ui_touch_selection_unittests_apk_run',137 'type': 'none',138 'dependencies': [139 'ui_touch_selection_unittests_apk',140 ],141 'includes': [142 '../../build/isolate.gypi',143 ],144 'sources': [145 'ui_touch_selection_unittests_apk.isolate',146 ],147 },148 ]149 }],150 ],151 }], # OS == "android"152 ['test_isolation_mode != "noop" and OS != "android"', {153 'targets': [154 {155 'target_name': 'ui_touch_selection_unittests_run',156 'type': 'none',157 'dependencies': [158 'ui_touch_selection_unittests',159 ],160 'includes': [161 '../../build/isolate.gypi',162 ],163 'sources': [164 'ui_touch_selection_unittests.isolate',165 ],166 'conditions': [167 ['use_x11 == 1', {168 'dependencies': [169 '../../tools/xdisplaycheck/xdisplaycheck.gyp:xdisplaycheck',170 ],171 }],172 ],173 },174 ],175 }],176 ],...
Using AI Code Generation
1import { MockBuilder, MockRender, ngMocks } from 'ng-mocks';2import { AppModule } from './app.module';3import { AppComponent } from './app.component';4describe('AppComponent', () => {5 beforeEach(() => MockBuilder(AppComponent, AppModule));6 it('should create the app', () => {7 const fixture = MockRender(AppComponent);8 const app = fixture.debugElement.componentInstance;9 expect(app).toBeTruthy();10 });11 it(`should have as title 'app'`, () => {12 const fixture = MockRender(AppComponent);13 const app = fixture.debugElement.componentInstance;14 expect(app.title).toEqual('app');15 });16 it('should render title in a h1 tag', () => {17 const fixture = MockRender(AppComponent);18 fixture.detectChanges();19 const compiled = fixture.debugElement.nativeElement;20 expect(compiled.querySelector('h1').textContent).toContain(21 );22 });23 it('should render a button', () => {24 const fixture = MockRender(AppComponent);25 fixture.detectChanges();26 const compiled = fixture.debugElement.nativeElement;27 expect(compiled.querySelector('button')).toBeTruthy();28 });29 it('should render a button with the text "Click me"', () => {30 const fixture = MockRender(AppComponent);31 fixture.detectChanges();32 const compiled = fixture.debugElement.nativeElement;33 expect(compiled.querySelector('button').textContent).toContain('Click me');34 });35 it('should render a button with the text "Click me" and click it', () => {36 const fixture = MockRender(AppComponent);37 fixture.detectChanges();38 const compiled = fixture.debugElement.nativeElement;39 const button = compiled.querySelector('button');40 expect(button.textContent).toContain('Click me');41 ngMocks.touch(button);42 fixture.detectChanges();43 expect(compiled.querySelector('button').textContent).toContain(44 );45 });46});
Using AI Code Generation
1import { NgMocks } from 'ng-mocks';2import { MyComponent } from './my.component';3describe('MyComponent', () => {4 let component: MyComponent;5 beforeEach(() => {6 component = NgMocks.touch(MyComponent);7 });8 it('should create', () => {9 expect(component).toBeTruthy();10 });11});12import { Component, OnInit } from '@angular/core';13@Component({14})15export class MyComponent implements OnInit {16 constructor() { }17 ngOnInit(): void {18 }19}20.my-component {21 display: block;22}23import { async, ComponentFixture, TestBed } from '@angular/core/testing';24import { MyComponent } from './my.component';25describe('MyComponent', () => {26 let component: MyComponent;27 let fixture: ComponentFixture<MyComponent>;28 beforeEach(async(() => {29 TestBed.configureTestingModule({30 })31 .compileComponents();32 }));33 beforeEach(() => {34 fixture = TestBed.createComponent(MyComponent);35 component = fixture.componentInstance;36 fixture.detectChanges();37 });38 it('should create', () => {39 expect(component).toBeTruthy();40 });41});
Using AI Code Generation
1import { touch } from 'ng-mocks';2describe('MyComponent', () => {3 let fixture: ComponentFixture<MyComponent>;4 let component: MyComponent;5 beforeEach(async(() => {6 TestBed.configureTestingModule({7 imports: [FormsModule],8 }).compileComponents();9 }));10 beforeEach(() => {11 fixture = TestBed.createComponent(MyComponent);12 component = fixture.componentInstance;13 fixture.detectChanges();14 });15 it('should emit event', () => {16 const spy = spyOn(component.myEvent, 'emit');17 touch(fixture.debugElement.query(By.css('input')));18 expect(spy).toHaveBeenCalled();19 });20});21import { Component, EventEmitter, Output } from '@angular/core';22@Component({23 <input type="text" (blur)="onBlur()" />24})25export class MyComponent {26 @Output() myEvent = new EventEmitter();27 onBlur() {28 this.myEvent.emit();29 }30}31import { Injectable } from '@angular/core';32@Injectable({33})34export class MyService {35 getSomeData() {36 return 'some data';37 }38}39import { MyService } from './my-service.service';40describe('MyComponent', () => {41 let fixture: ComponentFixture<MyComponent>;42 let component: MyComponent;43 let myService: MyService;44 beforeEach(async(() => {45 TestBed.configureTestingModule({46 }).compileComponents();47 }));48 beforeEach(() => {49 fixture = TestBed.createComponent(MyComponent);50 component = fixture.componentInstance;51 myService = TestBed.get(MyService);52 fixture.detectChanges();53 });54 it('should get some data', () => {55 const spy = spyOn(myService, 'getSomeData').and.returnValue('mocked data');56 expect(component.getSomeData()).toEqual('mocked data');57 });58});59import { Component } from '@
Using AI Code Generation
1import { touch } from 'ng-mocks';2import { TestBed, ComponentFixture } from '@angular/core/testing';3import { Component } from '@angular/core';4import { FormsModule } from '@angular/forms';5@Component({6 <input type="text" id="input" [(ngModel)]="text" />7})8class TestComponent {9 public text: string;10}11describe('test', () => {12 let fixture: ComponentFixture<TestComponent>;13 let component: TestComponent;14 beforeEach(() => {15 TestBed.configureTestingModule({16 imports: [FormsModule],17 }).compileComponents();18 fixture = TestBed.createComponent(TestComponent);19 component = fixture.componentInstance;20 });21 it('should update value', () => {22 component.text = 'test';23 fixture.detectChanges();24 touch('#input', fixture);25 fixture.detectChanges();26 expect(fixture.nativeElement.querySelector('#input').value).toBe('test');27 });28});
Using AI Code Generation
1import { MockBuilder, MockRender, ngMocks } from 'ng-mocks';2import { AppModule } from './app.module';3import { AppComponent } from './app.component';4import { of } from 'rxjs';5import { delay } from 'rxjs/operators';6describe('AppComponent', () => {7 beforeEach(() => MockBuilder(AppComponent, AppModule));8 it('should render title', () => {9 const fixture = MockRender(AppComponent);10 const component = fixture.point.componentInstance;11 const mockService = ngMocks.findInstance(component.service);12 ngMocks.stub(mockService, 'getItems').and.returnValue(of([1, 2, 3]).pipe(delay(1)));13 ngMocks.touch(fixture.point.query('button'));14 expect(fixture).toHaveText('3');15 });16});
Using AI Code Generation
1import { MockBuilder, MockRender, MockInstance } from 'ng-mocks';2import { AppComponent } from './app.component';3import { AppModule } from './app.module';4import { MyService } from './my.service';5import { of } from 'rxjs';6describe('AppComponent', () => {7 beforeEach(() => MockBuilder(AppComponent, AppModule));8 it('should create the app', () => {9 const fixture = MockRender(AppComponent);10 const app = fixture.point.componentInstance;11 expect(app).toBeTruthy();12 });13 it('should have as title `ng-mocks`', () => {14 const fixture = MockRender(AppComponent);15 const app = fixture.point.componentInstance;16 expect(app.title).toEqual('ng-mocks');17 });18 it('should have a button', () => {19 const fixture = MockRender(AppComponent);20 const button = fixture.debugElement.nativeElement.querySelector('button');21 expect(button).toBeTruthy();22 });23 it('should call myService when button is clicked', () => {24 const fixture = MockRender(AppComponent);25 const myServiceMock = MockInstance(MyService, 'get', of('value'));26 const button = fixture.debugElement.nativeElement.querySelector('button');27 button.click();28 expect(myServiceMock.get).toHaveBeenCalled();29 });30});31import { MockBuilder, MockRender, MockInstance } from 'ng-mocks';32import { AppComponent } from './app.component';33import { AppModule } from './app.module';34import { MyService } from './my.service';35import { of } from 'rxjs';36describe('AppComponent', () => {
Using AI Code Generation
1import {touch} from 'ng-mocks';2import {findInstance} from 'ng-mocks';3import {MyComponent} from './my-component';4describe('MyComponent', () => {5 let component: MyComponent;6 let fixture: ComponentFixture<MyComponent>;7 beforeEach(async(() => {8 TestBed.configureTestingModule({9 })10 .compileComponents();11 }));12 beforeEach(() => {13 fixture = TestBed.createComponent(MyComponent);14 component = fixture.componentInstance;15 });16 it('should create', () => {17 expect(component).toBeTruthy();18 });19 it('should call touch on the control', () => {20 const spy = spyOn(component.form.get('name'), 'markAsTouched');21 touch(fixture.debugElement.query(By.css('input')));22 expect(spy).toHaveBeenCalled();23 });24 it('should find the instance of the component', () => {25 const instance = findInstance(fixture.debugElement.query(By.directive(MyComponent)));26 expect(instance).toBe(component);27 });28});29import {touch} from 'ng-mocks';30import {findInstance} from 'ng-mocks';31import {MyDirective} from './my-directive';32describe('MyDirective', () => {33 let component: MyComponent;34 let fixture: ComponentFixture<MyComponent>;35 beforeEach(async(() => {36 TestBed.configureTestingModule({37 })38 .compileComponents();39 }));40 beforeEach(() => {41 fixture = TestBed.createComponent(MyComponent);42 component = fixture.componentInstance;43 });44 it('should create', () => {45 expect(component).toBeTruthy();46 });47 it('should call touch on the control', () => {48 const spy = spyOn(component.form.get('name'), 'markAsTouched');49 touch(fixture.debugElement.query(By.css('input')));50 expect(spy).toHaveBeenCalled();51 });52 it('should find the instance of the directive',
Using AI Code Generation
1import 'ng-mocks';2describe('test', () => {3 it('should work', () => {4 const fixture = MockRender('<div></div>');5 fixture.touch();6 });7});
Using AI Code Generation
1import { touch } from 'ng-mocks';2const event = touch();3fixture.debugElement.query(By.css('button')).triggerEventHandler('click', event);4import { touch } from 'ng-mocks';5const event = touch();6fixture.debugElement.query(By.css('button')).triggerEventHandler('click', event);7import { touch } from 'ng-mocks';8const event = touch();9fixture.debugElement.query(By.css('button')).triggerEventHandler('click', event);10import { touch } from 'ng-mocks';11const event = touch();12fixture.debugElement.query(By.css('button')).triggerEventHandler('click', event);13import { touch } from 'ng-mocks';14const event = touch();15fixture.debugElement.query(By.css('button')).triggerEventHandler('click', event);16import { touch } from 'ng-mocks';17const event = touch();18fixture.debugElement.query(By.css('button')).triggerEventHandler('click', event);
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!