*** Settings *** Documentation Integration tests for ACMS BudgetEnforcer max_file_size and max_total_size constraints Resource ${CURDIR}/common.resource *** Variables *** ${HELPER_SCRIPT} robot/helper_acms_budget_enforcement.py *** Test Cases *** Budget Enforcer Includes File Within Max File Size [Documentation] BudgetEnforcer includes a file within max_file_size limit ${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} file-within-limit cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} file-within-limit-ok Budget Enforcer Excludes File Exceeding Max File Size [Documentation] BudgetEnforcer excludes a file that exceeds max_file_size ${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} file-exceeds-limit cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} file-exceeds-limit-ok Budget Enforcer Enforces Max Total Size [Documentation] BudgetEnforcer cuts off files when max_total_size is reached ${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} total-size-cutoff cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} total-size-cutoff-ok Budget Enforcer Violation Message Is Clear [Documentation] BudgetViolation message clearly describes the constraint exceeded ${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} violation-message cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} violation-message-ok Budget Enforcer Returns Defensive Copies [Documentation] get_violations and get_included_files return defensive copies ${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} defensive-copies cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} defensive-copies-ok Budget Enforcer Validates Constructor Arguments [Documentation] BudgetEnforcer raises ValueError for invalid budget values ${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} constructor-validation cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} constructor-validation-ok Budget Enforcer Validates Add File Arguments [Documentation] add_file raises ValueError for empty name ${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} add-file-validation cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} add-file-validation-ok Budget Enforcer Handles Multi-Byte UTF-8 Content [Documentation] BudgetEnforcer measures file size in bytes not characters ${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} multibyte-utf8 cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} multibyte-utf8-ok Budget Enforcer Reset Clears State [Documentation] reset() clears all included files, violations, and total size ${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} reset-state cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} reset-state-ok Budget Enforcer Assembled Context Joins Files [Documentation] get_assembled_context joins included file contents with newlines ${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} assembled-context cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} assembled-context-ok