1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3 4""" 5Copyright (c) 2021 Huawei Device Co., Ltd. 6Licensed under the Apache License, Version 2.0 (the "License"); 7you may not use this file except in compliance with the License. 8You may obtain a copy of the License at 9 10 http://www.apache.org/licenses/LICENSE-2.0 11 12Unless required by applicable law or agreed to in writing, software 13distributed under the License is distributed on an "AS IS" BASIS, 14WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15See the License for the specific language governing permissions and 16limitations under the License. 17 18Description: Use ark to execute test 262 test suite 19""" 20 21import argparse 22import datetime 23import collections 24import json 25import os 26import shutil 27import sys 28import subprocess 29from multiprocessing import Pool 30import platform 31from utils import * 32from config import * 33 34 35def parse_args(): 36 parser = argparse.ArgumentParser() 37 parser.add_argument('--dir', metavar='DIR', 38 help='Directory to test ') 39 parser.add_argument('--file', metavar='FILE', 40 help='File to test') 41 parser.add_argument('--mode', 42 nargs='?', choices=[1, 2, 3], type=int, 43 help='selection information as: ' + 44 '1: only default \n ' + 45 '2: only strict mode \n' + 46 '3: both default and strict mode\n') 47 parser.add_argument('--es51', action='store_true', 48 help='Run test262 ES5.1 version') 49 parser.add_argument('--es2021', default=False, const='all', 50 nargs='?', choices=['all', 'only'], 51 help='Run test262 - ES2021. ' + 52 'all: Contains all use cases for es5_tests and es2015_tests and es2021_tests and intl_tests' + 53 'only: Only include use cases for ES2021') 54 parser.add_argument('--es2022', default=False, const='all', 55 nargs='?', choices=['all', 'only'], 56 help='Run test262 - ES2022. ' + 57 'all: Contains all use cases for es5_tests and es2015_tests and es2021_tests' + 58 'and es2022_tests and intl_tests' + 59 'only: Only include use cases for ES2022') 60 parser.add_argument('--es2023', default=False, const='all', 61 nargs='?', choices=['all', 'only'], 62 help='Run test262 - ES2023. ' + 63 'all: Contains all use cases for es5_tests and es2015_tests and es2021_tests' + 64 'and es2022_tests and es2023_tests and intl_tests' + 65 'only: Only include use cases for ES2023') 66 parser.add_argument('--intl', default=False, const='intl', 67 nargs='?', choices=['intl'], 68 help='Run test262 - Intltest. ' + 69 'intl: Only include use cases for intlcsae') 70 parser.add_argument('--es2015', default=False, const='es2015', 71 nargs='?', choices=['es2015'], 72 help='Run test262 - es2015. ' + 73 'es2015: Only include use cases for es2015') 74 parser.add_argument('--ci-build', action='store_true', 75 help='Run test262 ES2015 filter cases for build version') 76 parser.add_argument('--esnext', action='store_true', 77 help='Run test262 - ES.next.') 78 parser.add_argument('--engine', metavar='FILE', 79 help='Other engine binarys to run tests(as:d8,qjs...)') 80 parser.add_argument('--babel', action='store_true', 81 help='Whether to use Babel conversion') 82 parser.add_argument('--timeout', default=DEFAULT_TIMEOUT, type=int, 83 help='Set a custom test timeout in milliseconds !!!\n') 84 parser.add_argument('--threads', default=DEFAULT_THREADS, type=int, 85 help="Run this many tests in parallel.") 86 parser.add_argument('--hostArgs', 87 help="command-line arguments to pass to eshost host\n") 88 parser.add_argument('--ark-tool', 89 help="ark's binary tool") 90 parser.add_argument('--ark-aot', action='store_true', 91 help="Run test262 with aot") 92 parser.add_argument('--ark-aot-tool', 93 help="ark's aot tool") 94 parser.add_argument("--libs-dir", 95 help="The path collection of dependent so has been divided by':'") 96 parser.add_argument('--ark-frontend', 97 nargs='?', choices=ARK_FRONTEND_LIST, type=str, 98 help="Choose one of them") 99 parser.add_argument('--ark-frontend-binary', 100 help="ark frontend conversion binary tool") 101 parser.add_argument('--ark-arch', 102 default=DEFAULT_ARK_ARCH, 103 nargs='?', choices=ARK_ARCH_LIST, type=str, 104 help="Choose one of them") 105 parser.add_argument('--ark-arch-root', 106 default=DEFAULT_ARK_ARCH, 107 help="the root path for qemu-aarch64 or qemu-arm") 108 parser.add_argument('--opt-level', 109 default=DEFAULT_OPT_LEVEL, 110 help="the opt level for es2abc") 111 parser.add_argument('--es2abc-thread-count', 112 default=DEFAULT_ES2ABC_THREAD_COUNT, 113 help="the thread count for es2abc") 114 parser.add_argument('--merge-abc-binary', 115 help="frontend merge abc binary tool") 116 parser.add_argument('--merge-abc-mode', 117 help="run test for merge abc mode") 118 parser.add_argument('--product-name', 119 default=DEFAULT_PRODUCT_NAME, 120 help="ark's product name") 121 parser.add_argument('--run-pgo', action='store_true', 122 help="Run test262 with aot pgo") 123 return parser.parse_args() 124 125 126def run_check(runnable, env=None): 127 report_command('Test command:', runnable, env=env) 128 129 if env is not None: 130 full_env = dict(os.environ) 131 full_env.update(env) 132 env = full_env 133 134 proc = subprocess.Popen(runnable, env=env) 135 proc.wait() 136 return proc.returncode 137 138 139def excuting_npm_install(args): 140 ark_frontend = DEFAULT_ARK_FRONTEND 141 if args.ark_frontend: 142 ark_frontend = args.ark_frontend 143 144 if ark_frontend != ARK_FRONTEND_LIST[0]: 145 return 146 147 ark_frontend_binary = os.path.join(ARK_FRONTEND_BINARY_LIST[0]) 148 if args.ark_frontend_binary: 149 ark_frontend_binary = os.path.join(args.ark_frontend_binary) 150 151 ts2abc_build_dir = os.path.join(os.path.dirname( 152 os.path.realpath(ark_frontend_binary)), "..") 153 154 if not os.path.exists(os.path.join(ts2abc_build_dir, "package.json")) and \ 155 not os.path.exists(os.path.join(ts2abc_build_dir, "..", "package.json")): 156 return 157 158 if os.path.exists(os.path.join(ts2abc_build_dir, "..", "package.json")) and \ 159 not os.path.exists(os.path.join(ts2abc_build_dir, "package.json")): 160 ts2abc_build_dir = os.path.join(ts2abc_build_dir, "..") 161 # copy deps/ohos-typescript 162 deps_dir = os.path.join(ts2abc_build_dir, "deps") 163 mkdir(deps_dir) 164 165 shutil.copyfile(OHOS_TYPESCRIPT_TGZ_PATH, os.path.join(deps_dir, OHOS_TYPESCRIPT)) 166 167 npm_install(ts2abc_build_dir) 168 169 170def init(args): 171 remove_dir(BASE_OUT_DIR) 172 remove_dir(TEST_ES5_DIR) 173 remove_dir(TEST_ES2015_DIR) 174 remove_dir(TEST_INTL_DIR) 175 remove_dir(TEST_ES2021_DIR) 176 remove_dir(TEST_ES2022_DIR) 177 remove_dir(TEST_ES2023_DIR) 178 remove_dir(TEST_CI_DIR) 179 get_all_skip_tests(args) 180 excuting_npm_install(args) 181 182 183def get_all_skip_tests(args): 184 # !!! plz correct the condition when changing the default frontend 185 if args.ark_frontend and args.ark_frontend == ARK_FRONTEND_LIST[1]: 186 SKIP_LIST_FILES.append(ES2ABC_SKIP_LIST_FILE) 187 else: 188 SKIP_LIST_FILES.append(TS2ABC_SKIP_LIST_FILE) 189 190 for file in SKIP_LIST_FILES: 191 with open(file) as jsonfile: 192 json_data = json.load(jsonfile) 193 for key in json_data: 194 ALL_SKIP_TESTS.extend(key["files"]) 195 196 197def collect_files(path): 198 if os.path.isfile(path): 199 yield path 200 return 201 202 if not os.path.isdir(path): 203 raise ValueError(f'Not found: "{path}"') 204 205 for root, _, file_names in os.walk(path): 206 for file_name in file_names: 207 if file_name.startswith('.') or not file_name.endswith(".js"): 208 continue 209 210 yield os.path.join(root, file_name) 211 212 213def mkdstdir(file, src_dir, dist_dir): 214 idx = file.rfind(src_dir) 215 if idx == -1: 216 raise SystemExit(f'{file} can not found in {src_dir}') 217 218 fpath, fname = os.path.split(file[idx:]) 219 fpath = fpath.replace(src_dir, dist_dir) 220 mkdir(fpath) 221 222 223class TestPrepare(): 224 def __init__(self, args): 225 self.args = args 226 self.out_dir = BASE_OUT_DIR 227 228 229 def prepare_test262_code(self): 230 if not os.path.isdir(os.path.join(DATA_DIR, '.git')): 231 git_clone(TEST262_GIT_URL, DATA_DIR) 232 git_checkout(TEST262_GIT_HASH, DATA_DIR) 233 234 if not os.path.isdir(os.path.join(ESHOST_DIR, '.git')): 235 git_clone(ESHOST_GIT_URL, ESHOST_DIR) 236 git_checkout(ESHOST_GIT_HASH, ESHOST_DIR) 237 git_apply('../eshost.patch', ESHOST_DIR) 238 239 npm_install(ESHOST_DIR) 240 241 if not os.path.isdir(os.path.join(HARNESS_DIR, '.git')): 242 git_clone(HARNESS_GIT_URL, HARNESS_DIR) 243 git_checkout(HARNESS_GIT_HASH, HARNESS_DIR) 244 git_apply('../harness.patch', HARNESS_DIR) 245 246 npm_install(HARNESS_DIR) 247 248 def prepare_clean_data(self): 249 git_clean(DATA_DIR) 250 git_checkout(TEST262_GIT_HASH, DATA_DIR) 251 252 def patching_the_plugin(self): 253 remove_file(os.path.join(ESHOST_DIR, "lib/agents/panda.js")) 254 remove_file(os.path.join(ESHOST_DIR, "runtimes/panda.js")) 255 256 git_clean(ESHOST_DIR) 257 git_apply("../eshost.patch", ESHOST_DIR) 258 git_clean(HARNESS_DIR) 259 git_apply("../harness.patch", HARNESS_DIR) 260 261 def prepare_args_es51_es2021(self): 262 if self.args.dir: 263 if TEST_ES5_DIR in self.args.dir: 264 self.args.es51 = True 265 elif TEST_ES2015_DIR in self.args.dir: 266 self.args.es2015 = "es2015" 267 elif TEST_INTL_DIR in self.args.dir: 268 self.args.intl = "intl" 269 elif TEST_ES2021_DIR in self.args.dir: 270 self.args.es2021 = "all" 271 elif TEST_ES2022_DIR in self.args.dir: 272 self.args.es2022 = "all" 273 elif TEST_ES2023_DIR in self.args.dir: 274 self.args.es2023 = "all" 275 276 if self.args.file: 277 if TEST_ES5_DIR in self.args.file: 278 self.args.es51 = True 279 elif TEST_ES2015_DIR in self.args.file: 280 self.args.es2015 = "es2015" 281 elif TEST_INTL_DIR in self.args.file: 282 self.args.intl = "intl" 283 elif TEST_ES2021_DIR in self.args.file: 284 self.args.es2021 = "all" 285 elif TEST_ES2022_DIR in self.args.file: 286 self.args.es2022 = "all" 287 elif TEST_ES2023_DIR in self.args.file: 288 self.args.es2023 = "all" 289 290 def prepare_out_dir(self): 291 if self.args.es51: 292 self.out_dir = os.path.join(BASE_OUT_DIR, "test_es51") 293 elif self.args.es2015: 294 self.out_dir = os.path.join(BASE_OUT_DIR, "test_es2015") 295 elif self.args.intl: 296 self.out_dir = os.path.join(BASE_OUT_DIR, "test_intl") 297 elif self.args.es2021: 298 self.out_dir = os.path.join(BASE_OUT_DIR, "test_es2021") 299 elif self.args.es2022: 300 self.out_dir = os.path.join(BASE_OUT_DIR, "test_es2022") 301 elif self.args.es2023: 302 self.out_dir = os.path.join(BASE_OUT_DIR, "test_es2023") 303 elif self.args.ci_build: 304 self.out_dir = os.path.join(BASE_OUT_DIR, "test_CI") 305 else: 306 self.out_dir = os.path.join(BASE_OUT_DIR, "test") 307 308 def prepare_args_testdir(self): 309 if self.args.dir: 310 return 311 312 if self.args.es51: 313 self.args.dir = TEST_ES5_DIR 314 elif self.args.es2015: 315 self.args.dir = TEST_ES2015_DIR 316 elif self.args.intl: 317 self.args.dir = TEST_INTL_DIR 318 elif self.args.es2021: 319 self.args.dir = TEST_ES2021_DIR 320 elif self.args.es2022: 321 self.args.dir = TEST_ES2022_DIR 322 elif self.args.es2023: 323 self.args.dir = TEST_ES2023_DIR 324 elif self.args.ci_build: 325 self.args.dir = TEST_CI_DIR 326 else: 327 self.args.dir = os.path.join(DATA_DIR, "test") 328 329 def copyfile(self, file, all_skips): 330 dstdir = os.path.join(DATA_DIR, "test") 331 file = file.strip() 332 file = file.strip('\n') 333 file = file.replace("\\", "/") 334 if file in all_skips: 335 return 336 337 srcdir = os.path.join(DATA_DIR, "test", file) 338 if self.args.es51: 339 dstdir = os.path.join(TEST_ES5_DIR, file) 340 elif self.args.es2015: 341 dstdir = os.path.join(TEST_ES2015_DIR, file) 342 elif self.args.intl: 343 dstdir = os.path.join(TEST_INTL_DIR, file) 344 elif self.args.es2021: 345 dstdir = os.path.join(TEST_ES2021_DIR, file) 346 elif self.args.es2022: 347 dstdir = os.path.join(TEST_ES2022_DIR, file) 348 elif self.args.es2023: 349 dstdir = os.path.join(TEST_ES2023_DIR, file) 350 elif self.args.ci_build: 351 dstdir = os.path.join(TEST_CI_DIR, file) 352 353 if os.path.isfile(srcdir): 354 shutil.copyfile(srcdir, dstdir) 355 356 357 def collect_tests(self): 358 files = [] 359 origin_dir = os.path.join(DATA_DIR, "test/") 360 file_names = collect_files(origin_dir) 361 esid = "" 362 if self.args.es51: 363 esid = "es5id" 364 elif self.args.es2021 or self.args.es2022 or self.args.es2023: 365 esid = "es6id" 366 367 for file_name in file_names: 368 with open(file_name, 'r', encoding='utf-8') as file: 369 file_content = file.read() 370 if esid in file_content: 371 files.append(file_name.split(origin_dir)[1]) 372 return files 373 374 def get_tests_from_file(self, file): 375 with open(file) as fopen: 376 files = fopen.readlines() 377 return files 378 379 def prepare_es2021_tests(self): 380 files = [] 381 files = self.collect_tests() 382 files.extend(self.get_tests_from_file(ES2021_LIST_FILE)) 383 if self.args.es2021 == "all": 384 files.extend(self.get_tests_from_file(ES5_LIST_FILE)) 385 files.extend(self.get_tests_from_file(INTL_LIST_FILE)) 386 files.extend(self.get_tests_from_file(ES2015_LIST_FILE)) 387 return files 388 389 def prepare_es2022_tests(self): 390 files = [] 391 files.extend(self.get_tests_from_file(ES2022_LIST_FILE)) 392 if self.args.es2022 == "all": 393 files.extend(self.get_tests_from_file(ES5_LIST_FILE)) 394 files.extend(self.get_tests_from_file(INTL_LIST_FILE)) 395 files.extend(self.get_tests_from_file(ES2015_LIST_FILE)) 396 files.extend(self.collect_tests()) 397 files.extend(self.get_tests_from_file(ES2021_LIST_FILE)) 398 return files 399 400 def prepare_es2023_tests(self): 401 files = [] 402 files.extend(self.get_tests_from_file(ES2023_LIST_FILE)) 403 if self.args.es2023 == "all": 404 files.extend(self.get_tests_from_file(ES5_LIST_FILE)) 405 files.extend(self.get_tests_from_file(INTL_LIST_FILE)) 406 files.extend(self.get_tests_from_file(ES2015_LIST_FILE)) 407 files.extend(self.collect_tests()) 408 files.extend(self.get_tests_from_file(ES2021_LIST_FILE)) 409 files.extend(self.get_tests_from_file(ES2022_LIST_FILE)) 410 return files 411 412 def prepare_intl_tests(self): 413 files = [] 414 files = self.collect_tests() 415 if self.args.intl: 416 files = self.get_tests_from_file(INTL_LIST_FILE) 417 return files 418 419 def prepare_es2015_tests(self): 420 files = [] 421 files = self.collect_tests() 422 if self.args.es2015: 423 files = self.get_tests_from_file(ES2015_LIST_FILE) 424 return files 425 426 def prepare_test_suit(self): 427 files = [] 428 test_dir = "" 429 if self.args.es51: 430 test_dir = TEST_ES5_DIR 431 files = self.get_tests_from_file(ES5_LIST_FILE) 432 elif self.args.es2015: 433 test_dir = TEST_ES2015_DIR 434 files = self.prepare_es2015_tests() 435 elif self.args.intl: 436 test_dir = TEST_INTL_DIR 437 files = self.prepare_intl_tests() 438 elif self.args.es2021: 439 test_dir = TEST_ES2021_DIR 440 files = self.prepare_es2021_tests() 441 elif self.args.es2022: 442 test_dir = TEST_ES2022_DIR 443 files = self.prepare_es2022_tests() 444 elif self.args.es2023: 445 test_dir = TEST_ES2023_DIR 446 files = self.prepare_es2023_tests() 447 elif self.args.ci_build: 448 test_dir = TEST_CI_DIR 449 files = self.get_tests_from_file(CI_LIST_FILE) 450 451 for file in files: 452 path = os.path.split(file)[0] 453 path = os.path.join(test_dir, path) 454 mkdir(path) 455 456 self.copyfile(file, ALL_SKIP_TESTS) 457 458 def prepare_test262_test(self): 459 src_dir = TEST_FULL_DIR 460 if self.args.es51: 461 self.prepare_test_suit() 462 src_dir = TEST_ES5_DIR 463 elif self.args.es2015: 464 self.prepare_test_suit() 465 src_dir = TEST_ES2015_DIR 466 elif self.args.intl: 467 self.prepare_test_suit() 468 src_dir = TEST_INTL_DIR 469 elif self.args.es2021: 470 self.prepare_test_suit() 471 src_dir = TEST_ES2021_DIR 472 elif self.args.es2022: 473 self.prepare_test_suit() 474 src_dir = TEST_ES2022_DIR 475 elif self.args.es2023: 476 self.prepare_test_suit() 477 src_dir = TEST_ES2023_DIR 478 elif self.args.ci_build: 479 self.prepare_test_suit() 480 src_dir = TEST_CI_DIR 481 elif self.args.esnext: 482 git_checkout(ESNEXT_GIT_HASH, DATA_DIR) 483 else: 484 git_checkout(TEST262_GIT_HASH, DATA_DIR) 485 486 if self.args.file: 487 mkdstdir(self.args.file, src_dir, self.out_dir) 488 return 489 490 files = collect_files(self.args.dir) 491 for file in files: 492 mkdstdir(file, src_dir, self.out_dir) 493 494 def run(self): 495 self.prepare_test262_code() 496 self.prepare_clean_data() 497 self.patching_the_plugin() 498 self.prepare_args_es51_es2021() 499 self.prepare_out_dir() 500 self.prepare_args_testdir() 501 self.prepare_test262_test() 502 503 504def run_test262_prepare(args): 505 init(args) 506 507 test_prepare = TestPrepare(args) 508 test_prepare.run() 509 510 511def modetype_to_string(mode): 512 if mode == 1: 513 return "only default" 514 if mode == 2: 515 return "only strict mode" 516 return "both default and strict mode" 517 518 519def run_test262_mode(args): 520 if args.mode: 521 return modetype_to_string(args.mode) 522 return modetype_to_string(DEFAULT_MODE) 523 524 525def get_execute_arg(args): 526 execute_args = "" 527 528 if args.file: 529 execute_args = args.file 530 else: 531 execute_args = os.path.join(args.dir, "**", "*.js") 532 return execute_args 533 534 535def get_host_path_type(args): 536 host_path = DEFAULT_HOST_PATH 537 host_type = DEFAULT_HOST_TYPE 538 if args.engine: 539 host_path = args.engine 540 host_type = os.path.split(args.engine.strip())[1] 541 return host_path, host_type 542 543 544def get_timeout(args, threads): 545 timeout = DEFAULT_TIMEOUT * threads 546 if args.timeout: 547 timeout = args.timeout 548 return timeout 549 550 551def get_threads(args): 552 threads = DEFAULT_THREADS 553 if args.threads: 554 threads = args.threads 555 return threads 556 557 558def get_host_args(args, host_type): 559 host_args = "" 560 ark_tool = DEFAULT_ARK_TOOL 561 ark_aot_tool = DEFAULT_ARK_AOT_TOOL 562 libs_dir = DEFAULT_LIBS_DIR 563 ark_frontend = DEFAULT_ARK_FRONTEND 564 ark_frontend_binary = DEFAULT_ARK_FRONTEND_BINARY 565 ark_arch = DEFAULT_ARK_ARCH 566 opt_level = DEFAULT_OPT_LEVEL 567 es2abc_thread_count = DEFAULT_ES2ABC_THREAD_COUNT 568 merge_abc_binary = DEFAULT_MERGE_ABC_BINARY 569 merge_abc_mode = DEFAULT_MERGE_ABC_MODE 570 product_name = DEFAULT_PRODUCT_NAME 571 572 if args.product_name: 573 product_name = args.product_name 574 ark_dir = f"{ARGS_PREFIX}{product_name}/{ARK_DIR_SUFFIX}" 575 icui_dir = f"{ARGS_PREFIX}{product_name}/{ICUI_DIR_SUFFIX}" 576 ark_js_runtime_dir = f"{ARGS_PREFIX}{product_name}/{ARK_JS_RUNTIME_DIR_SUFFIX}" 577 zlib_dir = f"{ARGS_PREFIX}{product_name}/{ZLIB_DIR_SUFFIX}" 578 579 ark_tool = os.path.join(ark_js_runtime_dir, "ark_js_vm") 580 libs_dir = f"{icui_dir}:{LLVM_DIR}:{ark_js_runtime_dir}:{zlib_dir}" 581 ark_aot_tool = os.path.join(ark_js_runtime_dir, "ark_aot_compiler") 582 merge_abc_binary = os.path.join(ark_dir, "merge_abc") 583 584 if args.hostArgs: 585 host_args = args.hostArgs 586 587 if args.ark_tool: 588 ark_tool = args.ark_tool 589 590 if args.ark_aot_tool: 591 ark_aot_tool = args.ark_aot_tool 592 593 if args.libs_dir: 594 libs_dir = args.libs_dir 595 596 if args.ark_frontend: 597 ark_frontend = args.ark_frontend 598 599 if args.ark_frontend_binary: 600 ark_frontend_binary = args.ark_frontend_binary 601 602 if args.opt_level: 603 opt_level = args.opt_level 604 605 if args.es2abc_thread_count: 606 es2abc_thread_count = args.es2abc_thread_count 607 608 if args.merge_abc_binary: 609 merge_abc_binary = args.merge_abc_binary 610 611 if args.merge_abc_mode: 612 merge_abc_mode = args.merge_abc_mode 613 if host_type == DEFAULT_HOST_TYPE: 614 host_args = f"-B test262/run_sunspider.py " 615 host_args += f"--ark-tool={ark_tool} " 616 if args.ark_aot: 617 host_args += f"--ark-aot " 618 if args.run_pgo: 619 host_args += f"--run-pgo " 620 host_args += f"--ark-aot-tool={ark_aot_tool} " 621 host_args += f"--libs-dir={libs_dir} " 622 host_args += f"--ark-frontend={ark_frontend} " 623 host_args += f"--ark-frontend-binary={ark_frontend_binary} " 624 host_args += f"--opt-level={opt_level} " 625 host_args += f"--es2abc-thread-count={es2abc_thread_count} " 626 host_args += f"--merge-abc-binary={merge_abc_binary} " 627 host_args += f"--merge-abc-mode={merge_abc_mode} " 628 host_args += f"--product-name={product_name} " 629 630 if args.ark_arch != ark_arch: 631 host_args += f"--ark-arch={args.ark_arch} " 632 host_args += f"--ark-arch-root={args.ark_arch_root} " 633 634 return host_args 635 636 637def run_test262_test(args): 638 execute_args = get_execute_arg(args) 639 host_path, host_type = get_host_path_type(args) 640 host_args = get_host_args(args, host_type) 641 threads = get_threads(args) 642 timeout = get_timeout(args, threads) 643 644 test_cmd = ["node", TEST262_RUNNER_SCRIPT] 645 test_cmd.append(f"--hostType={host_type}") 646 test_cmd.append(f"--hostPath={host_path}") 647 if host_args != "": 648 test_cmd.append(f"--hostArgs='{host_args}'") 649 test_cmd.append(f"--threads={threads}") 650 test_cmd.append(f"--mode={run_test262_mode(args)}") 651 test_cmd.append(f"--timeout={timeout}") 652 if platform.system() == "Windows" : 653 global BASE_OUT_DIR 654 global DATA_DIR 655 BASE_OUT_DIR = BASE_OUT_DIR.replace("/","\\") 656 DATA_DIR = DATA_DIR.replace("/","\\") 657 execute_args = execute_args.replace("/","\\") 658 test_cmd.append(f"--tempDir={BASE_OUT_DIR}") 659 test_cmd.append(f"--test262Dir={DATA_DIR}") 660 661 if args.babel: 662 test_cmd.append("--preprocessor='test262/babel-preprocessor.js'") 663 test_cmd.append(DEFAULT_OTHER_ARGS) 664 test_cmd.append(execute_args) 665 666 run_check(test_cmd) 667 668 669Check = collections.namedtuple('Check', ['enabled', 'runner', 'arg']) 670 671 672def main(args): 673 print("\nWait a moment..........\n") 674 starttime = datetime.datetime.now() 675 run_test262_prepare(args) 676 check = Check(True, run_test262_test, args) 677 ret = check.runner(check.arg) 678 if ret: 679 sys.exit(ret) 680 endtime = datetime.datetime.now() 681 print(f"used time is: {str(endtime - starttime)}") 682 683 684if __name__ == "__main__": 685 sys.exit(main(parse_args())) 686