Test Migration Example - Legacy to AST
Test Migration Example - Legacy to AST
Date: 2025-01-29 19:45
Summary
Concrete example of migrating test_xmd_processor.c from legacy to AST functions.
Migration Changes Required
1. Update Includes
// OLD:
// External functions from unified processor
char* process_xmd_content(const char* input, store* variables);
int process_xmd_directive(const char* directive, store* var_store, char* output, size_t output_size);
// NEW:
#include "../../include/ast_evaluator.h"
// External AST function
extern char* ast_process_xmd_content(const char* input, store* variables);
2. Update Function Calls
// OLD:
char* result = process_xmd_content(input, vars);
// NEW:
char* result = ast_process_xmd_content(input, vars);
3. Remove process_xmd_directive Usage
The AST parser doesn’t expose a direct directive processor. All directives are handled internally by ast_process_xmd_content().
4. Complete Example Migration
BEFORE:
void test_basic_variable_substitution(void) {
printf("Testing basic variable substitution...\n");
store* vars = store_create();
assert(vars != NULL);
const char* input =
"<!-- xmd:set name=\"World\" -->\n"
"Hello !\n";
char* result = process_xmd_content(input, vars);
assert(result != NULL);
assert(strstr(result, "Hello World!") != NULL);
assert(strstr(result, "xmd:set") == NULL);
free(result);
store_destroy(vars);
printf("✅ Basic variable substitution test passed\n");
}
AFTER:
void test_basic_variable_substitution(void) {
printf("Testing basic variable substitution...\n");
store* vars = store_create();
assert(vars != NULL);
const char* input =
"<!-- xmd:set name=\"World\" -->\n"
"Hello !\n";
char* result = ast_process_xmd_content(input, vars);
assert(result != NULL);
assert(strstr(result, "Hello World!") != NULL);
assert(strstr(result, "xmd:set") == NULL);
free(result);
store_destroy(vars);
printf("✅ Basic variable substitution test passed\n");
}
Migration Script Pattern
For bulk migration, use this sed pattern:
# Replace function declarations
sed -i 's/char\* process_xmd_content(/extern char* ast_process_xmd_content(/g' test_file.c
# Replace function calls
sed -i 's/process_xmd_content(/ast_process_xmd_content(/g' test_file.c
sed -i 's/process_xmd_content_enhanced(/ast_process_xmd_content(/g' test_file.c
# Add AST include after variable.h include
sed -i '/include "variable.h"/a #include "../../include/ast_evaluator.h"' test_file.c
Files Needing Migration
Priority order (based on simplicity):
- test/xmd_processor/test_xmd_processor.c - Basic tests
- test/xmd_processor/test_advanced_scripting.c - Uses enhanced
- test/stress/test_brutal_nesting.c - Stress tests
- test/stress/test_resource_exhaustion.c - Resource tests
- test/integration/test_advanced_integration.c - Complex tests
Testing After Migration
- Build with
./build.sh(BO only) - Run individual test:
./build/test_xmd_processor - Check for any behavioral differences
- Note any elif/else issues (known bug)
Migration example by XOAI - Ready for team use