О тестах tcl-как интерпретировать tcltest:: test

Я смотрю на тесты в TCL source tree и вижу этот в compExpr-old.тест:

test compExpr-old-14.17 {CompilePrimaryExpr: string primary that looks like var ref} {
    expr $
} $

Мне это кажется неправильным: тест запускает сценарий expr $и ожидает, что возвращаемое значение «$». Верна ли моя интерпретация?

Оно не может быть правильным, потому expr $что синтаксически неверно.

Я проверил tcltest.tcl, определение tcltest::testтак долго, желание кто-то может помочь мне здесь.

Метки

1 ответ

  1. Я не знаю, какую версию набора тестов вы смотрите (вероятно, какой-то вариант 8.4?), но когда я смотрю на весь этот тест в транке Tcl, я вижу это:

    test compExpr-old-14.17 {CompilePrimaryExpr: string primary that looks like var ref} -body {
        expr $
    } -returnCodes error -match glob -result *
    

    В этом случае он проверяет, что результат является ошибкой, и что значение результата (т. е. содержание сообщения об ошибке) Globe совпадает с *, т. е. является чем-либо (фактически игнорируя его). То есть, тест проверяет, что ошибка получена от expr $и в противном случае не заботится.

    Тест, который вы опубликовали (для которого используется более старый синтаксисtcltest), не будет проходить на современных версиях Tcl. Но в 8.4 это прошло; это была область, где семантика Tcl изменилась между 8.4 и 8.5:

    dkf$ tclsh8.4
    % expr $
    $
    % exit
    
    dkf$ tclsh8.5
    % expr $
    invalid character "$"
    in expression "$"
    % exit
    

    Краткое руководство по тестовым случаям Tcltest: -bodyописывает суспензию для запуска, -returnCodeможет использоваться для выбора ожидаемых нормальных результатов или ошибок, -resultможет использоваться, чтобы сказать, какую строку ожидать в результате сценария тела, и -matchможет использоваться, чтобы выбрать альтернативную схему сопоставления, чем по умолчанию (точное равенство строк). Существует также -constraintsдля указания предварительных условий для теста, -setupдля выполнения кода установки и -cleanup для кода очистки. Два ведущих обязательных аргумента-это имя теста (которое должно быть уникальным в пределах набора тестов для вашего собственного здравомыслия) и краткое описание теста, используемое в отчете о сбоях.

    В старый синтаксис (используется в большинстве ТСЛ тестов, потому что обновление это кучу скучной работы), вы вместо этого те же два обязательных аргумента, то дополнительный список ограничений (как в -constraints), а затем обязательный тела (а -body), затем обязательная строка в матче за равенство (а -result). Менее гибкий, но не слишком сложный для понимания.