119 lines
4.0 KiB
Python
119 lines
4.0 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
Replace remaining printf calls in test files.
|
||
"""
|
||
|
||
import os
|
||
import re
|
||
import sys
|
||
|
||
def process_file(filepath):
|
||
with open(filepath, 'r') as f:
|
||
content = f.read()
|
||
|
||
original = content
|
||
|
||
# Determine category based on filename
|
||
filename = os.path.basename(filepath).lower()
|
||
if 'crypto' in filename or 'ecc' in filename:
|
||
category = 'DEBUG_CATEGORY_CRYPTO'
|
||
elif 'etcp' in filename:
|
||
category = 'DEBUG_CATEGORY_ETCP'
|
||
elif 'memory' in filename:
|
||
category = 'DEBUG_CATEGORY_MEMORY'
|
||
elif 'u_async' in filename:
|
||
category = 'DEBUG_CATEGORY_UASYNC'
|
||
elif 'll_queue' in filename:
|
||
category = 'DEBUG_CATEGORY_LL_QUEUE'
|
||
elif 'config' in filename:
|
||
category = 'DEBUG_CATEGORY_CONFIG'
|
||
else:
|
||
category = 'DEBUG_CATEGORY_ALL'
|
||
|
||
# Replace printf calls - simple pattern for single line printf
|
||
lines = content.split('\n')
|
||
new_lines = []
|
||
i = 0
|
||
while i < len(lines):
|
||
line = lines[i]
|
||
stripped = line.strip()
|
||
|
||
# Look for printf
|
||
if stripped.startswith('printf('):
|
||
# Try to capture the whole printf call (may span multiple lines)
|
||
# Collect lines until we find semicolon
|
||
printf_lines = [line]
|
||
j = i + 1
|
||
while j < len(lines) and ';' not in lines[j-1]:
|
||
printf_lines.append(lines[j])
|
||
j += 1
|
||
# Now we have block of lines
|
||
block = '\n'.join(printf_lines)
|
||
# Simple regex for single line printf with arguments on same line
|
||
# Match printf("format", args...);
|
||
match = re.search(r'printf\s*\(\s*"([^"]*)"\s*,?(.*)\)\s*;', block, re.DOTALL)
|
||
if match:
|
||
fmt = match.group(1).replace('\n', '').replace('\\n', '')
|
||
args = match.group(2).strip()
|
||
# Determine level
|
||
fmt_lower = fmt.lower()
|
||
if '❌' in fmt or 'error' in fmt_lower or 'failed' in fmt_lower:
|
||
level = 'DEBUG_ERROR'
|
||
elif 'warn' in fmt_lower:
|
||
level = 'DEBUG_WARN'
|
||
elif '✅' in fmt_lower or 'success' in fmt_lower or 'passed' in fmt_lower:
|
||
level = 'DEBUG_INFO'
|
||
elif '[debug]' in fmt_lower:
|
||
level = 'DEBUG_DEBUG'
|
||
else:
|
||
level = 'DEBUG_INFO'
|
||
# Remove emojis
|
||
fmt = fmt.replace('❌', '').replace('✅', '').replace('ℹ️', '').strip()
|
||
# Build new line
|
||
if args:
|
||
new_line = line.replace(stripped, f'{level}({category}, "{fmt}", {args});')
|
||
else:
|
||
new_line = line.replace(stripped, f'{level}({category}, "{fmt}");')
|
||
new_lines.append(new_line)
|
||
i = j # Skip the lines we consumed
|
||
continue
|
||
else:
|
||
# Fallback: just remove printf line
|
||
new_lines.append(line)
|
||
else:
|
||
new_lines.append(line)
|
||
i += 1
|
||
|
||
content = '\n'.join(new_lines)
|
||
|
||
# Remove fflush(stdout) lines
|
||
content = re.sub(r'^\s*fflush\s*\(\s*stdout\s*\)\s*;\s*$', '', content, flags=re.MULTILINE)
|
||
|
||
if content != original:
|
||
with open(filepath, 'w') as f:
|
||
f.write(content)
|
||
print(f"Updated {filepath}")
|
||
else:
|
||
print(f"No changes in {filepath}")
|
||
|
||
def main():
|
||
# Files that still have printf according to grep
|
||
files = [
|
||
'tests/test_ll_queue.c',
|
||
'tests/test_ecc_encrypt.c',
|
||
'tests/test_debug_categories.c',
|
||
'tests/test_etcp_two_instances.c',
|
||
'tests/test_packet_dump.c',
|
||
'tests/test_memory_pool_and_config.c',
|
||
'tests/test_u_async_performance.c',
|
||
'tests/test_etcp_minimal.c'
|
||
]
|
||
|
||
for filepath in files:
|
||
if os.path.exists(filepath):
|
||
process_file(filepath)
|
||
else:
|
||
print(f"File not found: {filepath}")
|
||
|
||
if __name__ == '__main__':
|
||
main() |