#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
 Copyright (c) [2023] Huawei Technologies Co.,Ltd.ALL rights reserved.
 This program is licensed under Mulan PSL v2.
 You can use it according to the terms and conditions of the Mulan PSL v2.
          http://license.coscl.org.cn/MulanPSL2
 THIS PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 See the Mulan PSL v2 for more details.

 @Author  : saarloos
 @email   : 9090-90-90-9090@163.com
 @Date    : 2023-02-06 14:09:36
 @License : Mulan PSL v2
 @Version : 1.0
 @Desc    : 检查mugen测试套，测试名称是否重复(不区分大小写)
"""

import os
import sys
import json

suitecase_path = "suite2cases"
curr_path = os.getcwd()

def check_testsuite():
    suitecase_list = os.listdir(os.path.join(curr_path, suitecase_path))
    suitecase_set = {}
    repeat_list = []
    for one_suite in suitecase_list:
        lower_name = one_suite.lower()
        if lower_name not in suitecase_set:
            suitecase_set[lower_name] = 1
        else:
            repeat_list.append(one_suite)
            print("%s/%s had repeat from other suitecase name ignore case"%(curr_path, one_suite))
    return len(repeat_list)

def find_case(case_name, check_path):
    find_path = []
    if not os.path.exists(check_path):
        return [-1]

    all_files = os.listdir(check_path)
    for one_file in all_files:
        file_name = os.path.splitext(one_file)[0]
        if os.path.isdir(os.path.join(check_path, one_file)):
            find_path.extend(find_case(case_name, os.path.join(check_path, one_file)))
        else:
            if case_name.lower() == file_name.lower():
                find_path.append(os.path.join(check_path, one_file))
    
    return find_path

def check_one_suite(cases_names, case_path, suitename):
    repeat_case = []
    for one_case in cases_names:
        get_path = find_case(one_case["name"], case_path)
        if len(get_path) > 1:
            repeat_case.append(one_case)
            print("testsuite %s path has repeat case:"%suitename)
            for one_path in get_path:
                print("\trepeat patch name:%s"%one_path)
    return repeat_case

def check_testcase():
    suitecase_list = os.listdir(os.path.join(curr_path, suitecase_path))
    ret = 0
    for one_suite in suitecase_list:
        if not os.path.isfile(os.path.join(curr_path, suitecase_path, one_suite)):
            # 处理路径是目录的情况
            continue
        with open(os.path.join(curr_path, suitecase_path, one_suite), "r") as f:
            case_info = json.load(f)
            case_path = os.path.join(curr_path, "/".join(case_info["path"].split("/")[1:]))
            cases_names = case_info["cases"]
            if len(check_one_suite(cases_names, case_path, one_suite)) > 0:
                ret = 1
    return ret          

def main():
    suite_ret = check_testsuite()
    case_ret = check_testcase()

    return suite_ret + case_ret
    

if __name__ == "__main__":
    main()
