19762338dSopenharmony_ci#!/usr/bin/env python
29762338dSopenharmony_ci# -*- coding: utf-8 -*-
39762338dSopenharmony_ci"""
49762338dSopenharmony_ciCopyright (c) 2020-2021 Huawei Device Co., Ltd.
59762338dSopenharmony_ciLicensed under the Apache License, Version 2.0 (the "License");
69762338dSopenharmony_ciyou may not use this file except in compliance with the License.
79762338dSopenharmony_ciYou may obtain a copy of the License at
89762338dSopenharmony_ci
99762338dSopenharmony_ci  http://www.apache.org/licenses/LICENSE-2.0
109762338dSopenharmony_ci
119762338dSopenharmony_ciUnless required by applicable law or agreed to in writing, software
129762338dSopenharmony_cidistributed under the License is distributed on an "AS IS" BASIS,
139762338dSopenharmony_ciWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
149762338dSopenharmony_ciSee the License for the specific language governing permissions and
159762338dSopenharmony_cilimitations under the License.
169762338dSopenharmony_ci"""
179762338dSopenharmony_ci
189762338dSopenharmony_ciimport os
199762338dSopenharmony_ciimport sys
209762338dSopenharmony_ciimport subprocess
219762338dSopenharmony_ciimport hashlib
229762338dSopenharmony_ciimport json5
239762338dSopenharmony_ci
249762338dSopenharmony_ci
259762338dSopenharmony_cidef get_file_md5(file_path):
269762338dSopenharmony_ci    hash_md5 = hashlib.md5()
279762338dSopenharmony_ci    with open(file_path, "rb") as f:
289762338dSopenharmony_ci        for chunk in iter(lambda: f.read(4096), b""):
299762338dSopenharmony_ci            hash_md5.update(chunk)
309762338dSopenharmony_ci    return hash_md5.hexdigest()
319762338dSopenharmony_ci
329762338dSopenharmony_ci
339762338dSopenharmony_cidef get_hvigor_version(json_file):
349762338dSopenharmony_ci    with open(json_file, 'r') as f:
359762338dSopenharmony_ci        data = json5.load(f)
369762338dSopenharmony_ci        return data.get('hvigorVersion')
379762338dSopenharmony_ci    return "0.0.0"
389762338dSopenharmony_ci
399762338dSopenharmony_ci
409762338dSopenharmony_cidef output_unmatched_project(prject_list, filename):
419762338dSopenharmony_ci    print("")
429762338dSopenharmony_ci    print(
439762338dSopenharmony_ci        "Error: The {} in the following directory does not meet the requirements:"
449762338dSopenharmony_ci        .format(filename))
459762338dSopenharmony_ci    for prj in prject_list:
469762338dSopenharmony_ci        print(prj[0], prj[1])
479762338dSopenharmony_ci    print("")
489762338dSopenharmony_ci
499762338dSopenharmony_ci
509762338dSopenharmony_cidef check_hvigor_wrapper_js(hvigor_prj_list):
519762338dSopenharmony_ci    unmatch_info = []
529762338dSopenharmony_ci    baseline_md5 = "558a3eec8ee9e753b63f99abe79c0ec3"
539762338dSopenharmony_ci    for dir in hvigor_prj_list:
549762338dSopenharmony_ci        filename = os.path.join(dir, 'hvigor', 'hvigor-wrapper.js')
559762338dSopenharmony_ci        md5 = get_file_md5(filename)
569762338dSopenharmony_ci        if md5 != baseline_md5:
579762338dSopenharmony_ci            unmatch_info.append((md5, filename))
589762338dSopenharmony_ci
599762338dSopenharmony_ci    if len(unmatch_info):
609762338dSopenharmony_ci        output_unmatched_project(unmatch_info, 'hvigor-wrapper.js')
619762338dSopenharmony_ci        print('Please copy from {}'.format('test/xts/acts/arkcompiler/ecmanewfeatures/hvigor/hvigor-wrapper.js'))
629762338dSopenharmony_ci        return False
639762338dSopenharmony_ci    return True
649762338dSopenharmony_ci
659762338dSopenharmony_ci
669762338dSopenharmony_cidef check_hvigor_version(hvigor_prj_list):
679762338dSopenharmony_ci    unmatch_prj_list = []
689762338dSopenharmony_ci    baseline_version = '4.0.2'
699762338dSopenharmony_ci    for dir in hvigor_prj_list:
709762338dSopenharmony_ci        filename = os.path.join(dir, 'hvigor', 'hvigor-config.json5')
719762338dSopenharmony_ci        version = get_hvigor_version(filename)
729762338dSopenharmony_ci        if version != baseline_version:
739762338dSopenharmony_ci            unmatch_prj_list.append((version, filename))
749762338dSopenharmony_ci
759762338dSopenharmony_ci    if len(unmatch_prj_list):
769762338dSopenharmony_ci        output_unmatched_project(unmatch_prj_list, 'hvigor-config.json5')
779762338dSopenharmony_ci        print("Plesse use {}".format(baseline_version))
789762338dSopenharmony_ci        return False
799762338dSopenharmony_ci    return True
809762338dSopenharmony_ci
819762338dSopenharmony_ci
829762338dSopenharmony_cidef get_hvigor_prject_list(directory):
839762338dSopenharmony_ci    hvigor_prj_list = []
849762338dSopenharmony_ci    for root, dirs, files in os.walk(directory):
859762338dSopenharmony_ci        for dir in dirs:
869762338dSopenharmony_ci            if dir == 'hvigor':
879762338dSopenharmony_ci                hvigor_prj_list.append(root)
889762338dSopenharmony_ci    return hvigor_prj_list
899762338dSopenharmony_ci
909762338dSopenharmony_ci
919762338dSopenharmony_ciif __name__ == "__main__":
929762338dSopenharmony_ci    this_file = os.path.realpath(__file__)
939762338dSopenharmony_ci    curr_dir = os.path.dirname(this_file)
949762338dSopenharmony_ci    hvigor_prj_list = get_hvigor_prject_list(curr_dir)
959762338dSopenharmony_ci
969762338dSopenharmony_ci    js_valid = check_hvigor_wrapper_js(hvigor_prj_list)
979762338dSopenharmony_ci    json_valid = check_hvigor_version(hvigor_prj_list)
989762338dSopenharmony_ci
999762338dSopenharmony_ci    if not js_valid or not json_valid:
1009762338dSopenharmony_ci        sys.exit(1)
1019762338dSopenharmony_ci
1029762338dSopenharmony_ci    sys.exit(0)