Поиск всех условий if в файле python и добавление оператора печати в следующей строке - PullRequest
1 голос
/ 26 июня 2019

Мне нужно отредактировать файл python таким образом, чтобы после каждого условия if мне нужно было добавить строку с надписью

if condition_check:
    if self.debug == 1: print "COVERAGE CONDITION #8.3 True (condition_check)"
    #some other code
else:
    if self.debug == 1: print "COVERAGE CONDITION #8.4 False (condition_check)"
    #some other code

Число 8.4 (обычно yx) относится к тому факту, что это, если условие находится в функции номер 8 (y) (функции являются просто последовательными числами, ничего особенного в 8), а x является x-м, если условие в функции yth.

и, конечно, строка, которая будет добавлена, должна быть добавлена ​​с правильным отступом. Condition_check - это проверяемое условие.

Например:

if (self.order_in_cb):
         self.ccu_process_crossing_buffer_order()

становится:

if (self.order_in_cb):
         if self.debug == 1: print "COVERAGE CONDITION #8.2 TRUE (self.order_in_cb)"
         self.ccu_process_crossing_buffer_order()

Как мне этого добиться?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: У меня есть около 1200 строк кода Python с примерно 180 условиями if - мне нужно проверить, выполняется ли каждое условие if во время выполнения 47 тестовых случаев. Другими словами, мне нужно сделать покрытие кода. Сложность в том, что я работаю с стимулом Кокотба для проверки RTL. В результате не существует прямого способа управлять стимулом, поэтому я не вижу простого способа использования стандартного способа cover.py для тестирования покрытия. Есть ли способ проверить покрытие, так по-другому? Я чувствую, что что-то упустил.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Если вы действительно не можете использовать покрытие.Тогда вам нужно всего лишь изменить if something: на if condition(something): по всему файлу, что должно быть довольно просто.

Вот подтверждение концепции:

import inspect
import linecache
import re

debug = True

def condition(label, cond):
    if debug:
        caller = inspect.stack()[1]
        line = linecache.getline(caller.filename, caller.lineno)
        condcode = re.search(r"if condition\(.*?,(.*)\):", line).group(1)
        print("CONDITION {}: {}".format(label, condcode))
    return cond


x = 1
y = 1
if condition(1.1, x + y == 2):
    print("it's two!")

Это печатает:

CONDITION 1.1:  x + y == 2
it's two!
0 голосов
/ 29 июня 2019

У меня около 1200 строк кода на Python и около 180 условий if - мне нужно проверить, выполняется ли условие if во время выполнения 47 тестовых случаев. Другими словами, мне нужно сделать покрытие кода. Сложность в том, что я работаю с стимулом Кокотба для проверки RTL.

Cocotb имеет встроенную поддержку покрытия ( документы )

export COVERAGE=1
# run cocotb however you currently invoke it
...