Робот-тест, получающий юникод, отличный от ключевого слова python - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть тест робота, который вызывает функцию python для рекурсивного вывода списка файлов по заданному пути.Эта функция возвращает список всех полных путей, например:

@keyword('List Files Recursively')
def list_files_rec_filtered(path, regexp_filter="^(?!\.).+$"):
    file_list = []
    filename_filter = re.compile(regexp_filter)
    for root, dirs, files in os.walk(path, topdown=True):
        for file in files:
            if filename_filter.match(file):
                file_list.append(os.path.abspath(os.path.join(root,file)))
    return file_list

При вызове этой функции из ключевого слова робота я вижу, что получаю результат, отличный от того, что был в списке в python.

${files} = file_utils.List Files Recursively  ${path}  ${FILE_TYPES}

У меня есть файл с именем ジ (U + 30B7, U + 3099) до его возвращения, но вместо этого возвращается значение ジ (U + 30B8).Я взял оба символа из лог-файла теста робота, первый - отладочное сообщение, сгенерированное с помощью Python * print(), второй - из собственного значения TRACE Return: роботов.

1 Ответ

0 голосов
/ 10 октября 2018

Я узнал, что это из-за APFS.Робот нормализует строки Unicode в NFC, но Python использует NFD, который он получает из APFS.Существует не совсем решение, только обходные пути.Apple нужно исправить, как ошибка APFS обрабатывает коллизии NFC / NFD, как показано здесь: https://eclecticlight.co/2017/04/06/apfs-is-currently-unusable-with-most-non-english-languages/ - это влияет практически на все приложения в OSX, включая Finder и Preview.

...